grpc 1.28.0 → 1.37.0

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 (1541) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1734 -22357
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +31 -9
  6. data/include/grpc/grpc_security.h +274 -180
  7. data/include/grpc/grpc_security_constants.h +4 -0
  8. data/include/grpc/impl/codegen/README.md +22 -0
  9. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  10. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  11. data/include/grpc/impl/codegen/grpc_types.h +32 -30
  12. data/include/grpc/impl/codegen/log.h +0 -2
  13. data/include/grpc/impl/codegen/port_platform.h +36 -90
  14. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  15. data/include/grpc/module.modulemap +24 -39
  16. data/include/grpc/slice_buffer.h +3 -3
  17. data/include/grpc/support/sync.h +3 -3
  18. data/include/grpc/support/time.h +7 -7
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +16 -12
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  21. data/src/core/ext/filters/client_channel/client_channel.cc +3845 -2414
  22. data/src/core/ext/filters/client_channel/client_channel.h +1 -7
  23. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  24. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  25. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -3
  26. data/src/core/ext/filters/client_channel/config_selector.cc +58 -0
  27. data/src/core/ext/filters/client_channel/config_selector.h +133 -0
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +191 -0
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -30
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +7 -7
  34. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +15 -16
  35. data/src/core/ext/filters/client_channel/http_proxy.cc +44 -34
  36. data/src/core/ext/filters/client_channel/lb_policy.cc +28 -20
  37. data/src/core/ext/filters/client_channel/lb_policy.h +50 -38
  38. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +96 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +101 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -11
  41. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +481 -510
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -41
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +24 -18
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +922 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +11 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +18 -46
  57. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +520 -134
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -26
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +795 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  64. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +18 -8
  65. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  66. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +12 -10
  67. data/src/core/ext/filters/client_channel/resolver.cc +9 -10
  68. data/src/core/ext/filters/client_channel/resolver.h +10 -20
  69. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +111 -110
  70. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +4 -34
  71. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  72. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +15 -13
  73. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +82 -123
  74. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +642 -184
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +10 -3
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  78. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +61 -61
  79. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +102 -108
  80. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -5
  81. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  82. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  83. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +829 -46
  84. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  85. data/src/core/ext/filters/client_channel/resolver_factory.h +8 -8
  86. data/src/core/ext/filters/client_channel/resolver_registry.cc +55 -52
  87. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -10
  88. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +47 -93
  89. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +30 -26
  90. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  91. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  92. data/src/core/ext/filters/client_channel/server_address.cc +132 -13
  93. data/src/core/ext/filters/client_channel/server_address.h +80 -32
  94. data/src/core/ext/filters/client_channel/service_config.cc +114 -149
  95. data/src/core/ext/filters/client_channel/service_config.h +33 -100
  96. data/src/core/ext/filters/client_channel/service_config_call_data.h +86 -0
  97. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  98. data/src/core/ext/filters/client_channel/service_config_parser.cc +89 -0
  99. data/src/core/ext/filters/client_channel/service_config_parser.h +92 -0
  100. data/src/core/ext/filters/client_channel/subchannel.cc +211 -230
  101. data/src/core/ext/filters/client_channel/subchannel.h +116 -118
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  103. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  105. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  106. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  107. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  108. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  110. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  111. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  112. data/src/core/ext/filters/http/client/http_client_filter.cc +29 -34
  113. data/src/core/ext/filters/http/client_authority_filter.cc +10 -10
  114. data/src/core/ext/filters/http/http_filters_plugin.cc +34 -15
  115. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  116. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  117. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  118. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  119. data/src/core/ext/filters/max_age/max_age_filter.cc +38 -34
  120. data/src/core/ext/filters/message_size/message_size_filter.cc +64 -90
  121. data/src/core/ext/filters/message_size/message_size_filter.h +12 -5
  122. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  123. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  124. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  127. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +37 -49
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +803 -355
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +19 -18
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +65 -21
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  136. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +343 -347
  138. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +13 -1
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +36 -33
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -19
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +14 -13
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -7
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -4
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -18
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +30 -17
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +37 -37
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/internal.h +38 -23
  161. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -74
  162. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  163. data/src/core/ext/transport/chttp2/transport/writing.cc +30 -28
  164. data/src/core/ext/transport/inproc/inproc_transport.cc +106 -33
  165. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  166. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
  168. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +10 -4
  170. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +865 -0
  172. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  173. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +253 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +453 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1801 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +77 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  181. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +364 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +428 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +88 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +334 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1066 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +388 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +78 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +839 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +767 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +88 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +182 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +755 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +65 -0
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  205. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +95 -0
  206. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +42 -0
  207. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +243 -0
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  211. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +305 -0
  212. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  213. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +367 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +73 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +130 -0
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +557 -0
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +159 -0
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +623 -0
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +40 -0
  221. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +107 -0
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  224. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  226. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +662 -0
  228. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +65 -0
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +237 -0
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +941 -0
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3790 -0
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +159 -0
  234. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  235. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +122 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +362 -0
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1488 -0
  246. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  247. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  248. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +113 -0
  249. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +458 -0
  250. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  251. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +219 -0
  252. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +146 -0
  253. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +621 -0
  254. data/src/core/ext/upb-generated/envoy/{api/v2/rds.upb.c → service/cluster/v3/cds.upb.c} +7 -9
  255. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +56 -0
  256. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  257. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +56 -0
  258. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  259. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +499 -0
  260. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +27 -0
  261. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +56 -0
  262. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +27 -0
  263. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +56 -0
  264. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  265. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +151 -0
  266. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +7 -7
  267. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +56 -0
  268. data/src/core/ext/upb-generated/envoy/{api/v2/cds.upb.c → service/route/v3/srds.upb.c} +7 -7
  269. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +56 -0
  270. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  271. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +128 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +84 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +78 -0
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +166 -0
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +146 -0
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  287. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +207 -0
  288. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  289. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +301 -0
  290. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  291. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +283 -0
  292. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +3 -2
  293. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +9 -9
  294. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  295. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +99 -0
  296. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  297. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +130 -0
  298. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  299. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +68 -0
  300. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  304. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +871 -0
  305. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  306. data/src/core/ext/upb-generated/google/api/http.upb.h +52 -32
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  308. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -6
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +107 -106
  310. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +691 -496
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  312. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +12 -6
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  314. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +8 -2
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +5 -5
  316. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +55 -57
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  318. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +12 -6
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  320. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +82 -28
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  322. data/src/core/ext/upb-generated/google/rpc/status.upb.h +17 -10
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +5 -5
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +40 -45
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +43 -43
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +236 -184
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  328. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +29 -13
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  330. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +19 -7
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  332. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +122 -62
  333. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +30 -12
  335. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  337. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
  338. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +71 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  341. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +60 -0
  342. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +9 -9
  343. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +48 -68
  344. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  345. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  346. data/src/core/ext/upb-generated/validate/validate.upb.c +71 -70
  347. data/src/core/ext/upb-generated/validate/validate.upb.h +732 -586
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  360. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  361. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  362. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  363. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  364. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  366. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  369. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  374. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  375. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  376. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  377. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  392. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  396. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +231 -0
  397. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +85 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  399. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  400. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  403. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  404. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  406. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  410. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  411. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  412. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  413. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  414. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  415. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  416. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  417. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  418. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  419. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  420. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  421. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  422. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  423. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +944 -0
  425. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +290 -0
  426. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  428. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  429. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  430. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  431. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  433. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  434. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  435. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +505 -0
  439. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  440. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  441. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  442. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  443. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  444. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  445. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  446. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  447. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  448. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  449. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  450. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  451. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  452. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  453. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  454. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  455. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  456. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  457. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  458. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  459. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  460. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  461. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  462. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  463. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  465. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  466. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  467. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  468. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  469. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  470. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  471. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  472. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  473. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  475. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  476. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  477. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  478. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  479. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  480. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  481. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  482. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  483. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  484. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  485. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  486. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  487. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  488. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  489. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  490. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  491. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  492. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  493. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  494. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  495. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  496. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  497. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  498. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  499. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  500. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  501. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  502. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  503. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  505. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  507. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  508. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  509. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  511. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  512. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  513. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  515. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  516. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  517. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  519. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  520. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  521. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  522. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  523. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  524. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  525. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  526. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  527. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  528. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  529. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  530. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  531. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  532. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  533. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  534. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  535. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  536. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  537. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  538. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  539. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  540. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  541. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  542. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  543. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  544. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  545. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  546. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  547. data/src/core/ext/xds/xds_api.cc +3791 -0
  548. data/src/core/ext/xds/xds_api.h +671 -0
  549. data/src/core/ext/xds/xds_bootstrap.cc +555 -0
  550. data/src/core/ext/xds/xds_bootstrap.h +120 -0
  551. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  552. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  553. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  554. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +983 -773
  555. data/src/core/ext/xds/xds_client.h +365 -0
  556. data/src/core/ext/xds/xds_client_stats.cc +159 -0
  557. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +80 -40
  558. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  559. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  560. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  561. data/src/core/ext/xds/xds_http_filters.h +130 -0
  562. data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
  563. data/src/core/lib/channel/channel_args.cc +24 -22
  564. data/src/core/lib/channel/channel_args.h +3 -2
  565. data/src/core/lib/channel/channel_stack.cc +12 -0
  566. data/src/core/lib/channel/channel_stack.h +27 -13
  567. data/src/core/lib/channel/channel_trace.cc +6 -8
  568. data/src/core/lib/channel/channel_trace.h +1 -1
  569. data/src/core/lib/channel/channelz.cc +137 -97
  570. data/src/core/lib/channel/channelz.h +47 -26
  571. data/src/core/lib/channel/channelz_registry.cc +34 -15
  572. data/src/core/lib/channel/channelz_registry.h +3 -1
  573. data/src/core/lib/channel/connected_channel.cc +7 -5
  574. data/src/core/lib/channel/context.h +1 -1
  575. data/src/core/lib/channel/handshaker.cc +15 -59
  576. data/src/core/lib/channel/handshaker.h +7 -22
  577. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  578. data/src/core/lib/channel/status_util.cc +14 -5
  579. data/src/core/lib/channel/status_util.h +5 -0
  580. data/src/core/lib/compression/compression.cc +8 -4
  581. data/src/core/lib/compression/compression_args.cc +3 -2
  582. data/src/core/lib/compression/compression_internal.cc +10 -5
  583. data/src/core/lib/compression/compression_internal.h +2 -1
  584. data/src/core/lib/compression/message_compress.cc +5 -1
  585. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  586. data/src/core/lib/debug/stats.cc +21 -27
  587. data/src/core/lib/debug/stats.h +5 -3
  588. data/src/core/lib/debug/stats_data.cc +1 -0
  589. data/src/core/lib/debug/stats_data.h +13 -13
  590. data/src/core/lib/gpr/alloc.cc +3 -2
  591. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  592. data/src/core/lib/gpr/log.cc +59 -17
  593. data/src/core/lib/gpr/log_linux.cc +23 -9
  594. data/src/core/lib/gpr/log_posix.cc +19 -7
  595. data/src/core/lib/gpr/log_windows.cc +18 -4
  596. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  597. data/src/core/lib/gpr/spinlock.h +12 -5
  598. data/src/core/lib/gpr/string.cc +33 -55
  599. data/src/core/lib/gpr/string.h +9 -24
  600. data/src/core/lib/gpr/sync.cc +4 -4
  601. data/src/core/lib/gpr/sync_abseil.cc +5 -6
  602. data/src/core/lib/gpr/sync_posix.cc +2 -8
  603. data/src/core/lib/gpr/sync_windows.cc +2 -2
  604. data/src/core/lib/gpr/time.cc +16 -12
  605. data/src/core/lib/gpr/time_posix.cc +1 -1
  606. data/src/core/lib/gpr/time_precise.cc +5 -2
  607. data/src/core/lib/gpr/time_precise.h +6 -2
  608. data/src/core/lib/gpr/tls.h +4 -0
  609. data/src/core/lib/gpr/tls_msvc.h +2 -0
  610. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  611. data/src/core/lib/gpr/useful.h +5 -4
  612. data/src/core/lib/gprpp/arena.h +3 -2
  613. data/src/core/lib/gprpp/atomic.h +9 -9
  614. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  615. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  616. data/src/core/lib/gprpp/examine_stack.h +46 -0
  617. data/src/core/lib/gprpp/fork.cc +3 -3
  618. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  619. data/src/core/lib/gprpp/host_port.cc +29 -35
  620. data/src/core/lib/gprpp/host_port.h +14 -17
  621. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  622. data/src/core/lib/gprpp/mpscq.cc +2 -2
  623. data/src/core/lib/gprpp/orphanable.h +4 -8
  624. data/src/core/lib/gprpp/ref_counted.h +91 -68
  625. data/src/core/lib/gprpp/ref_counted_ptr.h +173 -7
  626. data/src/core/lib/gprpp/stat.h +38 -0
  627. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  628. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  629. data/src/core/lib/gprpp/sync.h +129 -40
  630. data/src/core/lib/gprpp/thd.h +3 -3
  631. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  632. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  633. data/src/core/lib/gprpp/time_util.cc +77 -0
  634. data/src/core/lib/gprpp/time_util.h +42 -0
  635. data/src/core/lib/http/format_request.cc +46 -65
  636. data/src/core/lib/http/httpcli.cc +16 -14
  637. data/src/core/lib/http/httpcli.h +4 -6
  638. data/src/core/lib/http/httpcli_security_connector.cc +13 -13
  639. data/src/core/lib/http/parser.cc +47 -27
  640. data/src/core/lib/http/parser.h +2 -3
  641. data/src/core/lib/iomgr/buffer_list.h +23 -22
  642. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  643. data/src/core/lib/iomgr/call_combiner.h +3 -2
  644. data/src/core/lib/iomgr/cfstream_handle.cc +6 -4
  645. data/src/core/lib/iomgr/closure.h +2 -3
  646. data/src/core/lib/iomgr/combiner.cc +2 -1
  647. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  648. data/src/core/lib/iomgr/endpoint.cc +5 -1
  649. data/src/core/lib/iomgr/endpoint.h +8 -4
  650. data/src/core/lib/iomgr/endpoint_cfstream.cc +38 -14
  651. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  652. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  653. data/src/core/lib/iomgr/error.cc +23 -21
  654. data/src/core/lib/iomgr/error.h +1 -2
  655. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  656. data/src/core/lib/iomgr/error_internal.h +1 -1
  657. data/src/core/lib/iomgr/ev_apple.cc +359 -0
  658. data/src/core/lib/iomgr/ev_apple.h +43 -0
  659. data/src/core/lib/iomgr/ev_epoll1_linux.cc +46 -43
  660. data/src/core/lib/iomgr/ev_epollex_linux.cc +46 -45
  661. data/src/core/lib/iomgr/ev_poll_posix.cc +18 -15
  662. data/src/core/lib/iomgr/ev_posix.cc +5 -6
  663. data/src/core/lib/iomgr/exec_ctx.cc +7 -3
  664. data/src/core/lib/iomgr/exec_ctx.h +26 -10
  665. data/src/core/lib/iomgr/executor.cc +2 -1
  666. data/src/core/lib/iomgr/executor.h +1 -1
  667. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  668. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  669. data/src/core/lib/iomgr/iomgr.cc +1 -1
  670. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  671. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -21
  672. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  673. data/src/core/lib/iomgr/load_file.h +1 -1
  674. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  675. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  676. data/src/core/lib/iomgr/parse_address.cc +322 -0
  677. data/src/core/lib/iomgr/parse_address.h +77 -0
  678. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  679. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  680. data/src/core/lib/iomgr/pollset_set_custom.cc +11 -11
  681. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  682. data/src/core/lib/iomgr/port.h +2 -21
  683. data/src/core/lib/iomgr/python_util.h +46 -0
  684. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  685. data/src/core/lib/iomgr/resolve_address.h +4 -6
  686. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  687. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  688. data/src/core/lib/iomgr/resolve_address_posix.cc +11 -16
  689. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  690. data/src/core/lib/iomgr/resource_quota.cc +39 -38
  691. data/src/core/lib/iomgr/sockaddr_utils.cc +161 -44
  692. data/src/core/lib/iomgr/sockaddr_utils.h +40 -19
  693. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  694. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  695. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  696. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  697. data/src/core/lib/iomgr/socket_utils_common_posix.cc +103 -81
  698. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  699. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  700. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  701. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  702. data/src/core/lib/iomgr/tcp_client_custom.cc +13 -15
  703. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -37
  704. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  705. data/src/core/lib/iomgr/tcp_custom.cc +56 -36
  706. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  707. data/src/core/lib/iomgr/tcp_posix.cc +48 -29
  708. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  709. data/src/core/lib/iomgr/tcp_server.h +7 -5
  710. data/src/core/lib/iomgr/tcp_server_custom.cc +39 -45
  711. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  712. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  713. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  714. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  715. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  716. data/src/core/lib/iomgr/tcp_uv.cc +5 -4
  717. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  718. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  719. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  720. data/src/core/lib/iomgr/timer_generic.cc +20 -20
  721. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  722. data/src/core/lib/iomgr/timer_heap.h +2 -3
  723. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  724. data/src/core/lib/iomgr/udp_server.cc +33 -38
  725. data/src/core/lib/iomgr/udp_server.h +6 -4
  726. data/src/core/lib/iomgr/unix_sockets_posix.cc +36 -30
  727. data/src/core/lib/iomgr/unix_sockets_posix.h +8 -1
  728. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -2
  729. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  730. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  731. data/src/core/lib/json/json.h +15 -4
  732. data/src/core/lib/json/json_reader.cc +33 -30
  733. data/src/core/lib/json/json_util.cc +58 -0
  734. data/src/core/lib/json/json_util.h +204 -0
  735. data/src/core/lib/json/json_writer.cc +15 -13
  736. data/src/core/lib/matchers/matchers.cc +339 -0
  737. data/src/core/lib/matchers/matchers.h +160 -0
  738. data/src/core/lib/security/context/security_context.cc +4 -3
  739. data/src/core/lib/security/context/security_context.h +3 -1
  740. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  741. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  742. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  743. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  744. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  745. data/src/core/lib/security/credentials/credentials.cc +7 -91
  746. data/src/core/lib/security/credentials/credentials.h +18 -66
  747. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  748. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  749. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  750. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  751. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  752. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  753. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  754. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  755. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  756. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  757. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  758. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  759. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  760. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +90 -67
  761. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  762. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  763. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  764. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -4
  765. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  766. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  767. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +13 -0
  768. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +13 -19
  769. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  770. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  771. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  772. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +109 -97
  773. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -7
  774. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +20 -7
  775. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  776. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +27 -6
  777. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  778. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +346 -0
  779. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  780. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  781. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  782. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -140
  783. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +74 -167
  784. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  785. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  786. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  787. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  788. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  789. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  790. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -7
  791. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +27 -32
  792. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  793. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  794. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  795. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  796. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  797. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  798. data/src/core/lib/security/security_connector/security_connector.cc +6 -3
  799. data/src/core/lib/security/security_connector/security_connector.h +6 -4
  800. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +42 -40
  801. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  802. data/src/core/lib/security/security_connector/ssl_utils.cc +100 -27
  803. data/src/core/lib/security/security_connector/ssl_utils.h +37 -31
  804. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +394 -284
  805. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +108 -42
  806. data/src/core/lib/security/transport/auth_filters.h +0 -5
  807. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  808. data/src/core/lib/security/transport/secure_endpoint.cc +9 -3
  809. data/src/core/lib/security/transport/security_handshaker.cc +36 -8
  810. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  811. data/src/core/lib/security/util/json_util.cc +12 -13
  812. data/src/core/lib/security/util/json_util.h +1 -0
  813. data/src/core/lib/slice/slice.cc +45 -5
  814. data/src/core/lib/slice/slice_buffer.cc +2 -1
  815. data/src/core/lib/slice/slice_intern.cc +13 -16
  816. data/src/core/lib/slice/slice_internal.h +17 -2
  817. data/src/core/lib/slice/slice_utils.h +9 -0
  818. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  819. data/src/core/lib/surface/call.cc +95 -88
  820. data/src/core/lib/surface/call.h +2 -1
  821. data/src/core/lib/surface/call_details.cc +8 -8
  822. data/src/core/lib/surface/call_log_batch.cc +50 -58
  823. data/src/core/lib/surface/channel.cc +86 -72
  824. data/src/core/lib/surface/channel.h +54 -7
  825. data/src/core/lib/surface/channel_init.cc +1 -1
  826. data/src/core/lib/surface/channel_ping.cc +2 -3
  827. data/src/core/lib/surface/completion_queue.cc +64 -63
  828. data/src/core/lib/surface/completion_queue.h +16 -16
  829. data/src/core/lib/surface/event_string.cc +18 -25
  830. data/src/core/lib/surface/event_string.h +3 -1
  831. data/src/core/lib/surface/init.cc +45 -29
  832. data/src/core/lib/surface/init_secure.cc +1 -4
  833. data/src/core/lib/surface/lame_client.cc +47 -54
  834. data/src/core/lib/surface/lame_client.h +5 -0
  835. data/src/core/lib/surface/server.cc +1309 -1300
  836. data/src/core/lib/surface/server.h +469 -45
  837. data/src/core/lib/surface/validate_metadata.h +3 -0
  838. data/src/core/lib/surface/version.cc +2 -2
  839. data/src/core/lib/transport/authority_override.cc +40 -0
  840. data/src/core/lib/transport/authority_override.h +37 -0
  841. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  842. data/src/core/lib/transport/bdp_estimator.h +2 -1
  843. data/src/core/lib/transport/byte_stream.h +10 -5
  844. data/src/core/lib/transport/connectivity_state.cc +23 -17
  845. data/src/core/lib/transport/connectivity_state.h +31 -15
  846. data/src/core/lib/transport/error_utils.cc +13 -0
  847. data/src/core/lib/transport/error_utils.h +7 -1
  848. data/src/core/lib/transport/metadata.cc +19 -5
  849. data/src/core/lib/transport/metadata.h +2 -2
  850. data/src/core/lib/transport/metadata_batch.cc +27 -0
  851. data/src/core/lib/transport/metadata_batch.h +20 -7
  852. data/src/core/lib/transport/static_metadata.cc +296 -277
  853. data/src/core/lib/transport/static_metadata.h +81 -74
  854. data/src/core/lib/transport/status_conversion.cc +6 -14
  855. data/src/core/lib/transport/status_metadata.cc +4 -3
  856. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  857. data/src/core/lib/transport/transport.cc +7 -6
  858. data/src/core/lib/transport/transport.h +24 -10
  859. data/src/core/lib/transport/transport_op_string.cc +61 -102
  860. data/src/core/lib/uri/uri_parser.cc +135 -258
  861. data/src/core/lib/uri/uri_parser.h +60 -23
  862. data/src/core/plugin_registry/grpc_plugin_registry.cc +65 -12
  863. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  864. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  865. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  866. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +49 -38
  867. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  868. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +98 -48
  869. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  870. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  871. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  872. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  873. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  874. data/src/core/tsi/fake_transport_security.cc +27 -20
  875. data/src/core/tsi/local_transport_security.cc +5 -1
  876. data/src/core/tsi/local_transport_security.h +6 -7
  877. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  878. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  879. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  880. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -4
  881. data/src/core/tsi/ssl_transport_security.cc +226 -105
  882. data/src/core/tsi/ssl_transport_security.h +28 -16
  883. data/src/core/tsi/ssl_types.h +0 -2
  884. data/src/core/tsi/transport_security.cc +10 -8
  885. data/src/core/tsi/transport_security.h +6 -9
  886. data/src/core/tsi/transport_security_grpc.h +2 -3
  887. data/src/core/tsi/transport_security_interface.h +9 -4
  888. data/src/ruby/bin/math_services_pb.rb +4 -4
  889. data/src/ruby/ext/grpc/extconf.rb +15 -4
  890. data/src/ruby/ext/grpc/rb_call.c +12 -3
  891. data/src/ruby/ext/grpc/rb_call.h +4 -0
  892. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  893. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  894. data/src/ruby/ext/grpc/rb_channel_credentials.c +20 -1
  895. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  896. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  897. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  898. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  899. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  900. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +44 -18
  901. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +83 -44
  902. data/src/ruby/ext/grpc/rb_server.c +13 -1
  903. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  904. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  905. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  906. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  907. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  908. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  909. data/src/ruby/lib/grpc/errors.rb +103 -42
  910. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  911. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  912. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  913. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  914. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  915. data/src/ruby/lib/grpc/structs.rb +1 -1
  916. data/src/ruby/lib/grpc/version.rb +1 -1
  917. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  918. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  919. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +51 -0
  920. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +61 -11
  921. data/src/ruby/spec/call_spec.rb +1 -1
  922. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  923. data/src/ruby/spec/channel_spec.rb +17 -6
  924. data/src/ruby/spec/client_auth_spec.rb +27 -1
  925. data/src/ruby/spec/debug_message_spec.rb +134 -0
  926. data/src/ruby/spec/errors_spec.rb +1 -1
  927. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  928. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  929. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  930. data/src/ruby/spec/generic/service_spec.rb +2 -0
  931. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  932. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  933. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  934. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  935. data/src/ruby/spec/pb/codegen/package_option_spec.rb +29 -7
  936. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  937. data/src/ruby/spec/server_spec.rb +22 -0
  938. data/src/ruby/spec/support/services.rb +10 -4
  939. data/src/ruby/spec/testdata/ca.pem +18 -13
  940. data/src/ruby/spec/testdata/client.key +26 -14
  941. data/src/ruby/spec/testdata/client.pem +18 -12
  942. data/src/ruby/spec/testdata/server1.key +26 -14
  943. data/src/ruby/spec/testdata/server1.pem +20 -14
  944. data/src/ruby/spec/user_agent_spec.rb +74 -0
  945. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  946. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  947. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  948. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  949. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  950. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  951. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  952. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  953. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  954. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  955. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  956. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  957. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  958. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  959. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  960. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  961. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  962. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  963. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  964. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  965. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  966. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  967. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  968. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  969. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  970. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  971. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  972. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  973. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  974. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  975. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  976. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  977. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  978. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  979. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  980. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  981. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  982. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  983. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  984. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  985. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  986. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  987. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  988. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  989. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  990. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  991. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  992. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  993. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  994. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  995. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  996. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  997. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  998. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  999. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1000. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  1001. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1002. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  1003. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1004. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1005. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1006. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  1007. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1008. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1009. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1010. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1011. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1012. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1013. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1014. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1015. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1016. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1017. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1018. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1019. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1020. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1021. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1022. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  1023. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  1024. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  1025. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  1026. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1027. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  1028. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1029. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1030. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  1031. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  1032. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  1033. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  1034. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1035. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1036. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1037. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1038. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  1039. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  1040. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  1041. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  1042. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1043. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1044. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1045. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1046. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  1047. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  1048. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  1049. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  1050. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  1051. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  1052. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1053. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1054. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  1055. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  1056. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1057. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  1058. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  1059. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  1060. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1061. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1062. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1063. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1064. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  1065. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1066. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1067. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1068. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1069. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1070. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1071. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1072. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1073. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1074. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1075. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1076. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  1077. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  1078. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1079. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1080. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  1081. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  1082. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  1083. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  1084. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1085. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1086. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1087. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1088. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  1089. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1090. data/third_party/abseil-cpp/absl/time/duration.cc +953 -0
  1091. data/third_party/abseil-cpp/absl/time/format.cc +160 -0
  1092. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1093. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +632 -0
  1094. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +386 -0
  1095. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1096. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1097. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1098. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1099. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1029 -0
  1100. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1101. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1102. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +113 -0
  1103. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1104. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +965 -0
  1105. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +137 -0
  1106. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +309 -0
  1107. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1108. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1109. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1110. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1111. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1112. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  1113. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1114. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1115. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  1116. data/third_party/abseil-cpp/absl/time/time.h +1583 -0
  1117. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1118. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1119. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1120. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1121. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1122. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  1123. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1124. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1125. data/third_party/boringssl-with-bazel/err_data.c +759 -707
  1126. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +6 -6
  1127. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1128. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1129. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +6 -13
  1130. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1131. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  1132. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +5 -3
  1133. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  1134. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -20
  1135. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1137. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1138. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1139. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1140. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  1141. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  1142. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  1143. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  1144. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1145. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  1146. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1150. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1151. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  1152. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  1153. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1154. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  1156. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +18 -7
  1158. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1159. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  1160. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  1161. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  1162. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  1163. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  1164. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  1165. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +19 -43
  1169. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1170. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1172. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  1175. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  1176. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1179. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  1180. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1181. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -2
  1182. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1183. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  1184. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  1185. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +34 -13
  1186. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  1187. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  1188. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  1189. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  1190. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +149 -211
  1192. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +301 -117
  1195. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +22 -28
  1196. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  1197. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  1198. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  1199. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  1200. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  1201. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  1202. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  1203. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  1206. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  1207. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  1208. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1209. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  1210. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  1211. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  1212. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1213. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1214. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +69 -5
  1216. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +162 -55
  1217. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -121
  1218. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +5 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +73 -40
  1221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +122 -55
  1222. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +217 -2
  1223. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  1224. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +532 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +246 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  1227. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  1228. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  1230. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  1231. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1232. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  1234. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1238. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +318 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1399 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +858 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +7 -7
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1248. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  1249. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  1250. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +21 -37
  1252. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  1254. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  1255. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  1256. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +89 -11
  1257. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +7 -4
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1259. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +62 -44
  1261. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +67 -25
  1262. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +13 -11
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  1264. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +38 -17
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1268. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  1269. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  1270. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +68 -9
  1271. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  1275. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  1277. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  1278. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1281. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1283. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +126 -40
  1287. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -7
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  1289. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  1290. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1291. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  1292. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +662 -556
  1293. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1294. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -7
  1295. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1296. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1297. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  1298. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +25 -0
  1299. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1300. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +10 -5
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +82 -20
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +11 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  1305. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  1306. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +85 -3
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +6 -17
  1313. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1316. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +359 -120
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +33 -10
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +310 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1140 -755
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +593 -440
  1322. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1323. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  1324. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  1325. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  1326. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +181 -57
  1327. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +45 -26
  1328. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +43 -45
  1329. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +32 -10
  1330. data/third_party/boringssl-with-bazel/src/ssl/internal.h +160 -80
  1331. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  1332. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -3
  1333. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  1334. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +77 -8
  1335. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -6
  1336. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  1337. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +131 -15
  1338. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  1339. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +50 -15
  1340. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  1341. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  1342. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  1343. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +53 -30
  1344. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +636 -100
  1345. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +2 -3
  1346. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +187 -68
  1347. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +71 -90
  1348. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +247 -73
  1349. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  1350. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1351. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  1352. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  1353. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  1354. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  1355. data/third_party/re2/re2/bitmap256.h +117 -0
  1356. data/third_party/re2/re2/bitstate.cc +385 -0
  1357. data/third_party/re2/re2/compile.cc +1279 -0
  1358. data/third_party/re2/re2/dfa.cc +2130 -0
  1359. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1360. data/third_party/re2/re2/filtered_re2.h +109 -0
  1361. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1362. data/third_party/re2/re2/nfa.cc +713 -0
  1363. data/third_party/re2/re2/onepass.cc +623 -0
  1364. data/third_party/re2/re2/parse.cc +2464 -0
  1365. data/third_party/re2/re2/perl_groups.cc +119 -0
  1366. data/third_party/re2/re2/pod_array.h +55 -0
  1367. data/third_party/re2/re2/prefilter.cc +710 -0
  1368. data/third_party/re2/re2/prefilter.h +108 -0
  1369. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1370. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1371. data/third_party/re2/re2/prog.cc +988 -0
  1372. data/third_party/re2/re2/prog.h +436 -0
  1373. data/third_party/re2/re2/re2.cc +1362 -0
  1374. data/third_party/re2/re2/re2.h +1002 -0
  1375. data/third_party/re2/re2/regexp.cc +980 -0
  1376. data/third_party/re2/re2/regexp.h +659 -0
  1377. data/third_party/re2/re2/set.cc +154 -0
  1378. data/third_party/re2/re2/set.h +80 -0
  1379. data/third_party/re2/re2/simplify.cc +657 -0
  1380. data/third_party/re2/re2/sparse_array.h +392 -0
  1381. data/third_party/re2/re2/sparse_set.h +264 -0
  1382. data/third_party/re2/re2/stringpiece.cc +65 -0
  1383. data/third_party/re2/re2/stringpiece.h +210 -0
  1384. data/third_party/re2/re2/tostring.cc +351 -0
  1385. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1386. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1387. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1388. data/third_party/re2/re2/unicode_groups.h +67 -0
  1389. data/third_party/re2/re2/walker-inl.h +246 -0
  1390. data/third_party/re2/util/benchmark.h +156 -0
  1391. data/third_party/re2/util/flags.h +26 -0
  1392. data/third_party/re2/util/logging.h +109 -0
  1393. data/third_party/re2/util/malloc_counter.h +19 -0
  1394. data/third_party/re2/util/mix.h +41 -0
  1395. data/third_party/re2/util/mutex.h +148 -0
  1396. data/third_party/re2/util/pcre.cc +1025 -0
  1397. data/third_party/re2/util/pcre.h +681 -0
  1398. data/third_party/re2/util/rune.cc +260 -0
  1399. data/third_party/re2/util/strutil.cc +149 -0
  1400. data/third_party/re2/util/strutil.h +21 -0
  1401. data/third_party/re2/util/test.h +50 -0
  1402. data/third_party/re2/util/utf.h +44 -0
  1403. data/third_party/re2/util/util.h +42 -0
  1404. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1405. data/third_party/upb/upb/decode.c +604 -511
  1406. data/third_party/upb/upb/decode.h +20 -1
  1407. data/third_party/upb/upb/decode.int.h +163 -0
  1408. data/third_party/upb/upb/decode_fast.c +1040 -0
  1409. data/third_party/upb/upb/decode_fast.h +126 -0
  1410. data/third_party/upb/upb/def.c +2178 -0
  1411. data/third_party/upb/upb/def.h +315 -0
  1412. data/third_party/upb/upb/def.hpp +439 -0
  1413. data/third_party/upb/upb/encode.c +311 -211
  1414. data/third_party/upb/upb/encode.h +27 -2
  1415. data/third_party/upb/upb/msg.c +215 -70
  1416. data/third_party/upb/upb/msg.h +558 -14
  1417. data/third_party/upb/upb/port_def.inc +105 -63
  1418. data/third_party/upb/upb/port_undef.inc +10 -7
  1419. data/third_party/upb/upb/reflection.c +408 -0
  1420. data/third_party/upb/upb/reflection.h +168 -0
  1421. data/third_party/upb/upb/table.c +73 -269
  1422. data/third_party/upb/upb/table.int.h +25 -57
  1423. data/third_party/upb/upb/text_encode.c +421 -0
  1424. data/third_party/upb/upb/text_encode.h +38 -0
  1425. data/third_party/upb/upb/upb.c +138 -135
  1426. data/third_party/upb/upb/upb.h +119 -146
  1427. data/third_party/upb/upb/upb.hpp +88 -0
  1428. data/third_party/upb/upb/upb.int.h +29 -0
  1429. data/third_party/xxhash/xxhash.h +5443 -0
  1430. metadata +686 -160
  1431. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  1432. data/src/core/ext/filters/client_channel/parse_address.cc +0 -237
  1433. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1434. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1435. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -65
  1436. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -359
  1437. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -122
  1438. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1779
  1439. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1440. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -347
  1441. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -87
  1442. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1443. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -104
  1444. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -274
  1445. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +0 -116
  1446. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -246
  1447. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -905
  1448. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1449. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -390
  1450. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1411
  1451. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -73
  1452. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1453. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -34
  1454. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1455. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -54
  1456. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1457. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -111
  1458. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1459. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -292
  1460. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -847
  1461. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -95
  1462. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1463. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -196
  1464. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1465. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -168
  1466. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -658
  1467. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -35
  1468. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1469. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -132
  1470. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -436
  1471. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -128
  1472. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1473. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +0 -30
  1474. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1475. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -91
  1476. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1477. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -17
  1478. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1479. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -88
  1480. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -258
  1481. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -111
  1482. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1483. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +0 -30
  1484. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1485. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -104
  1486. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -383
  1487. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -17
  1488. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1489. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -144
  1490. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1491. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -42
  1492. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1493. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1494. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -62
  1495. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1496. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -17
  1497. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1498. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -793
  1499. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2936
  1500. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -58
  1501. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1502. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1503. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -227
  1504. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1505. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -296
  1506. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1072
  1507. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -32
  1508. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1509. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +0 -23
  1510. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1511. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -52
  1512. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -130
  1513. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -47
  1514. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -108
  1515. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -52
  1516. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1517. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -87
  1518. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1519. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -38
  1520. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1521. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -49
  1522. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1523. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +0 -28
  1524. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1525. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -88
  1526. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1527. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1528. data/src/core/lib/gprpp/map.h +0 -59
  1529. data/src/core/lib/gprpp/string_view.h +0 -60
  1530. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1531. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1532. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1533. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1534. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1535. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  1536. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1539. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  1540. data/third_party/upb/upb/generated_util.h +0 -105
  1541. data/third_party/upb/upb/port.c +0 -26
@@ -0,0 +1,96 @@
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/lb_policy/address_filtering.h"
20
+
21
+ #include "absl/strings/str_cat.h"
22
+ #include "absl/strings/str_join.h"
23
+
24
+ #include "src/core/lib/channel/channel_args.h"
25
+
26
+ #define GRPC_ARG_HIERARCHICAL_PATH "grpc.internal.address.hierarchical_path"
27
+
28
+ namespace grpc_core {
29
+
30
+ const char* kHierarchicalPathAttributeKey = "hierarchical_path";
31
+
32
+ namespace {
33
+
34
+ class HierarchicalPathAttribute : public ServerAddress::AttributeInterface {
35
+ public:
36
+ explicit HierarchicalPathAttribute(std::vector<std::string> path)
37
+ : path_(std::move(path)) {}
38
+
39
+ std::unique_ptr<AttributeInterface> Copy() const override {
40
+ return absl::make_unique<HierarchicalPathAttribute>(path_);
41
+ }
42
+
43
+ int Cmp(const AttributeInterface* other) const override {
44
+ const std::vector<std::string>& other_path =
45
+ static_cast<const HierarchicalPathAttribute*>(other)->path_;
46
+ for (size_t i = 0; i < path_.size(); ++i) {
47
+ if (other_path.size() == i) return 1;
48
+ int r = path_[i].compare(other_path[i]);
49
+ if (r != 0) return r;
50
+ }
51
+ if (other_path.size() > path_.size()) return -1;
52
+ return 0;
53
+ }
54
+
55
+ std::string ToString() const override {
56
+ return absl::StrCat("[", absl::StrJoin(path_, ", "), "]");
57
+ }
58
+
59
+ const std::vector<std::string>& path() const { return path_; }
60
+
61
+ private:
62
+ std::vector<std::string> path_;
63
+ };
64
+
65
+ } // namespace
66
+
67
+ std::unique_ptr<ServerAddress::AttributeInterface>
68
+ MakeHierarchicalPathAttribute(std::vector<std::string> path) {
69
+ return absl::make_unique<HierarchicalPathAttribute>(std::move(path));
70
+ }
71
+
72
+ HierarchicalAddressMap MakeHierarchicalAddressMap(
73
+ const ServerAddressList& addresses) {
74
+ HierarchicalAddressMap result;
75
+ for (const ServerAddress& address : addresses) {
76
+ const HierarchicalPathAttribute* path_attribute =
77
+ static_cast<const HierarchicalPathAttribute*>(
78
+ address.GetAttribute(kHierarchicalPathAttributeKey));
79
+ if (path_attribute == nullptr) continue;
80
+ const std::vector<std::string>& path = path_attribute->path();
81
+ auto it = path.begin();
82
+ ServerAddressList& target_list = result[*it];
83
+ std::unique_ptr<HierarchicalPathAttribute> new_attribute;
84
+ ++it;
85
+ if (it != path.end()) {
86
+ std::vector<std::string> remaining_path(it, path.end());
87
+ new_attribute = absl::make_unique<HierarchicalPathAttribute>(
88
+ std::move(remaining_path));
89
+ }
90
+ target_list.emplace_back(address.WithAttribute(
91
+ kHierarchicalPathAttributeKey, std::move(new_attribute)));
92
+ }
93
+ return result;
94
+ }
95
+
96
+ } // namespace grpc_core
@@ -0,0 +1,101 @@
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_LB_POLICY_ADDRESS_FILTERING_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_ADDRESS_FILTERING_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <map>
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ #include "src/core/ext/filters/client_channel/server_address.h"
27
+
28
+ // The resolver returns a flat list of addresses. When a hierarchy of
29
+ // LB policies is in use, each leaf of the hierarchy will need a
30
+ // different subset of those addresses. This library provides a
31
+ // mechanism for determining which address is passed to which leaf
32
+ // policy.
33
+ //
34
+ // Each address will have an associated path that indicates which child
35
+ // it should be sent to at each level of the hierarchy to wind up at the
36
+ // right leaf policy. Each LB policy will look at the first element of
37
+ // the path of each address to determine which child to send the address
38
+ // to. It will then remove that first element when passing the address
39
+ // down to its child.
40
+ //
41
+ // For example, consider the following LB policy hierarchy:
42
+ //
43
+ // - priority
44
+ // - child0 (weighted_target)
45
+ // - localityA (round_robin)
46
+ // - localityB (round_robin)
47
+ // - child1 (weighted_target)
48
+ // - localityC (round_robin)
49
+ // - localityD (round_robin)
50
+ //
51
+ // Now consider the following addresses:
52
+ // - 10.0.0.1:80 path=["child0", "localityA"]
53
+ // - 10.0.0.2:80 path=["child0", "localityB"]
54
+ // - 10.0.0.3:80 path=["child1", "localityC"]
55
+ // - 10.0.0.4:80 path=["child1", "localityD"]
56
+ //
57
+ // The priority policy will split this up into two lists, one for each
58
+ // of its children:
59
+ // - child0:
60
+ // - 10.0.0.1:80 path=["localityA"]
61
+ // - 10.0.0.2:80 path=["localityB"]
62
+ // - child1:
63
+ // - 10.0.0.3:80 path=["localityC"]
64
+ // - 10.0.0.4:80 path=["localityD"]
65
+ //
66
+ // The weighted_target policy for child0 will split its list up into two
67
+ // lists, one for each of its children:
68
+ // - localityA:
69
+ // - 10.0.0.1:80 path=[]
70
+ // - localityB:
71
+ // - 10.0.0.2:80 path=[]
72
+ //
73
+ // Similarly, the weighted_target policy for child1 will split its list
74
+ // up into two lists, one for each of its children:
75
+ // - localityC:
76
+ // - 10.0.0.3:80 path=[]
77
+ // - localityD:
78
+ // - 10.0.0.4:80 path=[]
79
+
80
+ namespace grpc_core {
81
+
82
+ // The attribute key to be used for hierarchical paths in ServerAddress.
83
+ extern const char* kHierarchicalPathAttributeKey;
84
+
85
+ // Constructs an address attribute containing the hierarchical path
86
+ // to be associated with the address.
87
+ std::unique_ptr<ServerAddress::AttributeInterface>
88
+ MakeHierarchicalPathAttribute(std::vector<std::string> path);
89
+
90
+ // A map from the next path element to the addresses that fall under
91
+ // that path element.
92
+ using HierarchicalAddressMap = std::map<std::string, ServerAddressList>;
93
+
94
+ // Splits up the addresses into a separate list for each child.
95
+ HierarchicalAddressMap MakeHierarchicalAddressMap(
96
+ const ServerAddressList& addresses);
97
+
98
+ } // namespace grpc_core
99
+
100
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_ADDRESS_FILTERING_H \
101
+ */
@@ -36,28 +36,31 @@ class ChildPolicyHandler::Helper
36
36
  explicit Helper(RefCountedPtr<ChildPolicyHandler> parent)
37
37
  : parent_(std::move(parent)) {}
38
38
 
39
- ~Helper() { parent_.reset(DEBUG_LOCATION, "Helper"); }
39
+ ~Helper() override { parent_.reset(DEBUG_LOCATION, "Helper"); }
40
40
 
41
41
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
42
- const grpc_channel_args& args) override {
42
+ ServerAddress address, const grpc_channel_args& args) override {
43
43
  if (parent_->shutting_down_) return nullptr;
44
44
  if (!CalledByCurrentChild() && !CalledByPendingChild()) return nullptr;
45
- return parent_->channel_control_helper()->CreateSubchannel(args);
45
+ return parent_->channel_control_helper()->CreateSubchannel(
46
+ std::move(address), args);
46
47
  }
47
48
 
48
- void UpdateState(grpc_connectivity_state state,
49
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
49
50
  std::unique_ptr<SubchannelPicker> picker) override {
50
51
  if (parent_->shutting_down_) return;
51
52
  // If this request is from the pending child policy, ignore it until
52
- // it reports READY, at which point we swap it into place.
53
+ // it reports something other than CONNECTING, at which point we swap it
54
+ // into place.
53
55
  if (CalledByPendingChild()) {
54
56
  if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
55
57
  gpr_log(GPR_INFO,
56
58
  "[child_policy_handler %p] helper %p: pending child policy %p "
57
- "reports state=%s",
58
- parent_.get(), this, child_, ConnectivityStateName(state));
59
+ "reports state=%s (%s)",
60
+ parent_.get(), this, child_, ConnectivityStateName(state),
61
+ status.ToString().c_str());
59
62
  }
60
- if (state != GRPC_CHANNEL_READY) return;
63
+ if (state == GRPC_CHANNEL_CONNECTING) return;
61
64
  grpc_pollset_set_del_pollset_set(
62
65
  parent_->child_policy_->interested_parties(),
63
66
  parent_->interested_parties());
@@ -66,7 +69,8 @@ class ChildPolicyHandler::Helper
66
69
  // This request is from an outdated child, so ignore it.
67
70
  return;
68
71
  }
69
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
72
+ parent_->channel_control_helper()->UpdateState(state, status,
73
+ std::move(picker));
70
74
  }
71
75
 
72
76
  void RequestReresolution() override {
@@ -86,7 +90,8 @@ class ChildPolicyHandler::Helper
86
90
  parent_->channel_control_helper()->RequestReresolution();
87
91
  }
88
92
 
89
- void AddTraceEvent(TraceSeverity severity, StringView message) override {
93
+ void AddTraceEvent(TraceSeverity severity,
94
+ absl::string_view message) override {
90
95
  if (parent_->shutting_down_) return;
91
96
  if (!CalledByPendingChild() && !CalledByCurrentChild()) return;
92
97
  parent_->channel_control_helper()->AddTraceEvent(severity, message);
@@ -201,6 +206,10 @@ void ChildPolicyHandler::UpdateLocked(UpdateArgs args) {
201
206
  // Cases 1, 2b, and 3b: create a new child policy.
202
207
  // If child_policy_ is null, we set it (case 1), else we set
203
208
  // pending_child_policy_ (cases 2b and 3b).
209
+ // TODO(roth): In cases 2b and 3b, we should start a timer here, so
210
+ // that there's an upper bound on the amount of time it takes us to
211
+ // switch to the new policy, even if the new policy stays in
212
+ // CONNECTING for a very long period of time.
204
213
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
205
214
  gpr_log(GPR_INFO,
206
215
  "[child_policy_handler %p] creating new %schild policy %s", this,
@@ -251,7 +260,7 @@ OrphanablePtr<LoadBalancingPolicy> ChildPolicyHandler::CreateChildPolicy(
251
260
  const char* child_policy_name, const grpc_channel_args& args) {
252
261
  Helper* helper = new Helper(Ref(DEBUG_LOCATION, "Helper"));
253
262
  LoadBalancingPolicy::Args lb_policy_args;
254
- lb_policy_args.combiner = combiner();
263
+ lb_policy_args.work_serializer = work_serializer();
255
264
  lb_policy_args.channel_control_helper =
256
265
  std::unique_ptr<ChannelControlHelper>(helper);
257
266
  lb_policy_args.args = &args;
@@ -36,7 +36,7 @@ class ChildPolicyHandler : public LoadBalancingPolicy {
36
36
  ChildPolicyHandler(Args args, TraceFlag* tracer)
37
37
  : LoadBalancingPolicy(std::move(args)), tracer_(tracer) {}
38
38
 
39
- virtual const char* name() const override { return "child_policy_handler"; }
39
+ const char* name() const override { return "child_policy_handler"; }
40
40
 
41
41
  void UpdateLocked(UpdateArgs args) override;
42
42
  void ExitIdleLocked() override;
@@ -64,6 +64,14 @@
64
64
  #include <limits.h>
65
65
  #include <string.h>
66
66
 
67
+ #include "absl/container/inlined_vector.h"
68
+ #include "absl/strings/str_cat.h"
69
+ #include "absl/strings/str_format.h"
70
+ #include "absl/strings/str_join.h"
71
+ #include "absl/strings/strip.h"
72
+
73
+ #include "upb/upb.hpp"
74
+
67
75
  #include <grpc/byte_buffer_reader.h>
68
76
  #include <grpc/grpc.h>
69
77
  #include <grpc/support/alloc.h>
@@ -74,12 +82,12 @@
74
82
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
75
83
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
76
84
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
85
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
77
86
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
78
87
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
79
88
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
80
89
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
81
90
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
82
- #include "src/core/ext/filters/client_channel/parse_address.h"
83
91
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
84
92
  #include "src/core/ext/filters/client_channel/server_address.h"
85
93
  #include "src/core/lib/backoff/backoff.h"
@@ -90,11 +98,10 @@
90
98
  #include "src/core/lib/gprpp/memory.h"
91
99
  #include "src/core/lib/gprpp/orphanable.h"
92
100
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
93
- #include "src/core/lib/iomgr/combiner.h"
101
+ #include "src/core/lib/iomgr/parse_address.h"
94
102
  #include "src/core/lib/iomgr/sockaddr.h"
95
103
  #include "src/core/lib/iomgr/sockaddr_utils.h"
96
104
  #include "src/core/lib/iomgr/timer.h"
97
- #include "src/core/lib/slice/slice_hash_table.h"
98
105
  #include "src/core/lib/slice/slice_internal.h"
99
106
  #include "src/core/lib/slice/slice_string_helpers.h"
100
107
  #include "src/core/lib/surface/call.h"
@@ -118,22 +125,29 @@ TraceFlag grpc_lb_glb_trace(false, "glb");
118
125
  const char kGrpcLbClientStatsMetadataKey[] = "grpclb_client_stats";
119
126
  const char kGrpcLbLbTokenMetadataKey[] = "lb-token";
120
127
 
128
+ const char kGrpcLbAddressAttributeKey[] = "grpclb";
129
+
121
130
  namespace {
122
131
 
123
132
  constexpr char kGrpclb[] = "grpclb";
124
133
 
125
134
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
126
135
  public:
127
- explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
128
- : child_policy_(std::move(child_policy)) {}
136
+ GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
137
+ std::string service_name)
138
+ : child_policy_(std::move(child_policy)),
139
+ service_name_(std::move(service_name)) {}
129
140
  const char* name() const override { return kGrpclb; }
130
141
 
131
142
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
132
143
  return child_policy_;
133
144
  }
134
145
 
146
+ const std::string& service_name() const { return service_name_; }
147
+
135
148
  private:
136
149
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
150
+ std::string service_name_;
137
151
  };
138
152
 
139
153
  class GrpcLb : public LoadBalancingPolicy {
@@ -151,7 +165,7 @@ class GrpcLb : public LoadBalancingPolicy {
151
165
  public:
152
166
  explicit BalancerCallState(
153
167
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy);
154
- ~BalancerCallState();
168
+ ~BalancerCallState() override;
155
169
 
156
170
  // It's the caller's responsibility to ensure that Orphan() is called from
157
171
  // inside the combiner.
@@ -178,11 +192,11 @@ class GrpcLb : public LoadBalancingPolicy {
178
192
  static void OnBalancerMessageReceived(void* arg, grpc_error* error);
179
193
  static void OnBalancerStatusReceived(void* arg, grpc_error* error);
180
194
 
181
- static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
182
- static void ClientLoadReportDoneLocked(void* arg, grpc_error* error);
183
- static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
184
- static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
185
- static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
195
+ void MaybeSendClientLoadReportLocked(grpc_error* error);
196
+ void ClientLoadReportDoneLocked(grpc_error* error);
197
+ void OnInitialRequestSentLocked();
198
+ void OnBalancerMessageReceivedLocked();
199
+ void OnBalancerStatusReceivedLocked(grpc_error* error);
186
200
 
187
201
  // The owning LB policy.
188
202
  RefCountedPtr<LoadBalancingPolicy> grpclb_policy_;
@@ -222,6 +236,59 @@ class GrpcLb : public LoadBalancingPolicy {
222
236
  grpc_closure client_load_report_closure_;
223
237
  };
224
238
 
239
+ class SubchannelWrapper : public DelegatingSubchannel {
240
+ public:
241
+ SubchannelWrapper(RefCountedPtr<SubchannelInterface> subchannel,
242
+ std::string lb_token,
243
+ RefCountedPtr<GrpcLbClientStats> client_stats)
244
+ : DelegatingSubchannel(std::move(subchannel)),
245
+ lb_token_(std::move(lb_token)),
246
+ client_stats_(std::move(client_stats)) {}
247
+
248
+ const std::string& lb_token() const { return lb_token_; }
249
+ GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
250
+
251
+ private:
252
+ std::string lb_token_;
253
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
254
+ };
255
+
256
+ class TokenAndClientStatsAttribute
257
+ : public ServerAddress::AttributeInterface {
258
+ public:
259
+ TokenAndClientStatsAttribute(std::string lb_token,
260
+ RefCountedPtr<GrpcLbClientStats> client_stats)
261
+ : lb_token_(std::move(lb_token)),
262
+ client_stats_(std::move(client_stats)) {}
263
+
264
+ std::unique_ptr<AttributeInterface> Copy() const override {
265
+ return absl::make_unique<TokenAndClientStatsAttribute>(lb_token_,
266
+ client_stats_);
267
+ }
268
+
269
+ int Cmp(const AttributeInterface* other_base) const override {
270
+ const TokenAndClientStatsAttribute* other =
271
+ static_cast<const TokenAndClientStatsAttribute*>(other_base);
272
+ int r = lb_token_.compare(other->lb_token_);
273
+ if (r != 0) return r;
274
+ return GPR_ICMP(client_stats_.get(), other->client_stats_.get());
275
+ }
276
+
277
+ std::string ToString() const override {
278
+ return absl::StrFormat("lb_token=\"%s\" client_stats=%p", lb_token_,
279
+ client_stats_.get());
280
+ }
281
+
282
+ const std::string& lb_token() const { return lb_token_; }
283
+ RefCountedPtr<GrpcLbClientStats> client_stats() const {
284
+ return client_stats_;
285
+ }
286
+
287
+ private:
288
+ std::string lb_token_;
289
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
290
+ };
291
+
225
292
  class Serverlist : public RefCounted<Serverlist> {
226
293
  public:
227
294
  // Takes ownership of serverlist.
@@ -233,7 +300,7 @@ class GrpcLb : public LoadBalancingPolicy {
233
300
  const std::vector<GrpcLbServer>& serverlist() const { return serverlist_; }
234
301
 
235
302
  // Returns a text representation suitable for logging.
236
- grpc_core::UniquePtr<char> AsText() const;
303
+ std::string AsText() const;
237
304
 
238
305
  // Extracts all non-drop entries into a ServerAddressList.
239
306
  ServerAddressList GetServerAddressList(
@@ -247,37 +314,32 @@ class GrpcLb : public LoadBalancingPolicy {
247
314
  // should not be dropped.
248
315
  //
249
316
  // Note: This is called from the picker, so it will be invoked in
250
- // the channel's data plane combiner, NOT the control plane
251
- // combiner. It should not be accessed by any other part of the LB
317
+ // the channel's data plane mutex, NOT the control plane
318
+ // work_serializer. It should not be accessed by any other part of the LB
252
319
  // policy.
253
320
  const char* ShouldDrop();
254
321
 
255
322
  private:
256
323
  std::vector<GrpcLbServer> serverlist_;
257
324
 
258
- // Guarded by the channel's data plane combiner, NOT the control
259
- // plane combiner. It should not be accessed by anything but the
325
+ // Guarded by the channel's data plane mutex, NOT the control
326
+ // plane work_serializer. It should not be accessed by anything but the
260
327
  // picker via the ShouldDrop() method.
261
328
  size_t drop_index_ = 0;
262
329
  };
263
330
 
264
331
  class Picker : public SubchannelPicker {
265
332
  public:
266
- Picker(GrpcLb* parent, RefCountedPtr<Serverlist> serverlist,
333
+ Picker(RefCountedPtr<Serverlist> serverlist,
267
334
  std::unique_ptr<SubchannelPicker> child_picker,
268
335
  RefCountedPtr<GrpcLbClientStats> client_stats)
269
- : parent_(parent),
270
- serverlist_(std::move(serverlist)),
336
+ : serverlist_(std::move(serverlist)),
271
337
  child_picker_(std::move(child_picker)),
272
338
  client_stats_(std::move(client_stats)) {}
273
339
 
274
340
  PickResult Pick(PickArgs args) override;
275
341
 
276
342
  private:
277
- // Storing the address for logging, but not holding a ref.
278
- // DO NOT DEFERENCE!
279
- GrpcLb* parent_;
280
-
281
343
  // Serverlist to be used for determining drops.
282
344
  RefCountedPtr<Serverlist> serverlist_;
283
345
 
@@ -291,39 +353,71 @@ class GrpcLb : public LoadBalancingPolicy {
291
353
  : parent_(std::move(parent)) {}
292
354
 
293
355
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
294
- const grpc_channel_args& args) override;
295
- void UpdateState(grpc_connectivity_state state,
356
+ ServerAddress address, const grpc_channel_args& args) override;
357
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
296
358
  std::unique_ptr<SubchannelPicker> picker) override;
297
359
  void RequestReresolution() override;
298
- void AddTraceEvent(TraceSeverity severity, StringView message) override;
360
+ void AddTraceEvent(TraceSeverity severity,
361
+ absl::string_view message) override;
299
362
 
300
363
  private:
301
364
  RefCountedPtr<GrpcLb> parent_;
302
365
  };
303
366
 
304
- ~GrpcLb();
367
+ class StateWatcher : public AsyncConnectivityStateWatcherInterface {
368
+ public:
369
+ explicit StateWatcher(RefCountedPtr<GrpcLb> parent)
370
+ : AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
371
+ parent_(std::move(parent)) {}
372
+
373
+ ~StateWatcher() override { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
374
+
375
+ private:
376
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
377
+ const absl::Status& status) override {
378
+ if (parent_->fallback_at_startup_checks_pending_ &&
379
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
380
+ // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
381
+ // fallback mode immediately.
382
+ gpr_log(GPR_INFO,
383
+ "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
384
+ "entering fallback mode",
385
+ parent_.get(), status.ToString().c_str());
386
+ parent_->fallback_at_startup_checks_pending_ = false;
387
+ grpc_timer_cancel(&parent_->lb_fallback_timer_);
388
+ parent_->fallback_mode_ = true;
389
+ parent_->CreateOrUpdateChildPolicyLocked();
390
+ // Cancel the watch, since we don't care about the channel state once we
391
+ // go into fallback mode.
392
+ parent_->CancelBalancerChannelConnectivityWatchLocked();
393
+ }
394
+ }
395
+
396
+ RefCountedPtr<GrpcLb> parent_;
397
+ };
398
+
399
+ ~GrpcLb() override;
305
400
 
306
401
  void ShutdownLocked() override;
307
402
 
308
403
  // Helper functions used in UpdateLocked().
309
404
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
310
405
  const grpc_channel_args& args);
311
- static void OnBalancerChannelConnectivityChanged(void* arg,
312
- grpc_error* error);
313
- static void OnBalancerChannelConnectivityChangedLocked(void* arg,
314
- grpc_error* error);
406
+ static ServerAddressList AddNullLbTokenToAddresses(
407
+ const ServerAddressList& addresses);
408
+
315
409
  void CancelBalancerChannelConnectivityWatchLocked();
316
410
 
317
411
  // Methods for dealing with fallback state.
318
412
  void MaybeEnterFallbackModeAfterStartup();
319
413
  static void OnFallbackTimer(void* arg, grpc_error* error);
320
- static void OnFallbackTimerLocked(void* arg, grpc_error* error);
414
+ void OnFallbackTimerLocked(grpc_error* error);
321
415
 
322
416
  // Methods for dealing with the balancer call.
323
417
  void StartBalancerCallLocked();
324
418
  void StartBalancerCallRetryTimerLocked();
325
419
  static void OnBalancerCallRetryTimer(void* arg, grpc_error* error);
326
- static void OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error);
420
+ void OnBalancerCallRetryTimerLocked(grpc_error* error);
327
421
 
328
422
  // Methods for dealing with the child policy.
329
423
  grpc_channel_args* CreateChildPolicyArgsLocked(
@@ -333,7 +427,9 @@ class GrpcLb : public LoadBalancingPolicy {
333
427
  void CreateOrUpdateChildPolicyLocked();
334
428
 
335
429
  // Who the client is trying to communicate with.
336
- const char* server_name_ = nullptr;
430
+ std::string server_name_;
431
+ // Configurations for the policy.
432
+ RefCountedPtr<GrpcLbConfig> config_;
337
433
 
338
434
  // Current channel args from the resolver.
339
435
  grpc_channel_args* args_ = nullptr;
@@ -343,8 +439,11 @@ class GrpcLb : public LoadBalancingPolicy {
343
439
 
344
440
  // The channel for communicating with the LB server.
345
441
  grpc_channel* lb_channel_ = nullptr;
442
+ StateWatcher* watcher_ = nullptr;
346
443
  // Response generator to inject address updates into lb_channel_.
347
444
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
445
+ // Parent channelz node.
446
+ RefCountedPtr<channelz::ChannelNode> parent_channelz_node_;
348
447
 
349
448
  // The data associated with the current LB call. It holds a ref to this LB
350
449
  // policy. It's initialized every time we query for backends. It's reset to
@@ -375,13 +474,9 @@ class GrpcLb : public LoadBalancingPolicy {
375
474
  bool fallback_at_startup_checks_pending_ = false;
376
475
  grpc_timer lb_fallback_timer_;
377
476
  grpc_closure lb_on_fallback_;
378
- grpc_connectivity_state lb_channel_connectivity_ = GRPC_CHANNEL_IDLE;
379
- grpc_closure lb_channel_on_connectivity_changed_;
380
477
 
381
478
  // The child policy to use for the backends.
382
479
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
383
- // The child policy config.
384
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
385
480
  // Child policy in state READY.
386
481
  bool child_policy_ready_ = false;
387
482
  };
@@ -397,7 +492,7 @@ bool GrpcLb::Serverlist::operator==(const Serverlist& other) const {
397
492
  void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
398
493
  memset(addr, 0, sizeof(*addr));
399
494
  if (server.drop) return;
400
- const uint16_t netorder_port = grpc_htons((uint16_t)server.port);
495
+ const uint16_t netorder_port = grpc_htons(static_cast<uint16_t>(server.port));
401
496
  /* the addresses are given in binary format (a in(6)_addr struct) in
402
497
  * server->ip_address.bytes. */
403
498
  if (server.ip_size == 4) {
@@ -408,91 +503,49 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
408
503
  addr4->sin_port = netorder_port;
409
504
  } else if (server.ip_size == 16) {
410
505
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
411
- grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
506
+ grpc_sockaddr_in6* addr6 =
507
+ reinterpret_cast<grpc_sockaddr_in6*>(&addr->addr);
412
508
  addr6->sin6_family = GRPC_AF_INET6;
413
509
  memcpy(&addr6->sin6_addr, server.ip_addr, server.ip_size);
414
510
  addr6->sin6_port = netorder_port;
415
511
  }
416
512
  }
417
513
 
418
- grpc_core::UniquePtr<char> GrpcLb::Serverlist::AsText() const {
419
- gpr_strvec entries;
420
- gpr_strvec_init(&entries);
514
+ std::string GrpcLb::Serverlist::AsText() const {
515
+ std::vector<std::string> entries;
421
516
  for (size_t i = 0; i < serverlist_.size(); ++i) {
422
517
  const GrpcLbServer& server = serverlist_[i];
423
- char* ipport;
518
+ std::string ipport;
424
519
  if (server.drop) {
425
- ipport = gpr_strdup("(drop)");
520
+ ipport = "(drop)";
426
521
  } else {
427
522
  grpc_resolved_address addr;
428
523
  ParseServer(server, &addr);
429
- grpc_sockaddr_to_string(&ipport, &addr, false);
524
+ ipport = grpc_sockaddr_to_string(&addr, false);
430
525
  }
431
- char* entry;
432
- gpr_asprintf(&entry, " %" PRIuPTR ": %s token=%s\n", i, ipport,
433
- server.load_balance_token);
434
- gpr_free(ipport);
435
- gpr_strvec_add(&entries, entry);
526
+ entries.push_back(absl::StrFormat(" %" PRIuPTR ": %s token=%s\n", i,
527
+ ipport, server.load_balance_token));
436
528
  }
437
- grpc_core::UniquePtr<char> result(gpr_strvec_flatten(&entries, nullptr));
438
- gpr_strvec_destroy(&entries);
439
- return result;
440
- }
441
-
442
- // vtables for channel args for LB token and client stats.
443
- void* lb_token_copy(void* token) {
444
- return gpr_strdup(static_cast<char*>(token));
445
- }
446
- void lb_token_destroy(void* token) { gpr_free(token); }
447
- void* client_stats_copy(void* p) {
448
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
449
- client_stats->Ref().release();
450
- return p;
529
+ return absl::StrJoin(entries, "");
451
530
  }
452
- void client_stats_destroy(void* p) {
453
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
454
- client_stats->Unref();
455
- }
456
- int equal_cmp(void* /*p1*/, void* /*p2*/) {
457
- // Always indicate a match, since we don't want this channel arg to
458
- // affect the subchannel's key in the index.
459
- // TODO(roth): Is this right? This does prevent us from needlessly
460
- // recreating the subchannel whenever the LB token or client stats
461
- // changes (i.e., when the balancer call is terminated and reestablished).
462
- // However, it means that we don't actually recreate the subchannel,
463
- // which means that we won't ever switch over to using the new LB
464
- // token or client stats. A better approach might be to find somewhere
465
- // other than the subchannel args to store the LB token and client
466
- // stats. They could be stored in a map and then looked up for each
467
- // call. Or we could do something more complicated whereby
468
- // we create our own subchannel wrapper to store them, although that would
469
- // involve a lot of refcounting overhead.
470
- // Given that we're trying to move from grpclb to xds at this point,
471
- // and that no one has actually reported any problems with this, we
472
- // probably won't bother fixing this at this point.
473
- return 0;
474
- }
475
- const grpc_arg_pointer_vtable lb_token_arg_vtable = {
476
- lb_token_copy, lb_token_destroy, equal_cmp};
477
- const grpc_arg_pointer_vtable client_stats_arg_vtable = {
478
- client_stats_copy, client_stats_destroy, equal_cmp};
479
531
 
480
532
  bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
481
533
  if (server.drop) return false;
482
534
  if (GPR_UNLIKELY(server.port >> 16 != 0)) {
483
535
  if (log) {
484
536
  gpr_log(GPR_ERROR,
485
- "Invalid port '%d' at index %lu of serverlist. Ignoring.",
486
- server.port, (unsigned long)idx);
537
+ "Invalid port '%d' at index %" PRIuPTR
538
+ " of serverlist. Ignoring.",
539
+ server.port, idx);
487
540
  }
488
541
  return false;
489
542
  }
490
543
  if (GPR_UNLIKELY(server.ip_size != 4 && server.ip_size != 16)) {
491
544
  if (log) {
492
545
  gpr_log(GPR_ERROR,
493
- "Expected IP to be 4 or 16 bytes, got %d at index %lu of "
494
- "serverlist. Ignoring",
495
- server.ip_size, (unsigned long)idx);
546
+ "Expected IP to be 4 or 16 bytes, got %d at index %" PRIuPTR
547
+ " of serverlist. Ignoring",
548
+ server.ip_size, idx);
496
549
  }
497
550
  return false;
498
551
  }
@@ -502,6 +555,8 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
502
555
  // Returns addresses extracted from the serverlist.
503
556
  ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
504
557
  GrpcLbClientStats* client_stats) const {
558
+ RefCountedPtr<GrpcLbClientStats> stats;
559
+ if (client_stats != nullptr) stats = client_stats->Ref();
505
560
  ServerAddressList addresses;
506
561
  for (size_t i = 0; i < serverlist_.size(); ++i) {
507
562
  const GrpcLbServer& server = serverlist_[i];
@@ -510,36 +565,23 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
510
565
  grpc_resolved_address addr;
511
566
  ParseServer(server, &addr);
512
567
  // LB token processing.
513
- char lb_token[GPR_ARRAY_SIZE(server.load_balance_token) + 1];
514
- if (server.load_balance_token[0] != 0) {
515
- const size_t lb_token_max_length =
516
- GPR_ARRAY_SIZE(server.load_balance_token);
517
- const size_t lb_token_length =
518
- strnlen(server.load_balance_token, lb_token_max_length);
519
- memcpy(lb_token, server.load_balance_token, lb_token_length);
520
- lb_token[lb_token_length] = '\0';
521
- } else {
522
- char* uri = grpc_sockaddr_to_uri(&addr);
568
+ const size_t lb_token_length = strnlen(
569
+ server.load_balance_token, GPR_ARRAY_SIZE(server.load_balance_token));
570
+ std::string lb_token(server.load_balance_token, lb_token_length);
571
+ if (lb_token.empty()) {
523
572
  gpr_log(GPR_INFO,
524
573
  "Missing LB token for backend address '%s'. The empty token will "
525
574
  "be used instead",
526
- uri);
527
- gpr_free(uri);
528
- lb_token[0] = '\0';
575
+ grpc_sockaddr_to_uri(&addr).c_str());
529
576
  }
577
+ // Attach attribute to address containing LB token and stats object.
578
+ std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
579
+ attributes;
580
+ attributes[kGrpcLbAddressAttributeKey] =
581
+ absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
582
+ stats);
530
583
  // Add address.
531
- InlinedVector<grpc_arg, 2> args_to_add;
532
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
533
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
534
- &lb_token_arg_vtable));
535
- if (client_stats != nullptr) {
536
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
537
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS), client_stats,
538
- &client_stats_arg_vtable));
539
- }
540
- grpc_channel_args* args = grpc_channel_args_copy_and_add(
541
- nullptr, args_to_add.data(), args_to_add.size());
542
- addresses.emplace_back(addr, args);
584
+ addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
543
585
  }
544
586
  return addresses;
545
587
  }
@@ -566,7 +608,8 @@ const char* GrpcLb::Serverlist::ShouldDrop() {
566
608
  GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
567
609
  PickResult result;
568
610
  // Check if we should drop the call.
569
- const char* drop_token = serverlist_->ShouldDrop();
611
+ const char* drop_token =
612
+ serverlist_ == nullptr ? nullptr : serverlist_->ShouldDrop();
570
613
  if (drop_token != nullptr) {
571
614
  // Update client load reporting stats to indicate the number of
572
615
  // dropped calls. Note that we have to do this here instead of in
@@ -584,35 +627,34 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
584
627
  // If pick succeeded, add LB token to initial metadata.
585
628
  if (result.type == PickResult::PICK_COMPLETE &&
586
629
  result.subchannel != nullptr) {
630
+ const SubchannelWrapper* subchannel_wrapper =
631
+ static_cast<SubchannelWrapper*>(result.subchannel.get());
587
632
  // Encode client stats object into metadata for use by
588
633
  // client_load_reporting filter.
589
- const grpc_arg* arg =
590
- grpc_channel_args_find(result.subchannel->channel_args(),
591
- GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS);
592
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
593
- arg->value.pointer.p != nullptr) {
594
- GrpcLbClientStats* client_stats =
595
- static_cast<GrpcLbClientStats*>(arg->value.pointer.p);
634
+ GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
635
+ if (client_stats != nullptr) {
596
636
  client_stats->Ref().release(); // Ref passed via metadata.
597
637
  // The metadata value is a hack: we pretend the pointer points to
598
638
  // a string and rely on the client_load_reporting filter to know
599
639
  // how to interpret it.
600
640
  args.initial_metadata->Add(
601
641
  kGrpcLbClientStatsMetadataKey,
602
- StringView(reinterpret_cast<const char*>(client_stats), 0));
642
+ absl::string_view(reinterpret_cast<const char*>(client_stats), 0));
603
643
  // Update calls-started.
604
644
  client_stats->AddCallStarted();
605
645
  }
606
646
  // Encode the LB token in metadata.
607
- arg = grpc_channel_args_find(result.subchannel->channel_args(),
608
- GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN);
609
- if (arg == nullptr) {
610
- gpr_log(GPR_ERROR, "[grpclb %p picker %p] No LB token for subchannel %p",
611
- parent_, this, result.subchannel.get());
612
- abort();
647
+ // Create a new copy on the call arena, since the subchannel list
648
+ // may get refreshed between when we return this pick and when the
649
+ // initial metadata goes out on the wire.
650
+ if (!subchannel_wrapper->lb_token().empty()) {
651
+ char* lb_token = static_cast<char*>(
652
+ args.call_state->Alloc(subchannel_wrapper->lb_token().size() + 1));
653
+ strcpy(lb_token, subchannel_wrapper->lb_token().c_str());
654
+ args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey, lb_token);
613
655
  }
614
- args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey,
615
- static_cast<char*>(arg->value.pointer.p));
656
+ // Unwrap subchannel to pass up to the channel.
657
+ result.subchannel = subchannel_wrapper->wrapped_subchannel();
616
658
  }
617
659
  return result;
618
660
  }
@@ -622,62 +664,64 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
622
664
  //
623
665
 
624
666
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
625
- const grpc_channel_args& args) {
667
+ ServerAddress address, const grpc_channel_args& args) {
626
668
  if (parent_->shutting_down_) return nullptr;
627
- return parent_->channel_control_helper()->CreateSubchannel(args);
669
+ const TokenAndClientStatsAttribute* attribute =
670
+ static_cast<const TokenAndClientStatsAttribute*>(
671
+ address.GetAttribute(kGrpcLbAddressAttributeKey));
672
+ if (attribute == nullptr) {
673
+ gpr_log(GPR_ERROR,
674
+ "[grpclb %p] no TokenAndClientStatsAttribute for address %p",
675
+ parent_.get(), address.ToString().c_str());
676
+ abort();
677
+ }
678
+ std::string lb_token = attribute->lb_token();
679
+ RefCountedPtr<GrpcLbClientStats> client_stats = attribute->client_stats();
680
+ return MakeRefCounted<SubchannelWrapper>(
681
+ parent_->channel_control_helper()->CreateSubchannel(std::move(address),
682
+ args),
683
+ std::move(lb_token), std::move(client_stats));
628
684
  }
629
685
 
630
686
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
687
+ const absl::Status& status,
631
688
  std::unique_ptr<SubchannelPicker> picker) {
632
689
  if (parent_->shutting_down_) return;
633
690
  // Record whether child policy reports READY.
634
691
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
635
692
  // Enter fallback mode if needed.
636
693
  parent_->MaybeEnterFallbackModeAfterStartup();
637
- // There are three cases to consider here:
638
- // 1. We're in fallback mode. In this case, we're always going to use
639
- // the child policy's result, so we pass its picker through as-is.
640
- // 2. The serverlist contains only drop entries. In this case, we
641
- // want to use our own picker so that we can return the drops.
642
- // 3. Not in fallback mode and serverlist is not all drops (i.e., it
643
- // may be empty or contain at least one backend address). There are
644
- // two sub-cases:
645
- // a. The child policy is reporting state READY. In this case, we wrap
646
- // the child's picker in our own, so that we can handle drops and LB
647
- // token metadata for each pick.
648
- // b. The child policy is reporting a state other than READY. In this
649
- // case, we don't want to use our own picker, because we don't want
650
- // to process drops for picks that yield a QUEUE result; this would
651
- // result in dropping too many calls, since we will see the
652
- // queued picks multiple times, and we'd consider each one a
653
- // separate call for the drop calculation.
654
- //
655
- // Cases 1 and 3b: return picker from the child policy as-is.
656
- if (parent_->serverlist_ == nullptr ||
657
- (!parent_->serverlist_->ContainsAllDropEntries() &&
658
- state != GRPC_CHANNEL_READY)) {
659
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
660
- gpr_log(GPR_INFO,
661
- "[grpclb %p helper %p] state=%s passing child picker %p as-is",
662
- parent_.get(), this, ConnectivityStateName(state), picker.get());
663
- }
664
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
665
- return;
666
- }
667
- // Cases 2 and 3a: wrap picker from the child in our own picker.
668
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
669
- gpr_log(GPR_INFO, "[grpclb %p helper %p] state=%s wrapping child picker %p",
670
- parent_.get(), this, ConnectivityStateName(state), picker.get());
694
+ // We pass the serverlist to the picker so that it can handle drops.
695
+ // However, we don't want to handle drops in the case where the child
696
+ // policy is reporting a state other than READY (unless we are
697
+ // dropping *all* calls), because we don't want to process drops for picks
698
+ // that yield a QUEUE result; this would result in dropping too many calls,
699
+ // since we will see the queued picks multiple times, and we'd consider each
700
+ // one a separate call for the drop calculation. So in this case, we pass
701
+ // a null serverlist to the picker, which tells it not to do drops.
702
+ RefCountedPtr<Serverlist> serverlist;
703
+ if (state == GRPC_CHANNEL_READY ||
704
+ (parent_->serverlist_ != nullptr &&
705
+ parent_->serverlist_->ContainsAllDropEntries())) {
706
+ serverlist = parent_->serverlist_;
671
707
  }
672
708
  RefCountedPtr<GrpcLbClientStats> client_stats;
673
709
  if (parent_->lb_calld_ != nullptr &&
674
710
  parent_->lb_calld_->client_stats() != nullptr) {
675
711
  client_stats = parent_->lb_calld_->client_stats()->Ref();
676
712
  }
713
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
714
+ gpr_log(GPR_INFO,
715
+ "[grpclb %p helper %p] state=%s (%s) wrapping child "
716
+ "picker %p (serverlist=%p, client_stats=%p)",
717
+ parent_.get(), this, ConnectivityStateName(state),
718
+ status.ToString().c_str(), picker.get(), serverlist.get(),
719
+ client_stats.get());
720
+ }
677
721
  parent_->channel_control_helper()->UpdateState(
678
- state,
679
- absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
680
- std::move(picker), std::move(client_stats)));
722
+ state, status,
723
+ absl::make_unique<Picker>(std::move(serverlist), std::move(picker),
724
+ std::move(client_stats)));
681
725
  }
682
726
 
683
727
  void GrpcLb::Helper::RequestReresolution() {
@@ -692,7 +736,8 @@ void GrpcLb::Helper::RequestReresolution() {
692
736
  }
693
737
  }
694
738
 
695
- void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
739
+ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
740
+ absl::string_view message) {
696
741
  if (parent_->shutting_down_) return;
697
742
  parent_->channel_control_helper()->AddTraceEvent(severity, message);
698
743
  }
@@ -703,15 +748,25 @@ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
703
748
 
704
749
  GrpcLb::BalancerCallState::BalancerCallState(
705
750
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy)
706
- : InternallyRefCounted<BalancerCallState>(&grpc_lb_glb_trace),
751
+ : InternallyRefCounted<BalancerCallState>(
752
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace) ? "BalancerCallState"
753
+ : nullptr),
707
754
  grpclb_policy_(std::move(parent_grpclb_policy)) {
708
755
  GPR_ASSERT(grpclb_policy_ != nullptr);
709
756
  GPR_ASSERT(!grpclb_policy()->shutting_down_);
710
757
  // Init the LB call. Note that the LB call will progress every time there's
711
758
  // activity in grpclb_policy_->interested_parties(), which is comprised of
712
759
  // the polling entities from client_channel.
713
- GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
714
- GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
760
+ GPR_ASSERT(!grpclb_policy()->server_name_.empty());
761
+ // Closure Initialization
762
+ GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
763
+ grpc_schedule_on_exec_ctx);
764
+ GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
765
+ OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
766
+ GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
767
+ this, grpc_schedule_on_exec_ctx);
768
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
769
+ this, grpc_schedule_on_exec_ctx);
715
770
  const grpc_millis deadline =
716
771
  grpclb_policy()->lb_call_timeout_ms_ == 0
717
772
  ? GRPC_MILLIS_INF_FUTURE
@@ -723,8 +778,11 @@ GrpcLb::BalancerCallState::BalancerCallState(
723
778
  nullptr, deadline, nullptr);
724
779
  // Init the LB call request payload.
725
780
  upb::Arena arena;
726
- grpc_slice request_payload_slice =
727
- GrpcLbRequestCreate(grpclb_policy()->server_name_, arena.ptr());
781
+ grpc_slice request_payload_slice = GrpcLbRequestCreate(
782
+ grpclb_policy()->config_->service_name().empty()
783
+ ? grpclb_policy()->server_name_.c_str()
784
+ : grpclb_policy()->config_->service_name().c_str(),
785
+ arena.ptr());
728
786
  send_message_payload_ =
729
787
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
730
788
  grpc_slice_unref_internal(request_payload_slice);
@@ -749,7 +807,7 @@ void GrpcLb::BalancerCallState::Orphan() {
749
807
  // lb_on_balancer_status_received_ will complete the cancellation and clean
750
808
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
751
809
  // call, then the following cancellation will be a no-op.
752
- grpc_call_cancel(lb_call_, nullptr);
810
+ grpc_call_cancel_internal(lb_call_);
753
811
  if (client_load_report_timer_callback_pending_) {
754
812
  grpc_timer_cancel(&client_load_report_timer_);
755
813
  }
@@ -788,10 +846,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
788
846
  // with the callback.
789
847
  auto self = Ref(DEBUG_LOCATION, "on_initial_request_sent");
790
848
  self.release();
791
- GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
792
- grpc_schedule_on_exec_ctx);
793
- call_error = grpc_call_start_batch_and_execute(
794
- lb_call_, ops, (size_t)(op - ops), &lb_on_initial_request_sent_);
849
+ call_error = grpc_call_start_batch_and_execute(lb_call_, ops,
850
+ static_cast<size_t>(op - ops),
851
+ &lb_on_initial_request_sent_);
795
852
  GPR_ASSERT(GRPC_CALL_OK == call_error);
796
853
  // Op: recv initial metadata.
797
854
  op = ops;
@@ -812,10 +869,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
812
869
  // with the callback.
813
870
  self = Ref(DEBUG_LOCATION, "on_message_received");
814
871
  self.release();
815
- GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
816
- OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
817
872
  call_error = grpc_call_start_batch_and_execute(
818
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_message_received_);
873
+ lb_call_, ops, static_cast<size_t>(op - ops),
874
+ &lb_on_balancer_message_received_);
819
875
  GPR_ASSERT(GRPC_CALL_OK == call_error);
820
876
  // Op: recv server status.
821
877
  op = ops;
@@ -830,10 +886,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
830
886
  // This callback signals the end of the LB call, so it relies on the initial
831
887
  // ref instead of a new ref. When it's invoked, it's the initial ref that is
832
888
  // unreffed.
833
- GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
834
- this, grpc_schedule_on_exec_ctx);
835
889
  call_error = grpc_call_start_batch_and_execute(
836
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_status_received_);
890
+ lb_call_, ops, static_cast<size_t>(op - ops),
891
+ &lb_on_balancer_status_received_);
837
892
  GPR_ASSERT(GRPC_CALL_OK == call_error);
838
893
  }
839
894
 
@@ -850,28 +905,27 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
850
905
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(void* arg,
851
906
  grpc_error* error) {
852
907
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
853
- lb_calld->grpclb_policy()->combiner()->Run(
854
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
855
- MaybeSendClientLoadReportLocked, lb_calld, nullptr),
856
- GRPC_ERROR_REF(error));
908
+ GRPC_ERROR_REF(error); // ref owned by lambda
909
+ lb_calld->grpclb_policy()->work_serializer()->Run(
910
+ [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
911
+ DEBUG_LOCATION);
857
912
  }
858
913
 
859
914
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
860
- void* arg, grpc_error* error) {
861
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
862
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
863
- lb_calld->client_load_report_timer_callback_pending_ = false;
864
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
865
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
915
+ grpc_error* error) {
916
+ client_load_report_timer_callback_pending_ = false;
917
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
918
+ Unref(DEBUG_LOCATION, "client_load_report");
919
+ GRPC_ERROR_UNREF(error);
866
920
  return;
867
921
  }
868
922
  // If we've already sent the initial request, then we can go ahead and send
869
923
  // the load report. Otherwise, we need to wait until the initial request has
870
924
  // been sent to send this (see OnInitialRequestSentLocked()).
871
- if (lb_calld->send_message_payload_ == nullptr) {
872
- lb_calld->SendClientLoadReportLocked();
925
+ if (send_message_payload_ == nullptr) {
926
+ SendClientLoadReportLocked();
873
927
  } else {
874
- lb_calld->client_load_report_is_due_ = true;
928
+ client_load_report_is_due_ = true;
875
929
  }
876
930
  }
877
931
 
@@ -892,7 +946,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
892
946
  if (num_calls_started == 0 && num_calls_finished == 0 &&
893
947
  num_calls_finished_with_client_failed_to_send == 0 &&
894
948
  num_calls_finished_known_received == 0 &&
895
- (drop_token_counts == nullptr || drop_token_counts->size() == 0)) {
949
+ (drop_token_counts == nullptr || drop_token_counts->empty())) {
896
950
  if (last_client_load_report_counters_were_zero_) {
897
951
  ScheduleNextClientLoadReportLocked();
898
952
  return;
@@ -930,140 +984,125 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
930
984
  void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
931
985
  grpc_error* error) {
932
986
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
933
- lb_calld->grpclb_policy()->combiner()->Run(
934
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
935
- ClientLoadReportDoneLocked, lb_calld, nullptr),
936
- GRPC_ERROR_REF(error));
987
+ GRPC_ERROR_REF(error); // ref owned by lambda
988
+ lb_calld->grpclb_policy()->work_serializer()->Run(
989
+ [lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
990
+ DEBUG_LOCATION);
937
991
  }
938
992
 
939
- void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(void* arg,
940
- grpc_error* error) {
941
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
942
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
943
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
944
- lb_calld->send_message_payload_ = nullptr;
945
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
946
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
993
+ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(grpc_error* error) {
994
+ grpc_byte_buffer_destroy(send_message_payload_);
995
+ send_message_payload_ = nullptr;
996
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
997
+ Unref(DEBUG_LOCATION, "client_load_report");
998
+ GRPC_ERROR_UNREF(error);
947
999
  return;
948
1000
  }
949
- lb_calld->ScheduleNextClientLoadReportLocked();
1001
+ ScheduleNextClientLoadReportLocked();
950
1002
  }
951
1003
 
952
1004
  void GrpcLb::BalancerCallState::OnInitialRequestSent(void* arg,
953
- grpc_error* error) {
1005
+ grpc_error* /*error*/) {
954
1006
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
955
- lb_calld->grpclb_policy()->combiner()->Run(
956
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_initial_request_sent_,
957
- OnInitialRequestSentLocked, lb_calld, nullptr),
958
- GRPC_ERROR_REF(error));
1007
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1008
+ [lb_calld]() { lb_calld->OnInitialRequestSentLocked(); }, DEBUG_LOCATION);
959
1009
  }
960
1010
 
961
- void GrpcLb::BalancerCallState::OnInitialRequestSentLocked(
962
- void* arg, grpc_error* /*error*/) {
963
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
964
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
965
- lb_calld->send_message_payload_ = nullptr;
1011
+ void GrpcLb::BalancerCallState::OnInitialRequestSentLocked() {
1012
+ grpc_byte_buffer_destroy(send_message_payload_);
1013
+ send_message_payload_ = nullptr;
966
1014
  // If we attempted to send a client load report before the initial request was
967
1015
  // sent (and this lb_calld is still in use), send the load report now.
968
- if (lb_calld->client_load_report_is_due_ &&
969
- lb_calld == lb_calld->grpclb_policy()->lb_calld_.get()) {
970
- lb_calld->SendClientLoadReportLocked();
971
- lb_calld->client_load_report_is_due_ = false;
1016
+ if (client_load_report_is_due_ && this == grpclb_policy()->lb_calld_.get()) {
1017
+ SendClientLoadReportLocked();
1018
+ client_load_report_is_due_ = false;
972
1019
  }
973
- lb_calld->Unref(DEBUG_LOCATION, "on_initial_request_sent");
1020
+ Unref(DEBUG_LOCATION, "on_initial_request_sent");
974
1021
  }
975
1022
 
976
- void GrpcLb::BalancerCallState::OnBalancerMessageReceived(void* arg,
977
- grpc_error* error) {
1023
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
1024
+ void* arg, grpc_error* /*error*/) {
978
1025
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
979
- lb_calld->grpclb_policy()->combiner()->Run(
980
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
981
- OnBalancerMessageReceivedLocked, lb_calld, nullptr),
982
- GRPC_ERROR_REF(error));
1026
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1027
+ [lb_calld]() { lb_calld->OnBalancerMessageReceivedLocked(); },
1028
+ DEBUG_LOCATION);
983
1029
  }
984
1030
 
985
- void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
986
- void* arg, grpc_error* /*error*/) {
987
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
988
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1031
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
989
1032
  // Null payload means the LB call was cancelled.
990
- if (lb_calld != grpclb_policy->lb_calld_.get() ||
991
- lb_calld->recv_message_payload_ == nullptr) {
992
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received");
1033
+ if (this != grpclb_policy()->lb_calld_.get() ||
1034
+ recv_message_payload_ == nullptr) {
1035
+ Unref(DEBUG_LOCATION, "on_message_received");
993
1036
  return;
994
1037
  }
995
1038
  grpc_byte_buffer_reader bbr;
996
- grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_);
1039
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
997
1040
  grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
998
1041
  grpc_byte_buffer_reader_destroy(&bbr);
999
- grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
1000
- lb_calld->recv_message_payload_ = nullptr;
1042
+ grpc_byte_buffer_destroy(recv_message_payload_);
1043
+ recv_message_payload_ = nullptr;
1001
1044
  GrpcLbResponse response;
1002
1045
  upb::Arena arena;
1003
1046
  if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
1004
- (response.type == response.INITIAL && lb_calld->seen_initial_response_)) {
1047
+ (response.type == response.INITIAL && seen_initial_response_)) {
1005
1048
  char* response_slice_str =
1006
1049
  grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1007
1050
  gpr_log(GPR_ERROR,
1008
1051
  "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1009
1052
  "Ignoring.",
1010
- grpclb_policy, lb_calld, response_slice_str);
1053
+ grpclb_policy(), this, response_slice_str);
1011
1054
  gpr_free(response_slice_str);
1012
1055
  } else {
1013
1056
  switch (response.type) {
1014
1057
  case response.INITIAL: {
1015
1058
  if (response.client_stats_report_interval != 0) {
1016
- lb_calld->client_stats_report_interval_ =
1059
+ client_stats_report_interval_ =
1017
1060
  GPR_MAX(GPR_MS_PER_SEC, response.client_stats_report_interval);
1018
1061
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1019
1062
  gpr_log(GPR_INFO,
1020
1063
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1021
1064
  "message; client load reporting interval = %" PRId64
1022
1065
  " milliseconds",
1023
- grpclb_policy, lb_calld,
1024
- lb_calld->client_stats_report_interval_);
1066
+ grpclb_policy(), this, client_stats_report_interval_);
1025
1067
  }
1026
1068
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1027
1069
  gpr_log(GPR_INFO,
1028
1070
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1029
1071
  "message; client load reporting NOT enabled",
1030
- grpclb_policy, lb_calld);
1072
+ grpclb_policy(), this);
1031
1073
  }
1032
- lb_calld->seen_initial_response_ = true;
1074
+ seen_initial_response_ = true;
1033
1075
  break;
1034
1076
  }
1035
1077
  case response.SERVERLIST: {
1036
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1078
+ GPR_ASSERT(lb_call_ != nullptr);
1037
1079
  auto serverlist_wrapper =
1038
1080
  MakeRefCounted<Serverlist>(std::move(response.serverlist));
1039
1081
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1040
- grpc_core::UniquePtr<char> serverlist_text =
1041
- serverlist_wrapper->AsText();
1042
1082
  gpr_log(GPR_INFO,
1043
1083
  "[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
1044
1084
  " servers received:\n%s",
1045
- grpclb_policy, lb_calld,
1085
+ grpclb_policy(), this,
1046
1086
  serverlist_wrapper->serverlist().size(),
1047
- serverlist_text.get());
1087
+ serverlist_wrapper->AsText().c_str());
1048
1088
  }
1049
- lb_calld->seen_serverlist_ = true;
1089
+ seen_serverlist_ = true;
1050
1090
  // Start sending client load report only after we start using the
1051
1091
  // serverlist returned from the current LB call.
1052
- if (lb_calld->client_stats_report_interval_ > 0 &&
1053
- lb_calld->client_stats_ == nullptr) {
1054
- lb_calld->client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1092
+ if (client_stats_report_interval_ > 0 && client_stats_ == nullptr) {
1093
+ client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1055
1094
  // Ref held by callback.
1056
- lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release();
1057
- lb_calld->ScheduleNextClientLoadReportLocked();
1095
+ Ref(DEBUG_LOCATION, "client_load_report").release();
1096
+ ScheduleNextClientLoadReportLocked();
1058
1097
  }
1059
1098
  // Check if the serverlist differs from the previous one.
1060
- if (grpclb_policy->serverlist_ != nullptr &&
1061
- *grpclb_policy->serverlist_ == *serverlist_wrapper) {
1099
+ if (grpclb_policy()->serverlist_ != nullptr &&
1100
+ *grpclb_policy()->serverlist_ == *serverlist_wrapper) {
1062
1101
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1063
1102
  gpr_log(GPR_INFO,
1064
1103
  "[grpclb %p] lb_calld=%p: Incoming server list identical "
1065
1104
  "to current, ignoring.",
1066
- grpclb_policy, lb_calld);
1105
+ grpclb_policy(), this);
1067
1106
  }
1068
1107
  } else { // New serverlist.
1069
1108
  // Dispose of the fallback.
@@ -1085,167 +1124,145 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
1085
1124
  // the grpclb implementation at this point, since we're deprecating
1086
1125
  // it in favor of the xds policy. We will implement this the
1087
1126
  // right way in the xds policy instead.
1088
- if (grpclb_policy->fallback_mode_) {
1127
+ if (grpclb_policy()->fallback_mode_) {
1089
1128
  gpr_log(GPR_INFO,
1090
1129
  "[grpclb %p] Received response from balancer; exiting "
1091
1130
  "fallback mode",
1092
- grpclb_policy);
1093
- grpclb_policy->fallback_mode_ = false;
1131
+ grpclb_policy());
1132
+ grpclb_policy()->fallback_mode_ = false;
1094
1133
  }
1095
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1096
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1097
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1098
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1134
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1135
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1136
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1137
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1099
1138
  }
1100
1139
  // Update the serverlist in the GrpcLb instance. This serverlist
1101
1140
  // instance will be destroyed either upon the next update or when the
1102
1141
  // GrpcLb instance is destroyed.
1103
- grpclb_policy->serverlist_ = std::move(serverlist_wrapper);
1104
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1142
+ grpclb_policy()->serverlist_ = std::move(serverlist_wrapper);
1143
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1105
1144
  }
1106
1145
  break;
1107
1146
  }
1108
1147
  case response.FALLBACK: {
1109
- if (!grpclb_policy->fallback_mode_) {
1148
+ if (!grpclb_policy()->fallback_mode_) {
1110
1149
  gpr_log(GPR_INFO,
1111
1150
  "[grpclb %p] Entering fallback mode as requested by balancer",
1112
- grpclb_policy);
1113
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1114
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1115
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1116
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1151
+ grpclb_policy());
1152
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1153
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1154
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1155
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1117
1156
  }
1118
- grpclb_policy->fallback_mode_ = true;
1119
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1157
+ grpclb_policy()->fallback_mode_ = true;
1158
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1120
1159
  // Reset serverlist, so that if the balancer exits fallback
1121
1160
  // mode by sending the same serverlist we were previously
1122
1161
  // using, we don't incorrectly ignore it as a duplicate.
1123
- grpclb_policy->serverlist_.reset();
1162
+ grpclb_policy()->serverlist_.reset();
1124
1163
  }
1125
1164
  break;
1126
1165
  }
1127
1166
  }
1128
1167
  }
1129
1168
  grpc_slice_unref_internal(response_slice);
1130
- if (!grpclb_policy->shutting_down_) {
1169
+ if (!grpclb_policy()->shutting_down_) {
1131
1170
  // Keep listening for serverlist updates.
1132
1171
  grpc_op op;
1133
1172
  memset(&op, 0, sizeof(op));
1134
1173
  op.op = GRPC_OP_RECV_MESSAGE;
1135
- op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
1174
+ op.data.recv_message.recv_message = &recv_message_payload_;
1136
1175
  op.flags = 0;
1137
1176
  op.reserved = nullptr;
1138
1177
  // Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
1139
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
1140
- GrpcLb::BalancerCallState::OnBalancerMessageReceived,
1141
- lb_calld, grpc_schedule_on_exec_ctx);
1142
1178
  const grpc_call_error call_error = grpc_call_start_batch_and_execute(
1143
- lb_calld->lb_call_, &op, 1,
1144
- &lb_calld->lb_on_balancer_message_received_);
1179
+ lb_call_, &op, 1, &lb_on_balancer_message_received_);
1145
1180
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1146
1181
  } else {
1147
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1182
+ Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1148
1183
  }
1149
1184
  }
1150
1185
 
1151
1186
  void GrpcLb::BalancerCallState::OnBalancerStatusReceived(void* arg,
1152
1187
  grpc_error* error) {
1153
1188
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1154
- lb_calld->grpclb_policy()->combiner()->Run(
1155
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_status_received_,
1156
- OnBalancerStatusReceivedLocked, lb_calld, nullptr),
1157
- GRPC_ERROR_REF(error));
1189
+ GRPC_ERROR_REF(error); // owned by lambda
1190
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1191
+ [lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
1192
+ DEBUG_LOCATION);
1158
1193
  }
1159
1194
 
1160
1195
  void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1161
- void* arg, grpc_error* error) {
1162
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1163
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1164
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1196
+ grpc_error* error) {
1197
+ GPR_ASSERT(lb_call_ != nullptr);
1165
1198
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1166
- char* status_details =
1167
- grpc_slice_to_c_string(lb_calld->lb_call_status_details_);
1199
+ char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
1168
1200
  gpr_log(GPR_INFO,
1169
1201
  "[grpclb %p] lb_calld=%p: Status from LB server received. "
1170
1202
  "Status = %d, details = '%s', (lb_call: %p), error '%s'",
1171
- grpclb_policy, lb_calld, lb_calld->lb_call_status_, status_details,
1172
- lb_calld->lb_call_, grpc_error_string(error));
1203
+ grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
1204
+ grpc_error_string(error));
1173
1205
  gpr_free(status_details);
1174
1206
  }
1207
+ GRPC_ERROR_UNREF(error);
1175
1208
  // If this lb_calld is still in use, this call ended because of a failure so
1176
1209
  // we want to retry connecting. Otherwise, we have deliberately ended this
1177
1210
  // call and no further action is required.
1178
- if (lb_calld == grpclb_policy->lb_calld_.get()) {
1211
+ if (this == grpclb_policy()->lb_calld_.get()) {
1179
1212
  // If the fallback-at-startup checks are pending, go into fallback mode
1180
1213
  // immediately. This short-circuits the timeout for the fallback-at-startup
1181
1214
  // case.
1182
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1183
- GPR_ASSERT(!lb_calld->seen_serverlist_);
1215
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1216
+ GPR_ASSERT(!seen_serverlist_);
1184
1217
  gpr_log(GPR_INFO,
1185
1218
  "[grpclb %p] Balancer call finished without receiving "
1186
1219
  "serverlist; entering fallback mode",
1187
- grpclb_policy);
1188
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1189
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1190
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1191
- grpclb_policy->fallback_mode_ = true;
1192
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1220
+ grpclb_policy());
1221
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1222
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1223
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1224
+ grpclb_policy()->fallback_mode_ = true;
1225
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1193
1226
  } else {
1194
1227
  // This handles the fallback-after-startup case.
1195
- grpclb_policy->MaybeEnterFallbackModeAfterStartup();
1228
+ grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
1196
1229
  }
1197
- grpclb_policy->lb_calld_.reset();
1198
- GPR_ASSERT(!grpclb_policy->shutting_down_);
1199
- grpclb_policy->channel_control_helper()->RequestReresolution();
1200
- if (lb_calld->seen_initial_response_) {
1230
+ grpclb_policy()->lb_calld_.reset();
1231
+ GPR_ASSERT(!grpclb_policy()->shutting_down_);
1232
+ grpclb_policy()->channel_control_helper()->RequestReresolution();
1233
+ if (seen_initial_response_) {
1201
1234
  // If we lose connection to the LB server, reset the backoff and restart
1202
1235
  // the LB call immediately.
1203
- grpclb_policy->lb_call_backoff_.Reset();
1204
- grpclb_policy->StartBalancerCallLocked();
1236
+ grpclb_policy()->lb_call_backoff_.Reset();
1237
+ grpclb_policy()->StartBalancerCallLocked();
1205
1238
  } else {
1206
1239
  // If this LB call fails establishing any connection to the LB server,
1207
1240
  // retry later.
1208
- grpclb_policy->StartBalancerCallRetryTimerLocked();
1241
+ grpclb_policy()->StartBalancerCallRetryTimerLocked();
1209
1242
  }
1210
1243
  }
1211
- lb_calld->Unref(DEBUG_LOCATION, "lb_call_ended");
1244
+ Unref(DEBUG_LOCATION, "lb_call_ended");
1212
1245
  }
1213
1246
 
1214
1247
  //
1215
1248
  // helper code for creating balancer channel
1216
1249
  //
1217
1250
 
1218
- ServerAddressList ExtractBalancerAddresses(const ServerAddressList& addresses) {
1219
- ServerAddressList balancer_addresses;
1220
- for (size_t i = 0; i < addresses.size(); ++i) {
1221
- if (addresses[i].IsBalancer()) {
1222
- // Strip out the is_balancer channel arg, since we don't want to
1223
- // recursively use the grpclb policy in the channel used to talk to
1224
- // the balancers. Note that we do NOT strip out the balancer_name
1225
- // channel arg, since we need that to set the authority correctly
1226
- // to talk to the balancers.
1227
- static const char* args_to_remove[] = {
1228
- GRPC_ARG_ADDRESS_IS_BALANCER,
1229
- };
1230
- balancer_addresses.emplace_back(
1231
- addresses[i].address(),
1232
- grpc_channel_args_copy_and_remove(addresses[i].args(), args_to_remove,
1233
- GPR_ARRAY_SIZE(args_to_remove)));
1234
- }
1235
- }
1236
- return balancer_addresses;
1251
+ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1252
+ const ServerAddressList* addresses =
1253
+ FindGrpclbBalancerAddressesInChannelArgs(args);
1254
+ if (addresses != nullptr) return *addresses;
1255
+ return ServerAddressList();
1237
1256
  }
1238
1257
 
1239
1258
  /* Returns the channel args for the LB channel, used to create a bidirectional
1240
1259
  * stream for the reception of load balancing updates.
1241
1260
  *
1242
1261
  * Inputs:
1243
- * - \a addresses: corresponding to the balancers.
1244
1262
  * - \a response_generator: in order to propagate updates from the resolver
1245
1263
  * above the grpclb policy.
1246
1264
  * - \a args: other args inherited from the grpclb policy. */
1247
1265
  grpc_channel_args* BuildBalancerChannelArgs(
1248
- const ServerAddressList& addresses,
1249
1266
  FakeResolverResponseGenerator* response_generator,
1250
1267
  const grpc_channel_args* args) {
1251
1268
  // Channel args to remove.
@@ -1277,31 +1294,24 @@ grpc_channel_args* BuildBalancerChannelArgs(
1277
1294
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1278
1295
  };
1279
1296
  // Channel args to add.
1280
- InlinedVector<grpc_arg, 3> args_to_add;
1281
- // The fake resolver response generator, which we use to inject
1282
- // address updates into the LB channel.
1283
- args_to_add.emplace_back(
1297
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
1298
+ // The fake resolver response generator, which we use to inject
1299
+ // address updates into the LB channel.
1284
1300
  grpc_core::FakeResolverResponseGenerator::MakeChannelArg(
1285
- response_generator));
1286
- // A channel arg indicating the target is a grpclb load balancer.
1287
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1288
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1));
1289
- // The parent channel's channelz uuid.
1290
- channelz::ChannelNode* channelz_node = nullptr;
1291
- const grpc_arg* arg =
1292
- grpc_channel_args_find(args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1293
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
1294
- arg->value.pointer.p != nullptr) {
1295
- channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
1296
- args_to_add.emplace_back(
1297
- channelz::MakeParentUuidArg(channelz_node->uuid()));
1298
- }
1301
+ response_generator),
1302
+ // A channel arg indicating the target is a grpclb load balancer.
1303
+ grpc_channel_arg_integer_create(
1304
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1305
+ // Tells channelz that this is an internal channel.
1306
+ grpc_channel_arg_integer_create(
1307
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1308
+ };
1299
1309
  // Construct channel args.
1300
1310
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1301
1311
  args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
1302
1312
  args_to_add.size());
1303
1313
  // Make any necessary modifications for security.
1304
- return ModifyGrpclbBalancerChannelArgs(addresses, new_args);
1314
+ return ModifyGrpclbBalancerChannelArgs(new_args);
1305
1315
  }
1306
1316
 
1307
1317
  //
@@ -1319,19 +1329,23 @@ GrpcLb::GrpcLb(Args args)
1319
1329
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1320
1330
  .set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
1321
1331
  1000)) {
1332
+ // Closure Initialization
1333
+ GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1334
+ grpc_schedule_on_exec_ctx);
1335
+ GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1336
+ grpc_schedule_on_exec_ctx);
1322
1337
  // Record server name.
1323
1338
  const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
1324
1339
  const char* server_uri = grpc_channel_arg_get_string(arg);
1325
1340
  GPR_ASSERT(server_uri != nullptr);
1326
- grpc_uri* uri = grpc_uri_parse(server_uri, true);
1327
- GPR_ASSERT(uri->path[0] != '\0');
1328
- server_name_ = gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path);
1341
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1342
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1343
+ server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
1329
1344
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1330
1345
  gpr_log(GPR_INFO,
1331
1346
  "[grpclb %p] Will use '%s' as the server name for LB request.",
1332
- this, server_name_);
1347
+ this, server_name_.c_str());
1333
1348
  }
1334
- grpc_uri_destroy(uri);
1335
1349
  // Record LB call timeout.
1336
1350
  arg = grpc_channel_args_find(args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS);
1337
1351
  lb_call_timeout_ms_ = grpc_channel_arg_get_integer(arg, {0, 0, INT_MAX});
@@ -1341,10 +1355,7 @@ GrpcLb::GrpcLb(Args args)
1341
1355
  arg, {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX});
1342
1356
  }
1343
1357
 
1344
- GrpcLb::~GrpcLb() {
1345
- gpr_free((void*)server_name_);
1346
- grpc_channel_args_destroy(args_);
1347
- }
1358
+ GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
1348
1359
 
1349
1360
  void GrpcLb::ShutdownLocked() {
1350
1361
  shutting_down_ = true;
@@ -1353,6 +1364,7 @@ void GrpcLb::ShutdownLocked() {
1353
1364
  grpc_timer_cancel(&lb_call_retry_timer_);
1354
1365
  }
1355
1366
  if (fallback_at_startup_checks_pending_) {
1367
+ fallback_at_startup_checks_pending_ = false;
1356
1368
  grpc_timer_cancel(&lb_fallback_timer_);
1357
1369
  CancelBalancerChannelConnectivityWatchLocked();
1358
1370
  }
@@ -1366,6 +1378,12 @@ void GrpcLb::ShutdownLocked() {
1366
1378
  // OnBalancerChannelConnectivityChangedLocked(), and we need to be
1367
1379
  // alive when that callback is invoked.
1368
1380
  if (lb_channel_ != nullptr) {
1381
+ if (parent_channelz_node_ != nullptr) {
1382
+ channelz::ChannelNode* child_channelz_node =
1383
+ grpc_channel_get_channelz_node(lb_channel_);
1384
+ GPR_ASSERT(child_channelz_node != nullptr);
1385
+ parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1386
+ }
1369
1387
  grpc_channel_destroy(lb_channel_);
1370
1388
  lb_channel_ = nullptr;
1371
1389
  }
@@ -1386,12 +1404,8 @@ void GrpcLb::ResetBackoffLocked() {
1386
1404
 
1387
1405
  void GrpcLb::UpdateLocked(UpdateArgs args) {
1388
1406
  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
- }
1407
+ config_ = args.config;
1408
+ GPR_ASSERT(config_ != nullptr);
1395
1409
  ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
1396
1410
  // Update the existing child policy.
1397
1411
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
@@ -1402,8 +1416,6 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1402
1416
  // Start timer.
1403
1417
  grpc_millis deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
1404
1418
  Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
1405
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1406
- grpc_schedule_on_exec_ctx);
1407
1419
  grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
1408
1420
  // Start watching the channel's connectivity state. If the channel
1409
1421
  // goes into state TRANSIENT_FAILURE before the timer fires, we go into
@@ -1412,15 +1424,10 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1412
1424
  grpc_channel_get_channel_stack(lb_channel_));
1413
1425
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1414
1426
  // Ref held by callback.
1415
- Ref(DEBUG_LOCATION, "watch_lb_channel_connectivity").release();
1416
- GRPC_CLOSURE_INIT(&lb_channel_on_connectivity_changed_,
1417
- &GrpcLb::OnBalancerChannelConnectivityChanged, this,
1418
- grpc_schedule_on_exec_ctx);
1419
- grpc_client_channel_watch_connectivity_state(
1420
- client_channel_elem,
1421
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1422
- &lb_channel_connectivity_, &lb_channel_on_connectivity_changed_,
1423
- nullptr);
1427
+ watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1428
+ grpc_client_channel_start_connectivity_watch(
1429
+ client_channel_elem, GRPC_CHANNEL_IDLE,
1430
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
1424
1431
  // Start balancer call.
1425
1432
  StartBalancerCallLocked();
1426
1433
  }
@@ -1430,46 +1437,49 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1430
1437
  // helpers for UpdateLocked()
1431
1438
  //
1432
1439
 
1433
- // Returns the backend addresses extracted from the given addresses.
1434
- ServerAddressList ExtractBackendAddresses(const ServerAddressList& addresses) {
1435
- static const char* lb_token = "";
1436
- grpc_arg arg = grpc_channel_arg_pointer_create(
1437
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
1438
- const_cast<char*>(lb_token), &lb_token_arg_vtable);
1439
- ServerAddressList backend_addresses;
1440
- for (size_t i = 0; i < addresses.size(); ++i) {
1441
- if (!addresses[i].IsBalancer()) {
1442
- backend_addresses.emplace_back(
1443
- addresses[i].address(),
1444
- grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1445
- }
1440
+ ServerAddressList GrpcLb::AddNullLbTokenToAddresses(
1441
+ const ServerAddressList& addresses) {
1442
+ ServerAddressList addresses_out;
1443
+ for (const ServerAddress& address : addresses) {
1444
+ addresses_out.emplace_back(address.WithAttribute(
1445
+ kGrpcLbAddressAttributeKey,
1446
+ absl::make_unique<TokenAndClientStatsAttribute>("", nullptr)));
1446
1447
  }
1447
- return backend_addresses;
1448
+ return addresses_out;
1448
1449
  }
1449
1450
 
1450
1451
  void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1451
1452
  const ServerAddressList& addresses, const grpc_channel_args& args) {
1452
1453
  // Update fallback address list.
1453
- fallback_backend_addresses_ = ExtractBackendAddresses(addresses);
1454
+ fallback_backend_addresses_ = AddNullLbTokenToAddresses(addresses);
1454
1455
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1455
1456
  // since we use this to trigger the client_load_reporting filter.
1456
1457
  static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
1457
1458
  grpc_arg new_arg = grpc_channel_arg_string_create(
1458
- (char*)GRPC_ARG_LB_POLICY_NAME, (char*)"grpclb");
1459
+ const_cast<char*>(GRPC_ARG_LB_POLICY_NAME), const_cast<char*>("grpclb"));
1459
1460
  grpc_channel_args_destroy(args_);
1460
1461
  args_ = grpc_channel_args_copy_and_add_and_remove(
1461
1462
  &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1462
1463
  // Construct args for balancer channel.
1463
- ServerAddressList balancer_addresses = ExtractBalancerAddresses(addresses);
1464
- grpc_channel_args* lb_channel_args = BuildBalancerChannelArgs(
1465
- balancer_addresses, response_generator_.get(), &args);
1464
+ ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1465
+ grpc_channel_args* lb_channel_args =
1466
+ BuildBalancerChannelArgs(response_generator_.get(), &args);
1466
1467
  // Create balancer channel if needed.
1467
1468
  if (lb_channel_ == nullptr) {
1468
- char* uri_str;
1469
- gpr_asprintf(&uri_str, "fake:///%s", server_name_);
1470
- lb_channel_ = CreateGrpclbBalancerChannel(uri_str, *lb_channel_args);
1469
+ std::string uri_str = absl::StrCat("fake:///", server_name_);
1470
+ lb_channel_ =
1471
+ CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1471
1472
  GPR_ASSERT(lb_channel_ != nullptr);
1472
- gpr_free(uri_str);
1473
+ // Set up channelz linkage.
1474
+ channelz::ChannelNode* child_channelz_node =
1475
+ grpc_channel_get_channelz_node(lb_channel_);
1476
+ channelz::ChannelNode* parent_channelz_node =
1477
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
1478
+ &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1479
+ if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1480
+ parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1481
+ parent_channelz_node_ = parent_channelz_node->Ref();
1482
+ }
1473
1483
  }
1474
1484
  // Propagate updates to the LB channel (pick_first) through the fake
1475
1485
  // resolver.
@@ -1479,60 +1489,11 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1479
1489
  response_generator_->SetResponse(std::move(result));
1480
1490
  }
1481
1491
 
1482
- void GrpcLb::OnBalancerChannelConnectivityChanged(void* arg,
1483
- grpc_error* error) {
1484
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1485
- self->combiner()->Run(
1486
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1487
- &GrpcLb::OnBalancerChannelConnectivityChangedLocked,
1488
- self, nullptr),
1489
- GRPC_ERROR_REF(error));
1490
- }
1491
-
1492
- void GrpcLb::OnBalancerChannelConnectivityChangedLocked(void* arg,
1493
- grpc_error* /*error*/) {
1494
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1495
- if (!self->shutting_down_ && self->fallback_at_startup_checks_pending_) {
1496
- if (self->lb_channel_connectivity_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1497
- // Not in TRANSIENT_FAILURE. Renew connectivity watch.
1498
- grpc_channel_element* client_channel_elem =
1499
- grpc_channel_stack_last_element(
1500
- grpc_channel_get_channel_stack(self->lb_channel_));
1501
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1502
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1503
- &GrpcLb::OnBalancerChannelConnectivityChanged, self,
1504
- grpc_schedule_on_exec_ctx);
1505
- grpc_client_channel_watch_connectivity_state(
1506
- client_channel_elem,
1507
- grpc_polling_entity_create_from_pollset_set(
1508
- self->interested_parties()),
1509
- &self->lb_channel_connectivity_,
1510
- &self->lb_channel_on_connectivity_changed_, nullptr);
1511
- return; // Early out so we don't drop the ref below.
1512
- }
1513
- // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
1514
- // fallback mode immediately.
1515
- gpr_log(GPR_INFO,
1516
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
1517
- "entering fallback mode",
1518
- self);
1519
- self->fallback_at_startup_checks_pending_ = false;
1520
- grpc_timer_cancel(&self->lb_fallback_timer_);
1521
- self->fallback_mode_ = true;
1522
- self->CreateOrUpdateChildPolicyLocked();
1523
- }
1524
- // Done watching connectivity state, so drop ref.
1525
- self->Unref(DEBUG_LOCATION, "watch_lb_channel_connectivity");
1526
- }
1527
-
1528
1492
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
1529
1493
  grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
1530
1494
  grpc_channel_get_channel_stack(lb_channel_));
1531
1495
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1532
- grpc_client_channel_watch_connectivity_state(
1533
- client_channel_elem,
1534
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1535
- nullptr, &lb_channel_on_connectivity_changed_, nullptr);
1496
+ grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
1536
1497
  }
1537
1498
 
1538
1499
  //
@@ -1571,33 +1532,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1571
1532
  // with the callback.
1572
1533
  auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1573
1534
  self.release();
1574
- GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1575
- grpc_schedule_on_exec_ctx);
1576
1535
  retry_timer_callback_pending_ = true;
1577
1536
  grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
1578
1537
  }
1579
1538
 
1580
1539
  void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error* error) {
1581
1540
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1582
- grpclb_policy->combiner()->Run(
1583
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_call_retry_,
1584
- &GrpcLb::OnBalancerCallRetryTimerLocked, grpclb_policy,
1585
- nullptr),
1586
- GRPC_ERROR_REF(error));
1541
+ GRPC_ERROR_REF(error); // ref owned by lambda
1542
+ grpclb_policy->work_serializer()->Run(
1543
+ [grpclb_policy, error]() {
1544
+ grpclb_policy->OnBalancerCallRetryTimerLocked(error);
1545
+ },
1546
+ DEBUG_LOCATION);
1587
1547
  }
1588
1548
 
1589
- void GrpcLb::OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error) {
1590
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1591
- grpclb_policy->retry_timer_callback_pending_ = false;
1592
- if (!grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE &&
1593
- grpclb_policy->lb_calld_ == nullptr) {
1549
+ void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error* error) {
1550
+ retry_timer_callback_pending_ = false;
1551
+ if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1594
1552
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1595
- gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server",
1596
- grpclb_policy);
1553
+ gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1597
1554
  }
1598
- grpclb_policy->StartBalancerCallLocked();
1555
+ StartBalancerCallLocked();
1599
1556
  }
1600
- grpclb_policy->Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1557
+ Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1558
+ GRPC_ERROR_UNREF(error);
1601
1559
  }
1602
1560
 
1603
1561
  //
@@ -1624,28 +1582,28 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
1624
1582
 
1625
1583
  void GrpcLb::OnFallbackTimer(void* arg, grpc_error* error) {
1626
1584
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1627
- grpclb_policy->combiner()->Run(
1628
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_fallback_,
1629
- &GrpcLb::OnFallbackTimerLocked, grpclb_policy, nullptr),
1630
- GRPC_ERROR_REF(error));
1585
+ GRPC_ERROR_REF(error); // ref owned by lambda
1586
+ grpclb_policy->work_serializer()->Run(
1587
+ [grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
1588
+ DEBUG_LOCATION);
1631
1589
  }
1632
1590
 
1633
- void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1634
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1591
+ void GrpcLb::OnFallbackTimerLocked(grpc_error* error) {
1635
1592
  // If we receive a serverlist after the timer fires but before this callback
1636
1593
  // actually runs, don't fall back.
1637
- if (grpclb_policy->fallback_at_startup_checks_pending_ &&
1638
- !grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE) {
1594
+ if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1595
+ error == GRPC_ERROR_NONE) {
1639
1596
  gpr_log(GPR_INFO,
1640
1597
  "[grpclb %p] No response from balancer after fallback timeout; "
1641
1598
  "entering fallback mode",
1642
- grpclb_policy);
1643
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1644
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1645
- grpclb_policy->fallback_mode_ = true;
1646
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1599
+ this);
1600
+ fallback_at_startup_checks_pending_ = false;
1601
+ CancelBalancerChannelConnectivityWatchLocked();
1602
+ fallback_mode_ = true;
1603
+ CreateOrUpdateChildPolicyLocked();
1647
1604
  }
1648
- grpclb_policy->Unref(DEBUG_LOCATION, "on_fallback_timer");
1605
+ Unref(DEBUG_LOCATION, "on_fallback_timer");
1606
+ GRPC_ERROR_UNREF(error);
1649
1607
  }
1650
1608
 
1651
1609
  //
@@ -1654,7 +1612,7 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1654
1612
 
1655
1613
  grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1656
1614
  bool is_backend_from_grpclb_load_balancer) {
1657
- InlinedVector<grpc_arg, 2> args_to_add;
1615
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
1658
1616
  args_to_add.emplace_back(grpc_channel_arg_integer_create(
1659
1617
  const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1660
1618
  is_backend_from_grpclb_load_balancer));
@@ -1669,7 +1627,7 @@ grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1669
1627
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1670
1628
  const grpc_channel_args* args) {
1671
1629
  LoadBalancingPolicy::Args lb_policy_args;
1672
- lb_policy_args.combiner = combiner();
1630
+ lb_policy_args.work_serializer = work_serializer();
1673
1631
  lb_policy_args.args = args;
1674
1632
  lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
1675
1633
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
@@ -1707,7 +1665,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1707
1665
  update_args.args =
1708
1666
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1709
1667
  GPR_ASSERT(update_args.args != nullptr);
1710
- update_args.config = child_policy_config_;
1668
+ update_args.config = config_->child_policy();
1711
1669
  // Create child policy if needed.
1712
1670
  if (child_policy_ == nullptr) {
1713
1671
  child_policy_ = CreateChildPolicyLocked(update_args.args);
@@ -1737,12 +1695,23 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1737
1695
  const Json& json, grpc_error** error) const override {
1738
1696
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1739
1697
  if (json.type() == Json::Type::JSON_NULL) {
1740
- return MakeRefCounted<GrpcLbConfig>(nullptr);
1698
+ return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1741
1699
  }
1742
1700
  std::vector<grpc_error*> error_list;
1743
1701
  Json child_policy_config_json_tmp;
1744
1702
  const Json* child_policy_config_json;
1745
- auto it = json.object_value().find("childPolicy");
1703
+ std::string service_name;
1704
+ auto it = json.object_value().find("serviceName");
1705
+ if (it != json.object_value().end()) {
1706
+ const Json& service_name_json = it->second;
1707
+ if (service_name_json.type() != Json::Type::STRING) {
1708
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1709
+ "field:serviceName error:type should be string"));
1710
+ } else {
1711
+ service_name = service_name_json.string_value();
1712
+ }
1713
+ }
1714
+ it = json.object_value().find("childPolicy");
1746
1715
  if (it == json.object_value().end()) {
1747
1716
  child_policy_config_json_tmp = Json::Array{Json::Object{
1748
1717
  {"round_robin", Json::Object()},
@@ -1762,7 +1731,8 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1762
1731
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1763
1732
  }
1764
1733
  if (error_list.empty()) {
1765
- return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config));
1734
+ return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1735
+ std::move(service_name));
1766
1736
  } else {
1767
1737
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1768
1738
  return nullptr;
@@ -1795,7 +1765,8 @@ bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1795
1765
  // will minimize the number of metadata elements that the filter
1796
1766
  // needs to iterate through to find the ClientStats object.
1797
1767
  return grpc_channel_stack_builder_prepend_filter(
1798
- builder, (const grpc_channel_filter*)arg, nullptr, nullptr);
1768
+ builder, static_cast<const grpc_channel_filter*>(arg), nullptr,
1769
+ nullptr);
1799
1770
  }
1800
1771
  return true;
1801
1772
  }
@@ -1806,10 +1777,10 @@ void grpc_lb_policy_grpclb_init() {
1806
1777
  grpc_core::LoadBalancingPolicyRegistry::Builder::
1807
1778
  RegisterLoadBalancingPolicyFactory(
1808
1779
  absl::make_unique<grpc_core::GrpcLbFactory>());
1809
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
1810
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1811
- maybe_add_client_load_reporting_filter,
1812
- (void*)&grpc_client_load_reporting_filter);
1780
+ grpc_channel_init_register_stage(
1781
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1782
+ maybe_add_client_load_reporting_filter,
1783
+ const_cast<grpc_channel_filter*>(&grpc_client_load_reporting_filter));
1813
1784
  }
1814
1785
 
1815
1786
  void grpc_lb_policy_grpclb_shutdown() {}