grpc 1.21.0 → 1.32.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 (1843) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2516 -19950
  3. data/etc/roots.pem +44 -100
  4. data/include/grpc/grpc.h +3 -1
  5. data/include/grpc/grpc_security.h +238 -55
  6. data/include/grpc/grpc_security_constants.h +32 -1
  7. data/include/grpc/impl/codegen/README.md +22 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +61 -13
  10. data/include/grpc/impl/codegen/port_platform.h +74 -30
  11. data/include/grpc/impl/codegen/sync.h +5 -3
  12. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  13. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  14. data/include/grpc/module.modulemap +25 -37
  15. data/include/grpc/slice.h +2 -2
  16. data/include/grpc/support/alloc.h +0 -16
  17. data/include/grpc/support/sync_abseil.h +26 -0
  18. data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
  21. data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
  22. data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
  23. data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
  24. data/src/core/ext/filters/client_channel/client_channel.h +25 -9
  25. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
  26. data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
  27. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  28. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
  29. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
  30. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  31. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  32. data/src/core/ext/filters/client_channel/connector.h +42 -39
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
  34. data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
  35. data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
  36. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
  38. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  39. data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
  40. data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
  41. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
  56. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
  57. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
  59. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
  60. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  74. data/src/core/ext/filters/client_channel/resolver.cc +6 -9
  75. data/src/core/ext/filters/client_channel/resolver.h +19 -37
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
  92. data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
  93. data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
  94. data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
  97. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
  98. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
  99. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  100. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  101. data/src/core/ext/filters/client_channel/server_address.cc +40 -14
  102. data/src/core/ext/filters/client_channel/server_address.h +45 -15
  103. data/src/core/ext/filters/client_channel/service_config.cc +143 -253
  104. data/src/core/ext/filters/client_channel/service_config.h +47 -131
  105. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  106. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  107. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  108. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  109. data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
  110. data/src/core/ext/filters/client_channel/subchannel.h +181 -53
  111. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  112. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  113. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  114. data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
  115. data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  117. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  118. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
  119. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
  122. data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
  124. data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
  125. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
  127. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
  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 +21 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  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 +531 -348
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
  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/incoming_metadata.cc +2 -1
  161. data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
  162. data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
  163. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  164. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  165. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
  166. data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  168. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  170. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  172. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  173. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  229. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  237. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  238. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  239. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  240. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  241. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  243. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
  244. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  245. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
  246. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  249. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
  250. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  251. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  252. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  265. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  266. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  267. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  268. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  269. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
  270. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
  271. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  272. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  273. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  274. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  275. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  277. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  278. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
  279. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  283. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  284. data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
  285. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
  287. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
  289. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
  291. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
  293. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
  295. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
  297. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
  299. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  301. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  302. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
  303. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
  307. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  308. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
  309. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  310. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
  311. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  312. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
  313. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  314. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
  315. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  316. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  317. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  318. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  319. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  320. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
  321. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  322. data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
  323. data/src/core/ext/xds/xds_api.cc +2388 -0
  324. data/src/core/ext/xds/xds_api.h +360 -0
  325. data/src/core/ext/xds/xds_bootstrap.cc +373 -0
  326. data/src/core/ext/xds/xds_bootstrap.h +93 -0
  327. data/src/core/ext/xds/xds_channel.h +46 -0
  328. data/src/core/ext/xds/xds_channel_args.h +26 -0
  329. data/src/core/ext/xds/xds_channel_secure.cc +103 -0
  330. data/src/core/ext/xds/xds_client.cc +2114 -0
  331. data/src/core/ext/xds/xds_client.h +276 -0
  332. data/src/core/ext/xds/xds_client_stats.cc +115 -0
  333. data/src/core/ext/xds/xds_client_stats.h +211 -0
  334. data/src/core/lib/avl/avl.cc +1 -1
  335. data/src/core/lib/channel/channel_args.cc +52 -14
  336. data/src/core/lib/channel/channel_args.h +41 -3
  337. data/src/core/lib/channel/channel_stack.cc +1 -1
  338. data/src/core/lib/channel/channel_stack.h +38 -18
  339. data/src/core/lib/channel/channel_trace.cc +32 -45
  340. data/src/core/lib/channel/channel_trace.h +3 -3
  341. data/src/core/lib/channel/channelz.cc +377 -318
  342. data/src/core/lib/channel/channelz.h +128 -90
  343. data/src/core/lib/channel/channelz_registry.cc +123 -178
  344. data/src/core/lib/channel/channelz_registry.h +14 -32
  345. data/src/core/lib/channel/connected_channel.cc +28 -25
  346. data/src/core/lib/channel/context.h +2 -2
  347. data/src/core/lib/channel/handshaker.cc +18 -14
  348. data/src/core/lib/channel/handshaker.h +7 -6
  349. data/src/core/lib/channel/handshaker_factory.h +1 -3
  350. data/src/core/lib/channel/handshaker_registry.cc +9 -21
  351. data/src/core/lib/channel/handshaker_registry.h +3 -3
  352. data/src/core/lib/channel/status_util.cc +2 -3
  353. data/src/core/lib/compression/compression.cc +16 -11
  354. data/src/core/lib/compression/compression_args.cc +13 -6
  355. data/src/core/lib/compression/compression_args.h +3 -2
  356. data/src/core/lib/compression/compression_internal.cc +15 -11
  357. data/src/core/lib/compression/compression_internal.h +9 -1
  358. data/src/core/lib/compression/message_compress.cc +8 -3
  359. data/src/core/lib/compression/stream_compression.cc +3 -2
  360. data/src/core/lib/compression/stream_compression.h +2 -2
  361. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  362. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  363. data/src/core/lib/debug/stats.cc +21 -27
  364. data/src/core/lib/debug/stats.h +3 -1
  365. data/src/core/lib/debug/trace.h +3 -2
  366. data/src/core/lib/gpr/alloc.cc +4 -29
  367. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  368. data/src/core/lib/gpr/env.h +1 -1
  369. data/src/core/lib/gpr/env_linux.cc +10 -21
  370. data/src/core/lib/gpr/env_posix.cc +0 -5
  371. data/src/core/lib/gpr/log_linux.cc +8 -10
  372. data/src/core/lib/gpr/log_posix.cc +7 -9
  373. data/src/core/lib/gpr/spinlock.h +2 -3
  374. data/src/core/lib/gpr/string.cc +25 -36
  375. data/src/core/lib/gpr/string.h +11 -19
  376. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  377. data/src/core/lib/gpr/sync_posix.cc +10 -142
  378. data/src/core/lib/gpr/sync_windows.cc +4 -2
  379. data/src/core/lib/gpr/time.cc +4 -0
  380. data/src/core/lib/gpr/time_posix.cc +1 -1
  381. data/src/core/lib/gpr/time_precise.cc +123 -36
  382. data/src/core/lib/gpr/time_precise.h +37 -0
  383. data/src/core/lib/gprpp/arena.cc +3 -3
  384. data/src/core/lib/gprpp/arena.h +2 -3
  385. data/src/core/lib/gprpp/atomic.h +10 -6
  386. data/src/core/lib/gprpp/debug_location.h +3 -2
  387. data/src/core/lib/gprpp/fork.cc +19 -26
  388. data/src/core/lib/gprpp/fork.h +18 -3
  389. data/src/core/lib/gprpp/global_config.h +9 -0
  390. data/src/core/lib/gprpp/global_config_custom.h +1 -1
  391. data/src/core/lib/gprpp/global_config_env.cc +15 -13
  392. data/src/core/lib/gprpp/global_config_env.h +2 -2
  393. data/src/core/lib/gprpp/host_port.cc +112 -0
  394. data/src/core/lib/gprpp/host_port.h +56 -0
  395. data/src/core/lib/gprpp/map.h +16 -382
  396. data/src/core/lib/gprpp/memory.h +12 -75
  397. data/src/core/lib/gprpp/mpscq.cc +108 -0
  398. data/src/core/lib/gprpp/mpscq.h +98 -0
  399. data/src/core/lib/gprpp/orphanable.h +9 -14
  400. data/src/core/lib/gprpp/ref_counted.h +97 -44
  401. data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
  402. data/src/core/lib/gprpp/sync.h +9 -0
  403. data/src/core/lib/gprpp/thd.h +13 -6
  404. data/src/core/lib/gprpp/thd_posix.cc +29 -3
  405. data/src/core/lib/gprpp/thd_windows.cc +12 -4
  406. data/src/core/lib/http/format_request.cc +46 -65
  407. data/src/core/lib/http/httpcli.cc +18 -16
  408. data/src/core/lib/http/httpcli.h +2 -3
  409. data/src/core/lib/http/httpcli_security_connector.cc +27 -21
  410. data/src/core/lib/http/parser.cc +1 -1
  411. data/src/core/lib/http/parser.h +2 -3
  412. data/src/core/lib/iomgr/buffer_list.cc +45 -40
  413. data/src/core/lib/iomgr/buffer_list.h +27 -27
  414. data/src/core/lib/iomgr/call_combiner.cc +12 -12
  415. data/src/core/lib/iomgr/call_combiner.h +10 -8
  416. data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
  417. data/src/core/lib/iomgr/cfstream_handle.h +11 -3
  418. data/src/core/lib/iomgr/closure.h +43 -141
  419. data/src/core/lib/iomgr/combiner.cc +46 -90
  420. data/src/core/lib/iomgr/combiner.h +30 -8
  421. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  422. data/src/core/lib/iomgr/endpoint.cc +5 -1
  423. data/src/core/lib/iomgr/endpoint.h +7 -3
  424. data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
  425. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  426. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  427. data/src/core/lib/iomgr/error.cc +26 -19
  428. data/src/core/lib/iomgr/error.h +15 -8
  429. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  430. data/src/core/lib/iomgr/error_internal.h +1 -1
  431. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  432. data/src/core/lib/iomgr/ev_apple.h +43 -0
  433. data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
  434. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
  435. data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
  436. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  437. data/src/core/lib/iomgr/ev_posix.h +3 -2
  438. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  439. data/src/core/lib/iomgr/exec_ctx.cc +78 -21
  440. data/src/core/lib/iomgr/exec_ctx.h +27 -7
  441. data/src/core/lib/iomgr/executor.cc +25 -41
  442. data/src/core/lib/iomgr/executor.h +7 -7
  443. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  444. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  445. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  446. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  447. data/src/core/lib/iomgr/fork_posix.cc +8 -2
  448. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  449. data/src/core/lib/iomgr/iomgr.cc +4 -4
  450. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  451. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
  452. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  453. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  454. data/src/core/lib/iomgr/load_file.cc +1 -0
  455. data/src/core/lib/iomgr/lockfree_event.cc +13 -12
  456. data/src/core/lib/iomgr/parse_address.cc +238 -0
  457. data/src/core/lib/iomgr/parse_address.h +53 -0
  458. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  460. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  461. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  462. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  463. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  464. data/src/core/lib/iomgr/port.h +10 -22
  465. data/src/core/lib/iomgr/python_util.h +46 -0
  466. data/src/core/lib/iomgr/resolve_address.h +4 -6
  467. data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
  468. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  469. data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
  470. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
  471. data/src/core/lib/iomgr/resource_quota.cc +120 -110
  472. data/src/core/lib/iomgr/resource_quota.h +13 -9
  473. data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
  474. data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
  475. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  476. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  477. data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
  478. data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
  479. data/src/core/lib/iomgr/socket_windows.cc +6 -7
  480. data/src/core/lib/iomgr/socket_windows.h +1 -1
  481. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
  482. data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
  483. data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
  484. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  485. data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
  486. data/src/core/lib/iomgr/tcp_custom.cc +58 -36
  487. data/src/core/lib/iomgr/tcp_custom.h +4 -1
  488. data/src/core/lib/iomgr/tcp_posix.cc +697 -124
  489. data/src/core/lib/iomgr/tcp_server.cc +8 -4
  490. data/src/core/lib/iomgr/tcp_server.h +28 -5
  491. data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
  492. data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
  493. data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
  494. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
  495. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  496. data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
  497. data/src/core/lib/iomgr/tcp_uv.cc +8 -8
  498. data/src/core/lib/iomgr/tcp_windows.cc +49 -30
  499. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  500. data/src/core/lib/iomgr/timer.h +2 -1
  501. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  502. data/src/core/lib/iomgr/timer_generic.cc +26 -24
  503. data/src/core/lib/iomgr/timer_generic.h +39 -0
  504. data/src/core/lib/iomgr/timer_heap.h +2 -3
  505. data/src/core/lib/iomgr/timer_manager.cc +8 -30
  506. data/src/core/lib/iomgr/timer_manager.h +2 -0
  507. data/src/core/lib/iomgr/udp_server.cc +53 -53
  508. data/src/core/lib/iomgr/udp_server.h +11 -14
  509. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  510. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  511. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  512. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  513. data/src/core/lib/iomgr/work_serializer.h +65 -0
  514. data/src/core/lib/json/json.h +209 -68
  515. data/src/core/lib/json/json_reader.cc +508 -317
  516. data/src/core/lib/json/json_writer.cc +202 -110
  517. data/src/core/lib/profiling/basic_timers.cc +2 -2
  518. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  519. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  520. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  521. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  522. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  523. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  524. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  525. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  526. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  527. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  528. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  529. data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
  530. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  531. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  532. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  533. data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
  534. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
  535. data/src/core/lib/security/credentials/credentials.h +31 -25
  536. data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
  537. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
  538. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  539. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
  540. data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
  541. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  542. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  543. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  544. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
  545. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  546. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
  547. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  548. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
  549. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
  550. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
  551. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
  552. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
  553. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
  554. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  555. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
  556. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
  557. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  558. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  559. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
  560. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
  561. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
  562. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  563. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
  564. data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
  565. data/src/core/lib/security/security_connector/security_connector.cc +4 -1
  566. data/src/core/lib/security/security_connector/security_connector.h +22 -20
  567. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
  568. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  569. data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
  570. data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
  571. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  572. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  573. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
  574. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  575. data/src/core/lib/security/transport/auth_filters.h +0 -2
  576. data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
  577. data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
  578. data/src/core/lib/security/transport/security_handshaker.cc +103 -43
  579. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  580. data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
  581. data/src/core/lib/security/util/json_util.cc +35 -15
  582. data/src/core/lib/security/util/json_util.h +5 -3
  583. data/src/core/lib/slice/b64.cc +3 -4
  584. data/src/core/lib/slice/b64.h +3 -4
  585. data/src/core/lib/slice/slice.cc +188 -73
  586. data/src/core/lib/slice/slice_buffer.cc +55 -26
  587. data/src/core/lib/slice/slice_intern.cc +164 -64
  588. data/src/core/lib/slice/slice_internal.h +110 -8
  589. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  590. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  591. data/src/core/lib/slice/slice_utils.h +200 -0
  592. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  593. data/src/core/lib/surface/call.cc +166 -117
  594. data/src/core/lib/surface/call.h +8 -8
  595. data/src/core/lib/surface/call_log_batch.cc +51 -60
  596. data/src/core/lib/surface/channel.cc +188 -137
  597. data/src/core/lib/surface/channel.h +91 -11
  598. data/src/core/lib/surface/channel_ping.cc +3 -4
  599. data/src/core/lib/surface/completion_queue.cc +144 -111
  600. data/src/core/lib/surface/completion_queue.h +6 -3
  601. data/src/core/lib/surface/completion_queue_factory.cc +1 -1
  602. data/src/core/lib/surface/event_string.cc +18 -25
  603. data/src/core/lib/surface/event_string.h +3 -1
  604. data/src/core/lib/surface/init.cc +6 -2
  605. data/src/core/lib/surface/init_secure.cc +2 -2
  606. data/src/core/lib/surface/lame_client.cc +43 -30
  607. data/src/core/lib/surface/server.cc +1275 -1316
  608. data/src/core/lib/surface/server.h +373 -52
  609. data/src/core/lib/surface/validate_metadata.cc +18 -8
  610. data/src/core/lib/surface/validate_metadata.h +13 -2
  611. data/src/core/lib/surface/version.cc +2 -2
  612. data/src/core/lib/transport/authority_override.cc +38 -0
  613. data/src/core/lib/transport/authority_override.h +32 -0
  614. data/src/core/lib/transport/byte_stream.cc +5 -7
  615. data/src/core/lib/transport/byte_stream.h +13 -12
  616. data/src/core/lib/transport/connectivity_state.cc +118 -98
  617. data/src/core/lib/transport/connectivity_state.h +114 -50
  618. data/src/core/lib/transport/error_utils.cc +23 -1
  619. data/src/core/lib/transport/error_utils.h +6 -0
  620. data/src/core/lib/transport/metadata.cc +252 -57
  621. data/src/core/lib/transport/metadata.h +168 -80
  622. data/src/core/lib/transport/metadata_batch.cc +78 -16
  623. data/src/core/lib/transport/metadata_batch.h +40 -3
  624. data/src/core/lib/transport/static_metadata.cc +1169 -495
  625. data/src/core/lib/transport/static_metadata.h +279 -282
  626. data/src/core/lib/transport/status_conversion.cc +7 -15
  627. data/src/core/lib/transport/status_metadata.cc +8 -1
  628. data/src/core/lib/transport/status_metadata.h +18 -0
  629. data/src/core/lib/transport/timeout_encoding.cc +7 -0
  630. data/src/core/lib/transport/timeout_encoding.h +3 -2
  631. data/src/core/lib/transport/transport.cc +14 -13
  632. data/src/core/lib/transport/transport.h +48 -8
  633. data/src/core/lib/transport/transport_op_string.cc +67 -105
  634. data/src/core/lib/uri/uri_parser.cc +30 -35
  635. data/src/core/lib/uri/uri_parser.h +5 -4
  636. data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
  637. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  638. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  639. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
  640. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  641. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  642. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  643. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
  644. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
  645. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
  646. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
  647. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  648. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
  649. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  652. data/src/core/tsi/fake_transport_security.cc +22 -21
  653. data/src/core/tsi/fake_transport_security.h +2 -0
  654. data/src/core/tsi/local_transport_security.cc +8 -6
  655. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  656. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  657. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
  658. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  659. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  660. data/src/core/tsi/ssl_transport_security.cc +345 -103
  661. data/src/core/tsi/ssl_transport_security.h +42 -11
  662. data/src/core/tsi/ssl_types.h +0 -2
  663. data/src/core/tsi/transport_security.cc +13 -0
  664. data/src/core/tsi/transport_security.h +6 -9
  665. data/src/core/tsi/transport_security_grpc.cc +7 -0
  666. data/src/core/tsi/transport_security_grpc.h +8 -3
  667. data/src/core/tsi/transport_security_interface.h +20 -3
  668. data/src/ruby/bin/math_pb.rb +5 -5
  669. data/src/ruby/bin/math_services_pb.rb +4 -4
  670. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  671. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  672. data/src/ruby/ext/grpc/extconf.rb +11 -2
  673. data/src/ruby/ext/grpc/rb_call.c +13 -4
  674. data/src/ruby/ext/grpc/rb_call.h +4 -0
  675. data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
  676. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  677. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  678. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  679. data/src/ruby/ext/grpc/rb_grpc.c +1 -42
  680. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
  681. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
  682. data/src/ruby/lib/grpc.rb +2 -0
  683. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  684. data/src/ruby/lib/grpc/errors.rb +107 -49
  685. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  686. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  687. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  688. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  689. data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
  690. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  691. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  692. data/src/ruby/lib/grpc/grpc.rb +1 -1
  693. data/src/ruby/lib/grpc/structs.rb +15 -0
  694. data/src/ruby/lib/grpc/version.rb +1 -1
  695. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  696. data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
  697. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  698. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
  699. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
  700. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
  701. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  702. data/src/ruby/spec/debug_message_spec.rb +134 -0
  703. data/src/ruby/spec/errors_spec.rb +1 -0
  704. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  705. data/src/ruby/spec/generic/service_spec.rb +2 -0
  706. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  707. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  708. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  709. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  710. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  711. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  712. data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
  713. data/src/ruby/spec/support/services.rb +10 -4
  714. data/src/ruby/spec/testdata/ca.pem +18 -13
  715. data/src/ruby/spec/testdata/client.key +26 -14
  716. data/src/ruby/spec/testdata/client.pem +18 -12
  717. data/src/ruby/spec/testdata/server1.key +26 -14
  718. data/src/ruby/spec/testdata/server1.pem +20 -14
  719. data/src/ruby/spec/user_agent_spec.rb +74 -0
  720. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  721. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  722. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  723. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  724. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  725. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  726. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  727. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  728. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  729. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  730. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  734. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  735. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  736. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  737. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  738. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  739. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  740. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  741. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  742. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  743. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  744. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  745. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  746. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  747. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  748. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  749. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  750. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  751. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  752. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  753. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  754. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  755. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  756. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  757. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  758. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  759. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  760. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  761. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  762. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  763. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  764. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  765. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  766. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  767. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  768. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  769. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  770. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  771. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  772. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  773. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  774. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  775. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  776. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  777. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  778. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  779. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  780. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  781. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  782. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  783. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  784. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  785. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  786. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  787. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  788. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  789. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  790. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  791. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  792. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  793. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  794. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  795. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  796. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  797. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  798. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  799. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  800. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  801. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  802. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  803. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  804. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  805. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  806. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  807. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  808. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  809. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  810. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  811. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  812. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  813. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  814. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  815. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  816. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  817. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  818. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  819. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  820. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  821. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  822. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  823. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  824. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  825. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  826. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  827. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  828. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  829. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  830. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  831. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  832. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  833. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  834. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  835. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  836. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  837. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  838. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  839. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  840. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  841. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  861. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  862. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  863. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  864. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  865. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  866. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  867. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  868. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  869. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  870. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  871. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  872. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  873. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  874. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  875. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  876. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  877. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  878. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  879. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  880. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  881. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  882. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  883. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  884. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  885. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  886. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  887. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  888. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  889. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  890. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  891. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  892. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  893. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  894. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  895. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  896. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  897. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  899. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  900. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  901. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  902. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  903. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  904. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  905. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  906. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  907. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  908. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  909. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  910. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  911. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  912. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  913. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  916. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  917. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  918. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  919. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  920. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  921. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  922. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  923. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  924. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  925. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  926. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  927. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  928. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  929. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  930. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  931. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  932. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  935. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  936. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  937. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  938. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  939. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  940. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  941. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  942. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  943. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  944. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  945. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  946. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  947. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  948. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  949. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  950. data/third_party/boringssl-with-bazel/err_data.c +1451 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  954. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  956. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  961. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  962. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  966. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  967. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  969. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  970. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  975. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  980. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  984. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  985. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  986. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  987. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  989. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  994. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  997. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1001. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1002. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1003. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1005. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1011. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  1012. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  1013. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1019. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  1020. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  1021. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  1022. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1025. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1027. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1035. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1036. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1037. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1039. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1040. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1041. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1043. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1049. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1062. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1064. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1066. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1067. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1074. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1075. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1077. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1085. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
  1087. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1095. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1096. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1097. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1103. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1104. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1122. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1126. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1127. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1128. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1129. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1141. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1156. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1160. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1162. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1163. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  1164. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
  1170. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1172. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1179. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1180. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1200. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1202. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1206. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1229. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  1231. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1243. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1248. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1250. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1252. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
  1254. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1255. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
  1261. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1262. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
  1264. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1268. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1271. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1275. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1278. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1281. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1283. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1285. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1289. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1292. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1293. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1294. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1295. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1296. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1299. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1305. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1306. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1316. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1326. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1327. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1330. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
  1336. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1337. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1340. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1341. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1342. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1347. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1348. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1349. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1350. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1351. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1353. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1359. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1362. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1366. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1377. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1378. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1379. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1380. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1381. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1382. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1383. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1384. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1385. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
  1386. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1387. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
  1388. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
  1389. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1390. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1391. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1393. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1394. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1395. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
  1396. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1397. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1398. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1399. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
  1400. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1406. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
  1410. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1411. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
  1412. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  1414. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1415. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1416. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1417. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1418. data/third_party/re2/re2/bitmap256.h +117 -0
  1419. data/third_party/re2/re2/bitstate.cc +385 -0
  1420. data/third_party/re2/re2/compile.cc +1279 -0
  1421. data/third_party/re2/re2/dfa.cc +2130 -0
  1422. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1423. data/third_party/re2/re2/filtered_re2.h +109 -0
  1424. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1425. data/third_party/re2/re2/nfa.cc +713 -0
  1426. data/third_party/re2/re2/onepass.cc +623 -0
  1427. data/third_party/re2/re2/parse.cc +2464 -0
  1428. data/third_party/re2/re2/perl_groups.cc +119 -0
  1429. data/third_party/re2/re2/pod_array.h +55 -0
  1430. data/third_party/re2/re2/prefilter.cc +710 -0
  1431. data/third_party/re2/re2/prefilter.h +108 -0
  1432. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1433. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1434. data/third_party/re2/re2/prog.cc +988 -0
  1435. data/third_party/re2/re2/prog.h +436 -0
  1436. data/third_party/re2/re2/re2.cc +1362 -0
  1437. data/third_party/re2/re2/re2.h +1002 -0
  1438. data/third_party/re2/re2/regexp.cc +980 -0
  1439. data/third_party/re2/re2/regexp.h +659 -0
  1440. data/third_party/re2/re2/set.cc +154 -0
  1441. data/third_party/re2/re2/set.h +80 -0
  1442. data/third_party/re2/re2/simplify.cc +657 -0
  1443. data/third_party/re2/re2/sparse_array.h +392 -0
  1444. data/third_party/re2/re2/sparse_set.h +264 -0
  1445. data/third_party/re2/re2/stringpiece.cc +65 -0
  1446. data/third_party/re2/re2/stringpiece.h +210 -0
  1447. data/third_party/re2/re2/tostring.cc +351 -0
  1448. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1449. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1450. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1451. data/third_party/re2/re2/unicode_groups.h +67 -0
  1452. data/third_party/re2/re2/walker-inl.h +246 -0
  1453. data/third_party/re2/util/benchmark.h +156 -0
  1454. data/third_party/re2/util/flags.h +26 -0
  1455. data/third_party/re2/util/logging.h +109 -0
  1456. data/third_party/re2/util/malloc_counter.h +19 -0
  1457. data/third_party/re2/util/mix.h +41 -0
  1458. data/third_party/re2/util/mutex.h +148 -0
  1459. data/third_party/re2/util/pcre.cc +1025 -0
  1460. data/third_party/re2/util/pcre.h +681 -0
  1461. data/third_party/re2/util/rune.cc +260 -0
  1462. data/third_party/re2/util/strutil.cc +149 -0
  1463. data/third_party/re2/util/strutil.h +21 -0
  1464. data/third_party/re2/util/test.h +50 -0
  1465. data/third_party/re2/util/utf.h +44 -0
  1466. data/third_party/re2/util/util.h +42 -0
  1467. data/third_party/upb/upb/decode.c +621 -0
  1468. data/third_party/upb/upb/decode.h +21 -0
  1469. data/third_party/upb/upb/encode.c +420 -0
  1470. data/third_party/upb/upb/encode.h +21 -0
  1471. data/third_party/upb/upb/msg.c +177 -0
  1472. data/third_party/upb/upb/msg.h +473 -0
  1473. data/third_party/upb/upb/port.c +26 -0
  1474. data/third_party/upb/upb/port_def.inc +179 -0
  1475. data/third_party/upb/upb/port_undef.inc +28 -0
  1476. data/third_party/upb/upb/table.c +880 -0
  1477. data/third_party/upb/upb/table.int.h +466 -0
  1478. data/third_party/upb/upb/upb.c +287 -0
  1479. data/third_party/upb/upb/upb.h +308 -0
  1480. data/third_party/upb/upb/upb.hpp +88 -0
  1481. metadata +1054 -526
  1482. data/src/boringssl/err_data.c +0 -1362
  1483. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1484. data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
  1485. data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
  1486. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1487. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1488. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1489. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1490. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1491. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1492. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
  1493. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
  1494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
  1495. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
  1496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
  1497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
  1498. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
  1499. data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
  1500. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1501. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1502. data/src/core/lib/gpr/host_port.cc +0 -98
  1503. data/src/core/lib/gpr/host_port.h +0 -43
  1504. data/src/core/lib/gpr/mpscq.cc +0 -117
  1505. data/src/core/lib/gpr/mpscq.h +0 -88
  1506. data/src/core/lib/gprpp/abstract.h +0 -37
  1507. data/src/core/lib/gprpp/inlined_vector.h +0 -200
  1508. data/src/core/lib/gprpp/optional.h +0 -48
  1509. data/src/core/lib/gprpp/pair.h +0 -38
  1510. data/src/core/lib/json/json.cc +0 -94
  1511. data/src/core/lib/json/json_common.h +0 -34
  1512. data/src/core/lib/json/json_reader.h +0 -146
  1513. data/src/core/lib/json/json_string.cc +0 -367
  1514. data/src/core/lib/json/json_writer.h +0 -84
  1515. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
  1516. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
  1517. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
  1518. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
  1519. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1520. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1521. data/src/core/lib/slice/slice_hash_table.h +0 -205
  1522. data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
  1523. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1524. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1525. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
  1526. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1527. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1528. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1529. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1530. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1531. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1532. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1533. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1534. data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
  1535. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1536. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1537. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1538. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1539. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1540. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1541. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1542. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1543. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1544. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1545. data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
  1546. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1547. data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
  1548. data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
  1549. data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
  1550. data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
  1551. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1552. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1553. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1554. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1555. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1556. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1557. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1558. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1559. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1560. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1561. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1562. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1563. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1564. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1565. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1566. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1567. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1568. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1569. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1570. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1571. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1572. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1573. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1574. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1575. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1576. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1577. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1578. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1579. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1580. data/third_party/boringssl/crypto/crypto.c +0 -198
  1581. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1582. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1583. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1584. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1585. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1586. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1587. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1588. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1589. data/third_party/boringssl/crypto/err/err.c +0 -847
  1590. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1591. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1592. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1593. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1594. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1595. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1596. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1597. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1598. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1599. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1600. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1601. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1602. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1603. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1604. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1605. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1606. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1607. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1608. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1609. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1610. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1611. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1612. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1613. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1614. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1615. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1616. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1617. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1618. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1619. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1620. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1621. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1622. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1623. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1624. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1625. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1626. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1627. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1628. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1629. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1630. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1631. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1632. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1633. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1634. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1635. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1636. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1637. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1638. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1639. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1640. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1641. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1642. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1643. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1644. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1645. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1646. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1647. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1648. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1649. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1650. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1651. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1652. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1653. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1654. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1655. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1656. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1657. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1658. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1659. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1660. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1661. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1662. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1663. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1664. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1665. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1666. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1667. data/third_party/boringssl/crypto/internal.h +0 -739
  1668. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1669. data/third_party/boringssl/crypto/mem.c +0 -235
  1670. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1671. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1672. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1673. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1674. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1675. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1676. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1677. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1678. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1679. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1680. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1681. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1682. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1683. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1684. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1685. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1686. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1687. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1688. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1689. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1690. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1691. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1692. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1693. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1694. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1695. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1696. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1697. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1698. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1699. data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
  1700. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1701. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1702. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1703. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1704. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1705. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1706. data/third_party/boringssl/crypto/x509/x509.c +0 -157
  1707. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1708. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1709. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1710. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1711. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1712. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1713. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1714. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1715. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1716. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1717. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1718. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1719. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1720. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1721. data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
  1722. data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
  1723. data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
  1724. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1725. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1726. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1727. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1728. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1729. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1730. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1731. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1732. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1733. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1734. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1735. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1736. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1737. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1738. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1739. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1740. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1741. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1742. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1743. data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
  1744. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1745. data/third_party/boringssl/include/openssl/base.h +0 -457
  1746. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1747. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1748. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1749. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1750. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1751. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1752. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1753. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1754. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1755. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1756. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1757. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1758. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1759. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1760. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1761. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1762. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1763. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1764. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1765. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1766. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1767. data/third_party/boringssl/include/openssl/err.h +0 -458
  1768. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1769. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1770. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1771. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1772. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1773. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1774. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1775. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1776. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1777. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1778. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1779. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1780. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1781. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1782. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1783. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1784. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1785. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1786. data/third_party/boringssl/include/openssl/span.h +0 -191
  1787. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1788. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1789. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1790. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1791. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1792. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1793. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1794. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1795. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1796. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1797. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1798. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1799. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1800. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1801. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1802. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1803. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1804. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1805. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1806. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1807. data/third_party/boringssl/ssl/internal.h +0 -3064
  1808. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1809. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1810. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1811. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1812. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1813. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1814. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1815. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1816. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1817. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1818. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1819. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1820. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1821. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1822. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1823. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1824. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1825. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1826. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1827. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1828. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1829. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1830. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1831. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1832. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1833. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1834. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1835. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1836. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1837. data/third_party/nanopb/pb.h +0 -579
  1838. data/third_party/nanopb/pb_common.c +0 -97
  1839. data/third_party/nanopb/pb_common.h +0 -42
  1840. data/third_party/nanopb/pb_decode.c +0 -1347
  1841. data/third_party/nanopb/pb_decode.h +0 -149
  1842. data/third_party/nanopb/pb_encode.c +0 -696
  1843. data/third_party/nanopb/pb_encode.h +0 -154
@@ -0,0 +1,83 @@
1
+ //
2
+ // Copyright 2018 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_CHILD_POLICY_HANDLER_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_CHILD_POLICY_HANDLER_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include "src/core/ext/filters/client_channel/lb_policy.h"
23
+ #include "src/core/lib/debug/trace.h"
24
+ #include "src/core/lib/gprpp/orphanable.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ // A class that makes it easy to gracefully switch child policies.
29
+ //
30
+ // Callers should instantiate this instead of using
31
+ // LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(). Once
32
+ // instantiated, this object will automatically take care of
33
+ // constructing the child policy as needed upon receiving an update.
34
+ class ChildPolicyHandler : public LoadBalancingPolicy {
35
+ public:
36
+ ChildPolicyHandler(Args args, TraceFlag* tracer)
37
+ : LoadBalancingPolicy(std::move(args)), tracer_(tracer) {}
38
+
39
+ virtual const char* name() const override { return "child_policy_handler"; }
40
+
41
+ void UpdateLocked(UpdateArgs args) override;
42
+ void ExitIdleLocked() override;
43
+ void ResetBackoffLocked() override;
44
+
45
+ // Returns true if transitioning from the old config to the new config
46
+ // requires instantiating a new policy object.
47
+ virtual bool ConfigChangeRequiresNewPolicyInstance(
48
+ LoadBalancingPolicy::Config* old_config,
49
+ LoadBalancingPolicy::Config* new_config) const;
50
+
51
+ // Instantiates a new policy of the specified name.
52
+ // May be overridden by subclasses to avoid recursion when an LB
53
+ // policy factory returns a ChildPolicyHandler.
54
+ virtual OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
55
+ const char* name, LoadBalancingPolicy::Args args) const;
56
+
57
+ private:
58
+ class Helper;
59
+
60
+ void ShutdownLocked() override;
61
+
62
+ OrphanablePtr<LoadBalancingPolicy> CreateChildPolicy(
63
+ const char* child_policy_name, const grpc_channel_args& args);
64
+
65
+ // Passed in from caller at construction time.
66
+ TraceFlag* tracer_;
67
+
68
+ bool shutting_down_ = false;
69
+
70
+ // The most recent config passed to UpdateLocked().
71
+ // If pending_child_policy_ is non-null, this is the config passed to
72
+ // pending_child_policy_; otherwise, it's the config passed to child_policy_.
73
+ RefCountedPtr<LoadBalancingPolicy::Config> current_config_;
74
+
75
+ // Child LB policy.
76
+ OrphanablePtr<LoadBalancingPolicy> child_policy_;
77
+ OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
78
+ };
79
+
80
+ } // namespace grpc_core
81
+
82
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_CHILD_POLICY_HANDLER_H \
83
+ */
@@ -20,19 +20,22 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
22
22
 
23
+ #include <string.h>
24
+
23
25
  #include <grpc/support/atm.h>
24
26
  #include <grpc/support/log.h>
25
27
 
28
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
26
29
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
27
30
  #include "src/core/lib/iomgr/error.h"
28
31
  #include "src/core/lib/profiling/timers.h"
29
32
 
30
- static grpc_error* init_channel_elem(grpc_channel_element* elem,
31
- grpc_channel_element_args* args) {
33
+ static grpc_error* clr_init_channel_elem(grpc_channel_element* /*elem*/,
34
+ grpc_channel_element_args* /*args*/) {
32
35
  return GRPC_ERROR_NONE;
33
36
  }
34
37
 
35
- static void destroy_channel_elem(grpc_channel_element* elem) {}
38
+ static void clr_destroy_channel_elem(grpc_channel_element* /*elem*/) {}
36
39
 
37
40
  namespace {
38
41
 
@@ -56,7 +59,8 @@ static void on_complete_for_send(void* arg, grpc_error* error) {
56
59
  if (error == GRPC_ERROR_NONE) {
57
60
  calld->send_initial_metadata_succeeded = true;
58
61
  }
59
- GRPC_CLOSURE_RUN(calld->original_on_complete_for_send, GRPC_ERROR_REF(error));
62
+ grpc_core::Closure::Run(DEBUG_LOCATION, calld->original_on_complete_for_send,
63
+ GRPC_ERROR_REF(error));
60
64
  }
61
65
 
62
66
  static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
@@ -64,20 +68,21 @@ static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
64
68
  if (error == GRPC_ERROR_NONE) {
65
69
  calld->recv_initial_metadata_succeeded = true;
66
70
  }
67
- GRPC_CLOSURE_RUN(calld->original_recv_initial_metadata_ready,
68
- GRPC_ERROR_REF(error));
71
+ grpc_core::Closure::Run(DEBUG_LOCATION,
72
+ calld->original_recv_initial_metadata_ready,
73
+ GRPC_ERROR_REF(error));
69
74
  }
70
75
 
71
- static grpc_error* init_call_elem(grpc_call_element* elem,
72
- const grpc_call_element_args* args) {
76
+ static grpc_error* clr_init_call_elem(grpc_call_element* elem,
77
+ const grpc_call_element_args* args) {
73
78
  GPR_ASSERT(args->context != nullptr);
74
79
  new (elem->call_data) call_data();
75
80
  return GRPC_ERROR_NONE;
76
81
  }
77
82
 
78
- static void destroy_call_elem(grpc_call_element* elem,
79
- const grpc_call_final_info* final_info,
80
- grpc_closure* ignored) {
83
+ static void clr_destroy_call_elem(grpc_call_element* elem,
84
+ const grpc_call_final_info* /*final_info*/,
85
+ grpc_closure* /*ignored*/) {
81
86
  call_data* calld = static_cast<call_data*>(elem->call_data);
82
87
  if (calld->client_stats != nullptr) {
83
88
  // Record call finished, optionally setting client_failed_to_send and
@@ -89,28 +94,39 @@ static void destroy_call_elem(grpc_call_element* elem,
89
94
  calld->~call_data();
90
95
  }
91
96
 
92
- static void start_transport_stream_op_batch(
97
+ static void clr_start_transport_stream_op_batch(
93
98
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
94
99
  call_data* calld = static_cast<call_data*>(elem->call_data);
95
100
  GPR_TIMER_SCOPE("clr_start_transport_stream_op_batch", 0);
96
101
  // Handle send_initial_metadata.
97
102
  if (batch->send_initial_metadata) {
98
- // Grab client stats object from user_data for LB token metadata.
99
- grpc_linked_mdelem* lb_token =
100
- batch->payload->send_initial_metadata.send_initial_metadata->idx.named
101
- .lb_token;
102
- if (lb_token != nullptr) {
103
+ // Grab client stats object from metadata.
104
+ grpc_linked_mdelem* client_stats_md =
105
+ batch->payload->send_initial_metadata.send_initial_metadata->list.head;
106
+ for (; client_stats_md != nullptr;
107
+ client_stats_md = client_stats_md->next) {
108
+ if (GRPC_SLICE_START_PTR(GRPC_MDKEY(client_stats_md->md)) ==
109
+ static_cast<const void*>(grpc_core::kGrpcLbClientStatsMetadataKey)) {
110
+ break;
111
+ }
112
+ }
113
+ if (client_stats_md != nullptr) {
103
114
  grpc_core::GrpcLbClientStats* client_stats =
104
- static_cast<grpc_core::GrpcLbClientStats*>(grpc_mdelem_get_user_data(
105
- lb_token->md, grpc_core::GrpcLbClientStats::Destroy));
115
+ const_cast<grpc_core::GrpcLbClientStats*>(
116
+ reinterpret_cast<const grpc_core::GrpcLbClientStats*>(
117
+ GRPC_SLICE_START_PTR(GRPC_MDVALUE(client_stats_md->md))));
106
118
  if (client_stats != nullptr) {
107
- calld->client_stats = client_stats->Ref();
119
+ calld->client_stats.reset(client_stats);
108
120
  // Intercept completion.
109
121
  calld->original_on_complete_for_send = batch->on_complete;
110
122
  GRPC_CLOSURE_INIT(&calld->on_complete_for_send, on_complete_for_send,
111
123
  calld, grpc_schedule_on_exec_ctx);
112
124
  batch->on_complete = &calld->on_complete_for_send;
113
125
  }
126
+ // Remove metadata so it doesn't go out on the wire.
127
+ grpc_metadata_batch_remove(
128
+ batch->payload->send_initial_metadata.send_initial_metadata,
129
+ client_stats_md);
114
130
  }
115
131
  }
116
132
  // Intercept completion of recv_initial_metadata.
@@ -128,14 +144,14 @@ static void start_transport_stream_op_batch(
128
144
  }
129
145
 
130
146
  const grpc_channel_filter grpc_client_load_reporting_filter = {
131
- start_transport_stream_op_batch,
147
+ clr_start_transport_stream_op_batch,
132
148
  grpc_channel_next_op,
133
149
  sizeof(call_data),
134
- init_call_elem,
150
+ clr_init_call_elem,
135
151
  grpc_call_stack_ignore_set_pollset_or_pollset_set,
136
- destroy_call_elem,
152
+ clr_destroy_call_elem,
137
153
  0, // sizeof(channel_data)
138
- init_channel_elem,
139
- destroy_channel_elem,
154
+ clr_init_channel_elem,
155
+ clr_destroy_channel_elem,
140
156
  grpc_channel_next_get_info,
141
157
  "client_load_reporting"};
@@ -64,6 +64,13 @@
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
+
72
+ #include "upb/upb.hpp"
73
+
67
74
  #include <grpc/byte_buffer_reader.h>
68
75
  #include <grpc/grpc.h>
69
76
  #include <grpc/support/alloc.h>
@@ -71,30 +78,29 @@
71
78
  #include <grpc/support/time.h>
72
79
 
73
80
  #include "src/core/ext/filters/client_channel/client_channel.h"
81
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
74
82
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
75
83
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
84
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
76
85
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
77
86
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
78
87
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
79
88
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
80
89
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
81
- #include "src/core/ext/filters/client_channel/parse_address.h"
82
90
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
83
91
  #include "src/core/ext/filters/client_channel/server_address.h"
84
92
  #include "src/core/lib/backoff/backoff.h"
85
93
  #include "src/core/lib/channel/channel_args.h"
86
94
  #include "src/core/lib/channel/channel_stack.h"
87
- #include "src/core/lib/gpr/host_port.h"
88
95
  #include "src/core/lib/gpr/string.h"
89
96
  #include "src/core/lib/gprpp/manual_constructor.h"
90
97
  #include "src/core/lib/gprpp/memory.h"
91
98
  #include "src/core/lib/gprpp/orphanable.h"
92
99
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
93
- #include "src/core/lib/iomgr/combiner.h"
100
+ #include "src/core/lib/iomgr/parse_address.h"
94
101
  #include "src/core/lib/iomgr/sockaddr.h"
95
102
  #include "src/core/lib/iomgr/sockaddr_utils.h"
96
103
  #include "src/core/lib/iomgr/timer.h"
97
- #include "src/core/lib/slice/slice_hash_table.h"
98
104
  #include "src/core/lib/slice/slice_internal.h"
99
105
  #include "src/core/lib/slice/slice_string_helpers.h"
100
106
  #include "src/core/lib/surface/call.h"
@@ -109,28 +115,36 @@
109
115
  #define GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS 10000
110
116
 
111
117
  #define GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN "grpc.grpclb_address_lb_token"
118
+ #define GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS "grpc.grpclb_address_client_stats"
112
119
 
113
120
  namespace grpc_core {
114
121
 
115
122
  TraceFlag grpc_lb_glb_trace(false, "glb");
116
123
 
124
+ const char kGrpcLbClientStatsMetadataKey[] = "grpclb_client_stats";
125
+ const char kGrpcLbLbTokenMetadataKey[] = "lb-token";
126
+
117
127
  namespace {
118
128
 
119
129
  constexpr char kGrpclb[] = "grpclb";
120
130
 
121
- class ParsedGrpcLbConfig : public ParsedLoadBalancingConfig {
131
+ class GrpcLbConfig : public LoadBalancingPolicy::Config {
122
132
  public:
123
- explicit ParsedGrpcLbConfig(
124
- RefCountedPtr<ParsedLoadBalancingConfig> child_policy)
125
- : child_policy_(std::move(child_policy)) {}
133
+ GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
134
+ std::string service_name)
135
+ : child_policy_(std::move(child_policy)),
136
+ service_name_(std::move(service_name)) {}
126
137
  const char* name() const override { return kGrpclb; }
127
138
 
128
- RefCountedPtr<ParsedLoadBalancingConfig> child_policy() const {
139
+ RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
129
140
  return child_policy_;
130
141
  }
131
142
 
143
+ const std::string& service_name() const { return service_name_; }
144
+
132
145
  private:
133
- RefCountedPtr<ParsedLoadBalancingConfig> child_policy_;
146
+ RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
147
+ std::string service_name_;
134
148
  };
135
149
 
136
150
  class GrpcLb : public LoadBalancingPolicy {
@@ -141,9 +155,6 @@ class GrpcLb : public LoadBalancingPolicy {
141
155
 
142
156
  void UpdateLocked(UpdateArgs args) override;
143
157
  void ResetBackoffLocked() override;
144
- void FillChildRefsForChannelz(
145
- channelz::ChildRefsList* child_subchannels,
146
- channelz::ChildRefsList* child_channels) override;
147
158
 
148
159
  private:
149
160
  /// Contains a call to the LB server and all the data related to the call.
@@ -151,6 +162,7 @@ class GrpcLb : public LoadBalancingPolicy {
151
162
  public:
152
163
  explicit BalancerCallState(
153
164
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy);
165
+ ~BalancerCallState();
154
166
 
155
167
  // It's the caller's responsibility to ensure that Orphan() is called from
156
168
  // inside the combiner.
@@ -164,12 +176,6 @@ class GrpcLb : public LoadBalancingPolicy {
164
176
  bool seen_serverlist() const { return seen_serverlist_; }
165
177
 
166
178
  private:
167
- // So Delete() can access our private dtor.
168
- template <typename T>
169
- friend void grpc_core::Delete(T*);
170
-
171
- ~BalancerCallState();
172
-
173
179
  GrpcLb* grpclb_policy() const {
174
180
  return static_cast<GrpcLb*>(grpclb_policy_.get());
175
181
  }
@@ -177,13 +183,17 @@ class GrpcLb : public LoadBalancingPolicy {
177
183
  void ScheduleNextClientLoadReportLocked();
178
184
  void SendClientLoadReportLocked();
179
185
 
180
- static bool LoadReportCountersAreZero(grpc_grpclb_request* request);
186
+ static void MaybeSendClientLoadReport(void* arg, grpc_error* error);
187
+ static void ClientLoadReportDone(void* arg, grpc_error* error);
188
+ static void OnInitialRequestSent(void* arg, grpc_error* error);
189
+ static void OnBalancerMessageReceived(void* arg, grpc_error* error);
190
+ static void OnBalancerStatusReceived(void* arg, grpc_error* error);
181
191
 
182
- static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
183
- static void ClientLoadReportDoneLocked(void* arg, grpc_error* error);
184
- static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
185
- static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
186
- static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
192
+ void MaybeSendClientLoadReportLocked(grpc_error* error);
193
+ void ClientLoadReportDoneLocked(grpc_error* error);
194
+ void OnInitialRequestSentLocked();
195
+ void OnBalancerMessageReceivedLocked();
196
+ void OnBalancerStatusReceivedLocked(grpc_error* error);
187
197
 
188
198
  // The owning LB policy.
189
199
  RefCountedPtr<LoadBalancingPolicy> grpclb_policy_;
@@ -226,17 +236,15 @@ class GrpcLb : public LoadBalancingPolicy {
226
236
  class Serverlist : public RefCounted<Serverlist> {
227
237
  public:
228
238
  // Takes ownership of serverlist.
229
- explicit Serverlist(grpc_grpclb_serverlist* serverlist)
230
- : serverlist_(serverlist) {}
231
-
232
- ~Serverlist() { grpc_grpclb_destroy_serverlist(serverlist_); }
239
+ explicit Serverlist(std::vector<GrpcLbServer> serverlist)
240
+ : serverlist_(std::move(serverlist)) {}
233
241
 
234
242
  bool operator==(const Serverlist& other) const;
235
243
 
236
- const grpc_grpclb_serverlist* serverlist() const { return serverlist_; }
244
+ const std::vector<GrpcLbServer>& serverlist() const { return serverlist_; }
237
245
 
238
246
  // Returns a text representation suitable for logging.
239
- UniquePtr<char> AsText() const;
247
+ std::string AsText() const;
240
248
 
241
249
  // Extracts all non-drop entries into a ServerAddressList.
242
250
  ServerAddressList GetServerAddressList(
@@ -250,16 +258,16 @@ class GrpcLb : public LoadBalancingPolicy {
250
258
  // should not be dropped.
251
259
  //
252
260
  // Note: This is called from the picker, so it will be invoked in
253
- // the channel's data plane combiner, NOT the control plane
254
- // combiner. It should not be accessed by any other part of the LB
261
+ // the channel's data plane mutex, NOT the control plane
262
+ // work_serializer. It should not be accessed by any other part of the LB
255
263
  // policy.
256
264
  const char* ShouldDrop();
257
265
 
258
266
  private:
259
- grpc_grpclb_serverlist* serverlist_;
267
+ std::vector<GrpcLbServer> serverlist_;
260
268
 
261
- // Guarded by the channel's data plane combiner, NOT the control
262
- // plane combiner. It should not be accessed by anything but the
269
+ // Guarded by the channel's data plane mutex, NOT the control
270
+ // plane work_serializer. It should not be accessed by anything but the
263
271
  // picker via the ShouldDrop() method.
264
272
  size_t drop_index_ = 0;
265
273
  };
@@ -267,14 +275,14 @@ class GrpcLb : public LoadBalancingPolicy {
267
275
  class Picker : public SubchannelPicker {
268
276
  public:
269
277
  Picker(GrpcLb* parent, RefCountedPtr<Serverlist> serverlist,
270
- UniquePtr<SubchannelPicker> child_picker,
278
+ std::unique_ptr<SubchannelPicker> child_picker,
271
279
  RefCountedPtr<GrpcLbClientStats> client_stats)
272
280
  : parent_(parent),
273
281
  serverlist_(std::move(serverlist)),
274
282
  child_picker_(std::move(child_picker)),
275
283
  client_stats_(std::move(client_stats)) {}
276
284
 
277
- PickResult Pick(PickArgs* pick, grpc_error** error) override;
285
+ PickResult Pick(PickArgs args) override;
278
286
 
279
287
  private:
280
288
  // Storing the address for logging, but not holding a ref.
@@ -284,7 +292,7 @@ class GrpcLb : public LoadBalancingPolicy {
284
292
  // Serverlist to be used for determining drops.
285
293
  RefCountedPtr<Serverlist> serverlist_;
286
294
 
287
- UniquePtr<SubchannelPicker> child_picker_;
295
+ std::unique_ptr<SubchannelPicker> child_picker_;
288
296
  RefCountedPtr<GrpcLbClientStats> client_stats_;
289
297
  };
290
298
 
@@ -293,21 +301,48 @@ class GrpcLb : public LoadBalancingPolicy {
293
301
  explicit Helper(RefCountedPtr<GrpcLb> parent)
294
302
  : parent_(std::move(parent)) {}
295
303
 
296
- Subchannel* CreateSubchannel(const grpc_channel_args& args) override;
297
- grpc_channel* CreateChannel(const char* target,
298
- const grpc_channel_args& args) override;
299
- void UpdateState(grpc_connectivity_state state,
300
- UniquePtr<SubchannelPicker> picker) override;
304
+ RefCountedPtr<SubchannelInterface> CreateSubchannel(
305
+ const grpc_channel_args& args) override;
306
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
307
+ std::unique_ptr<SubchannelPicker> picker) override;
301
308
  void RequestReresolution() override;
309
+ void AddTraceEvent(TraceSeverity severity,
310
+ absl::string_view message) override;
302
311
 
303
- void set_child(LoadBalancingPolicy* child) { child_ = child; }
312
+ private:
313
+ RefCountedPtr<GrpcLb> parent_;
314
+ };
315
+
316
+ class StateWatcher : public AsyncConnectivityStateWatcherInterface {
317
+ public:
318
+ explicit StateWatcher(RefCountedPtr<GrpcLb> parent)
319
+ : AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
320
+ parent_(std::move(parent)) {}
321
+
322
+ ~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
304
323
 
305
324
  private:
306
- bool CalledByPendingChild() const;
307
- bool CalledByCurrentChild() const;
325
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
326
+ const absl::Status& status) override {
327
+ if (parent_->fallback_at_startup_checks_pending_ &&
328
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
329
+ // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
330
+ // fallback mode immediately.
331
+ gpr_log(GPR_INFO,
332
+ "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
333
+ "entering fallback mode",
334
+ parent_.get(), status.ToString().c_str());
335
+ parent_->fallback_at_startup_checks_pending_ = false;
336
+ grpc_timer_cancel(&parent_->lb_fallback_timer_);
337
+ parent_->fallback_mode_ = true;
338
+ parent_->CreateOrUpdateChildPolicyLocked();
339
+ // Cancel the watch, since we don't care about the channel state once we
340
+ // go into fallback mode.
341
+ parent_->CancelBalancerChannelConnectivityWatchLocked();
342
+ }
343
+ }
308
344
 
309
345
  RefCountedPtr<GrpcLb> parent_;
310
- LoadBalancingPolicy* child_ = nullptr;
311
346
  };
312
347
 
313
348
  ~GrpcLb();
@@ -317,28 +352,31 @@ class GrpcLb : public LoadBalancingPolicy {
317
352
  // Helper functions used in UpdateLocked().
318
353
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
319
354
  const grpc_channel_args& args);
320
- static void OnBalancerChannelConnectivityChangedLocked(void* arg,
321
- grpc_error* error);
355
+
322
356
  void CancelBalancerChannelConnectivityWatchLocked();
323
357
 
324
358
  // Methods for dealing with fallback state.
325
359
  void MaybeEnterFallbackModeAfterStartup();
326
- static void OnFallbackTimerLocked(void* arg, grpc_error* error);
360
+ static void OnFallbackTimer(void* arg, grpc_error* error);
361
+ void OnFallbackTimerLocked(grpc_error* error);
327
362
 
328
363
  // Methods for dealing with the balancer call.
329
364
  void StartBalancerCallLocked();
330
365
  void StartBalancerCallRetryTimerLocked();
331
- static void OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error);
366
+ static void OnBalancerCallRetryTimer(void* arg, grpc_error* error);
367
+ void OnBalancerCallRetryTimerLocked(grpc_error* error);
332
368
 
333
369
  // Methods for dealing with the child policy.
334
370
  grpc_channel_args* CreateChildPolicyArgsLocked(
335
371
  bool is_backend_from_grpclb_load_balancer);
336
372
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
337
- const char* name, const grpc_channel_args* args);
373
+ const grpc_channel_args* args);
338
374
  void CreateOrUpdateChildPolicyLocked();
339
375
 
340
376
  // Who the client is trying to communicate with.
341
377
  const char* server_name_ = nullptr;
378
+ // Configurations for the policy.
379
+ RefCountedPtr<GrpcLbConfig> config_;
342
380
 
343
381
  // Current channel args from the resolver.
344
382
  grpc_channel_args* args_ = nullptr;
@@ -348,8 +386,7 @@ class GrpcLb : public LoadBalancingPolicy {
348
386
 
349
387
  // The channel for communicating with the LB server.
350
388
  grpc_channel* lb_channel_ = nullptr;
351
- // Uuid of the lb channel. Used for channelz.
352
- gpr_atm lb_channel_uuid_ = 0;
389
+ StateWatcher* watcher_ = nullptr;
353
390
  // Response generator to inject address updates into lb_channel_.
354
391
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
355
392
 
@@ -382,19 +419,9 @@ class GrpcLb : public LoadBalancingPolicy {
382
419
  bool fallback_at_startup_checks_pending_ = false;
383
420
  grpc_timer lb_fallback_timer_;
384
421
  grpc_closure lb_on_fallback_;
385
- grpc_connectivity_state lb_channel_connectivity_ = GRPC_CHANNEL_IDLE;
386
- grpc_closure lb_channel_on_connectivity_changed_;
387
422
 
388
- // Lock held when modifying the value of child_policy_ or
389
- // pending_child_policy_.
390
- gpr_mu child_policy_mu_;
391
423
  // The child policy to use for the backends.
392
424
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
393
- // When switching child policies, the new policy will be stored here
394
- // until it reports READY, at which point it will be moved to child_policy_.
395
- OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
396
- // The child policy config.
397
- RefCountedPtr<ParsedLoadBalancingConfig> child_policy_config_;
398
425
  // Child policy in state READY.
399
426
  bool child_policy_ready_ = false;
400
427
  };
@@ -404,92 +431,102 @@ class GrpcLb : public LoadBalancingPolicy {
404
431
  //
405
432
 
406
433
  bool GrpcLb::Serverlist::operator==(const Serverlist& other) const {
407
- return grpc_grpclb_serverlist_equals(serverlist_, other.serverlist_);
434
+ return serverlist_ == other.serverlist_;
408
435
  }
409
436
 
410
- void ParseServer(const grpc_grpclb_server* server,
411
- grpc_resolved_address* addr) {
437
+ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
412
438
  memset(addr, 0, sizeof(*addr));
413
- if (server->drop) return;
414
- const uint16_t netorder_port = grpc_htons((uint16_t)server->port);
439
+ if (server.drop) return;
440
+ const uint16_t netorder_port = grpc_htons((uint16_t)server.port);
415
441
  /* the addresses are given in binary format (a in(6)_addr struct) in
416
442
  * server->ip_address.bytes. */
417
- const grpc_grpclb_ip_address* ip = &server->ip_address;
418
- if (ip->size == 4) {
443
+ if (server.ip_size == 4) {
419
444
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
420
445
  grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr);
421
446
  addr4->sin_family = GRPC_AF_INET;
422
- memcpy(&addr4->sin_addr, ip->bytes, ip->size);
447
+ memcpy(&addr4->sin_addr, server.ip_addr, server.ip_size);
423
448
  addr4->sin_port = netorder_port;
424
- } else if (ip->size == 16) {
449
+ } else if (server.ip_size == 16) {
425
450
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
426
451
  grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
427
452
  addr6->sin6_family = GRPC_AF_INET6;
428
- memcpy(&addr6->sin6_addr, ip->bytes, ip->size);
453
+ memcpy(&addr6->sin6_addr, server.ip_addr, server.ip_size);
429
454
  addr6->sin6_port = netorder_port;
430
455
  }
431
456
  }
432
457
 
433
- UniquePtr<char> GrpcLb::Serverlist::AsText() const {
434
- gpr_strvec entries;
435
- gpr_strvec_init(&entries);
436
- for (size_t i = 0; i < serverlist_->num_servers; ++i) {
437
- const auto* server = serverlist_->servers[i];
438
- char* ipport;
439
- if (server->drop) {
440
- ipport = gpr_strdup("(drop)");
458
+ std::string GrpcLb::Serverlist::AsText() const {
459
+ std::vector<std::string> entries;
460
+ for (size_t i = 0; i < serverlist_.size(); ++i) {
461
+ const GrpcLbServer& server = serverlist_[i];
462
+ std::string ipport;
463
+ if (server.drop) {
464
+ ipport = "(drop)";
441
465
  } else {
442
466
  grpc_resolved_address addr;
443
467
  ParseServer(server, &addr);
444
- grpc_sockaddr_to_string(&ipport, &addr, false);
468
+ ipport = grpc_sockaddr_to_string(&addr, false);
445
469
  }
446
- char* entry;
447
- gpr_asprintf(&entry, " %" PRIuPTR ": %s token=%s\n", i, ipport,
448
- server->load_balance_token);
449
- gpr_free(ipport);
450
- gpr_strvec_add(&entries, entry);
470
+ entries.push_back(absl::StrFormat(" %" PRIuPTR ": %s token=%s\n", i,
471
+ ipport, server.load_balance_token));
451
472
  }
452
- UniquePtr<char> result(gpr_strvec_flatten(&entries, nullptr));
453
- gpr_strvec_destroy(&entries);
454
- return result;
473
+ return absl::StrJoin(entries, "");
455
474
  }
456
475
 
457
- // vtable for LB token channel arg.
476
+ // vtables for channel args for LB token and client stats.
458
477
  void* lb_token_copy(void* token) {
459
- return token == nullptr
460
- ? nullptr
461
- : (void*)GRPC_MDELEM_REF(grpc_mdelem{(uintptr_t)token}).payload;
478
+ return gpr_strdup(static_cast<char*>(token));
462
479
  }
463
- void lb_token_destroy(void* token) {
464
- if (token != nullptr) {
465
- GRPC_MDELEM_UNREF(grpc_mdelem{(uintptr_t)token});
466
- }
480
+ void lb_token_destroy(void* token) { gpr_free(token); }
481
+ void* client_stats_copy(void* p) {
482
+ GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
483
+ client_stats->Ref().release();
484
+ return p;
485
+ }
486
+ void client_stats_destroy(void* p) {
487
+ GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
488
+ client_stats->Unref();
467
489
  }
468
- int lb_token_cmp(void* token1, void* token2) {
490
+ int equal_cmp(void* /*p1*/, void* /*p2*/) {
469
491
  // Always indicate a match, since we don't want this channel arg to
470
492
  // affect the subchannel's key in the index.
493
+ // TODO(roth): Is this right? This does prevent us from needlessly
494
+ // recreating the subchannel whenever the LB token or client stats
495
+ // changes (i.e., when the balancer call is terminated and reestablished).
496
+ // However, it means that we don't actually recreate the subchannel,
497
+ // which means that we won't ever switch over to using the new LB
498
+ // token or client stats. A better approach might be to find somewhere
499
+ // other than the subchannel args to store the LB token and client
500
+ // stats. They could be stored in a map and then looked up for each
501
+ // call. Or we could do something more complicated whereby
502
+ // we create our own subchannel wrapper to store them, although that would
503
+ // involve a lot of refcounting overhead.
504
+ // Given that we're trying to move from grpclb to xds at this point,
505
+ // and that no one has actually reported any problems with this, we
506
+ // probably won't bother fixing this at this point.
471
507
  return 0;
472
508
  }
473
509
  const grpc_arg_pointer_vtable lb_token_arg_vtable = {
474
- lb_token_copy, lb_token_destroy, lb_token_cmp};
510
+ lb_token_copy, lb_token_destroy, equal_cmp};
511
+ const grpc_arg_pointer_vtable client_stats_arg_vtable = {
512
+ client_stats_copy, client_stats_destroy, equal_cmp};
475
513
 
476
- bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
477
- if (server->drop) return false;
478
- const grpc_grpclb_ip_address* ip = &server->ip_address;
479
- if (GPR_UNLIKELY(server->port >> 16 != 0)) {
514
+ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
515
+ if (server.drop) return false;
516
+ if (GPR_UNLIKELY(server.port >> 16 != 0)) {
480
517
  if (log) {
481
518
  gpr_log(GPR_ERROR,
482
519
  "Invalid port '%d' at index %lu of serverlist. Ignoring.",
483
- server->port, (unsigned long)idx);
520
+ server.port, (unsigned long)idx);
484
521
  }
485
522
  return false;
486
523
  }
487
- if (GPR_UNLIKELY(ip->size != 4 && ip->size != 16)) {
524
+ if (GPR_UNLIKELY(server.ip_size != 4 && server.ip_size != 16)) {
488
525
  if (log) {
489
526
  gpr_log(GPR_ERROR,
490
527
  "Expected IP to be 4 or 16 bytes, got %d at index %lu of "
491
528
  "serverlist. Ignoring",
492
- ip->size, (unsigned long)idx);
529
+ server.ip_size, (unsigned long)idx);
493
530
  }
494
531
  return false;
495
532
  }
@@ -500,68 +537,66 @@ bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
500
537
  ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
501
538
  GrpcLbClientStats* client_stats) const {
502
539
  ServerAddressList addresses;
503
- for (size_t i = 0; i < serverlist_->num_servers; ++i) {
504
- const grpc_grpclb_server* server = serverlist_->servers[i];
505
- if (!IsServerValid(serverlist_->servers[i], i, false)) continue;
540
+ for (size_t i = 0; i < serverlist_.size(); ++i) {
541
+ const GrpcLbServer& server = serverlist_[i];
542
+ if (!IsServerValid(server, i, false)) continue;
506
543
  // Address processing.
507
544
  grpc_resolved_address addr;
508
545
  ParseServer(server, &addr);
509
546
  // LB token processing.
510
- grpc_mdelem lb_token;
511
- if (server->has_load_balance_token) {
547
+ char lb_token[GPR_ARRAY_SIZE(server.load_balance_token) + 1];
548
+ if (server.load_balance_token[0] != 0) {
512
549
  const size_t lb_token_max_length =
513
- GPR_ARRAY_SIZE(server->load_balance_token);
550
+ GPR_ARRAY_SIZE(server.load_balance_token);
514
551
  const size_t lb_token_length =
515
- strnlen(server->load_balance_token, lb_token_max_length);
516
- grpc_slice lb_token_mdstr = grpc_slice_from_copied_buffer(
517
- server->load_balance_token, lb_token_length);
518
- lb_token = grpc_mdelem_from_slices(GRPC_MDSTR_LB_TOKEN, lb_token_mdstr);
519
- if (client_stats != nullptr) {
520
- GPR_ASSERT(grpc_mdelem_set_user_data(
521
- lb_token, GrpcLbClientStats::Destroy,
522
- client_stats->Ref().release()) == client_stats);
523
- }
552
+ strnlen(server.load_balance_token, lb_token_max_length);
553
+ memcpy(lb_token, server.load_balance_token, lb_token_length);
554
+ lb_token[lb_token_length] = '\0';
524
555
  } else {
525
- char* uri = grpc_sockaddr_to_uri(&addr);
526
556
  gpr_log(GPR_INFO,
527
557
  "Missing LB token for backend address '%s'. The empty token will "
528
558
  "be used instead",
529
- uri);
530
- gpr_free(uri);
531
- lb_token = GRPC_MDELEM_LB_TOKEN_EMPTY;
559
+ grpc_sockaddr_to_uri(&addr).c_str());
560
+ lb_token[0] = '\0';
532
561
  }
533
562
  // Add address.
534
- grpc_arg arg = grpc_channel_arg_pointer_create(
535
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
536
- (void*)lb_token.payload, &lb_token_arg_vtable);
537
- grpc_channel_args* args = grpc_channel_args_copy_and_add(nullptr, &arg, 1);
563
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
564
+ args_to_add.emplace_back(grpc_channel_arg_pointer_create(
565
+ const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
566
+ &lb_token_arg_vtable));
567
+ if (client_stats != nullptr) {
568
+ args_to_add.emplace_back(grpc_channel_arg_pointer_create(
569
+ const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS), client_stats,
570
+ &client_stats_arg_vtable));
571
+ }
572
+ grpc_channel_args* args = grpc_channel_args_copy_and_add(
573
+ nullptr, args_to_add.data(), args_to_add.size());
538
574
  addresses.emplace_back(addr, args);
539
- // Clean up.
540
- GRPC_MDELEM_UNREF(lb_token);
541
575
  }
542
576
  return addresses;
543
577
  }
544
578
 
545
579
  bool GrpcLb::Serverlist::ContainsAllDropEntries() const {
546
- if (serverlist_->num_servers == 0) return false;
547
- for (size_t i = 0; i < serverlist_->num_servers; ++i) {
548
- if (!serverlist_->servers[i]->drop) return false;
580
+ if (serverlist_.empty()) return false;
581
+ for (const GrpcLbServer& server : serverlist_) {
582
+ if (!server.drop) return false;
549
583
  }
550
584
  return true;
551
585
  }
552
586
 
553
587
  const char* GrpcLb::Serverlist::ShouldDrop() {
554
- if (serverlist_->num_servers == 0) return nullptr;
555
- grpc_grpclb_server* server = serverlist_->servers[drop_index_];
556
- drop_index_ = (drop_index_ + 1) % serverlist_->num_servers;
557
- return server->drop ? server->load_balance_token : nullptr;
588
+ if (serverlist_.empty()) return nullptr;
589
+ GrpcLbServer& server = serverlist_[drop_index_];
590
+ drop_index_ = (drop_index_ + 1) % serverlist_.size();
591
+ return server.drop ? server.load_balance_token : nullptr;
558
592
  }
559
593
 
560
594
  //
561
595
  // GrpcLb::Picker
562
596
  //
563
597
 
564
- GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs* pick, grpc_error** error) {
598
+ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
599
+ PickResult result;
565
600
  // Check if we should drop the call.
566
601
  const char* drop_token = serverlist_->ShouldDrop();
567
602
  if (drop_token != nullptr) {
@@ -573,32 +608,43 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs* pick, grpc_error** error) {
573
608
  if (client_stats_ != nullptr) {
574
609
  client_stats_->AddCallDropped(drop_token);
575
610
  }
576
- return PICK_COMPLETE;
611
+ result.type = PickResult::PICK_COMPLETE;
612
+ return result;
577
613
  }
578
614
  // Forward pick to child policy.
579
- PickResult result = child_picker_->Pick(pick, error);
615
+ result = child_picker_->Pick(args);
580
616
  // If pick succeeded, add LB token to initial metadata.
581
- if (result == PickResult::PICK_COMPLETE &&
582
- pick->connected_subchannel != nullptr) {
583
- const grpc_arg* arg = grpc_channel_args_find(
584
- pick->connected_subchannel->args(), GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN);
617
+ if (result.type == PickResult::PICK_COMPLETE &&
618
+ result.subchannel != nullptr) {
619
+ // Encode client stats object into metadata for use by
620
+ // client_load_reporting filter.
621
+ const grpc_arg* arg =
622
+ grpc_channel_args_find(result.subchannel->channel_args(),
623
+ GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS);
624
+ if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
625
+ arg->value.pointer.p != nullptr) {
626
+ GrpcLbClientStats* client_stats =
627
+ static_cast<GrpcLbClientStats*>(arg->value.pointer.p);
628
+ client_stats->Ref().release(); // Ref passed via metadata.
629
+ // The metadata value is a hack: we pretend the pointer points to
630
+ // a string and rely on the client_load_reporting filter to know
631
+ // how to interpret it.
632
+ args.initial_metadata->Add(
633
+ kGrpcLbClientStatsMetadataKey,
634
+ absl::string_view(reinterpret_cast<const char*>(client_stats), 0));
635
+ // Update calls-started.
636
+ client_stats->AddCallStarted();
637
+ }
638
+ // Encode the LB token in metadata.
639
+ arg = grpc_channel_args_find(result.subchannel->channel_args(),
640
+ GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN);
585
641
  if (arg == nullptr) {
586
- gpr_log(GPR_ERROR,
587
- "[grpclb %p picker %p] No LB token for connected subchannel "
588
- "pick %p",
589
- parent_, this, pick);
642
+ gpr_log(GPR_ERROR, "[grpclb %p picker %p] No LB token for subchannel %p",
643
+ parent_, this, result.subchannel.get());
590
644
  abort();
591
645
  }
592
- grpc_mdelem lb_token = {reinterpret_cast<uintptr_t>(arg->value.pointer.p)};
593
- GPR_ASSERT(!GRPC_MDISNULL(lb_token));
594
- GPR_ASSERT(grpc_metadata_batch_add_tail(
595
- pick->initial_metadata, &pick->lb_token_mdelem_storage,
596
- GRPC_MDELEM_REF(lb_token)) == GRPC_ERROR_NONE);
597
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(
598
- grpc_mdelem_get_user_data(lb_token, GrpcLbClientStats::Destroy));
599
- if (client_stats != nullptr) {
600
- client_stats->AddCallStarted();
601
- }
646
+ args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey,
647
+ static_cast<char*>(arg->value.pointer.p));
602
648
  }
603
649
  return result;
604
650
  }
@@ -607,55 +653,16 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs* pick, grpc_error** error) {
607
653
  // GrpcLb::Helper
608
654
  //
609
655
 
610
- bool GrpcLb::Helper::CalledByPendingChild() const {
611
- GPR_ASSERT(child_ != nullptr);
612
- return child_ == parent_->pending_child_policy_.get();
613
- }
614
-
615
- bool GrpcLb::Helper::CalledByCurrentChild() const {
616
- GPR_ASSERT(child_ != nullptr);
617
- return child_ == parent_->child_policy_.get();
618
- }
619
-
620
- Subchannel* GrpcLb::Helper::CreateSubchannel(const grpc_channel_args& args) {
621
- if (parent_->shutting_down_ ||
622
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
623
- return nullptr;
624
- }
656
+ RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
657
+ const grpc_channel_args& args) {
658
+ if (parent_->shutting_down_) return nullptr;
625
659
  return parent_->channel_control_helper()->CreateSubchannel(args);
626
660
  }
627
661
 
628
- grpc_channel* GrpcLb::Helper::CreateChannel(const char* target,
629
- const grpc_channel_args& args) {
630
- if (parent_->shutting_down_ ||
631
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
632
- return nullptr;
633
- }
634
- return parent_->channel_control_helper()->CreateChannel(target, args);
635
- }
636
-
637
662
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
638
- UniquePtr<SubchannelPicker> picker) {
663
+ const absl::Status& status,
664
+ std::unique_ptr<SubchannelPicker> picker) {
639
665
  if (parent_->shutting_down_) return;
640
- // If this request is from the pending child policy, ignore it until
641
- // it reports READY, at which point we swap it into place.
642
- if (CalledByPendingChild()) {
643
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
644
- gpr_log(GPR_INFO,
645
- "[grpclb %p helper %p] pending child policy %p reports state=%s",
646
- parent_.get(), this, parent_->pending_child_policy_.get(),
647
- grpc_connectivity_state_name(state));
648
- }
649
- if (state != GRPC_CHANNEL_READY) return;
650
- grpc_pollset_set_del_pollset_set(
651
- parent_->child_policy_->interested_parties(),
652
- parent_->interested_parties());
653
- MutexLock lock(&parent_->child_policy_mu_);
654
- parent_->child_policy_ = std::move(parent_->pending_child_policy_);
655
- } else if (!CalledByCurrentChild()) {
656
- // This request is from an outdated child, so ignore it.
657
- return;
658
- }
659
666
  // Record whether child policy reports READY.
660
667
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
661
668
  // Enter fallback mode if needed.
@@ -684,18 +691,22 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
684
691
  state != GRPC_CHANNEL_READY)) {
685
692
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
686
693
  gpr_log(GPR_INFO,
687
- "[grpclb %p helper %p] state=%s passing child picker %p as-is",
688
- parent_.get(), this, grpc_connectivity_state_name(state),
689
- picker.get());
694
+ "[grpclb %p helper %p] state=%s (%s) passing "
695
+ "child picker %p as-is",
696
+ parent_.get(), this, ConnectivityStateName(state),
697
+ status.ToString().c_str(), picker.get());
690
698
  }
691
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
699
+ parent_->channel_control_helper()->UpdateState(state, status,
700
+ std::move(picker));
692
701
  return;
693
702
  }
694
703
  // Cases 2 and 3a: wrap picker from the child in our own picker.
695
704
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
696
- gpr_log(GPR_INFO, "[grpclb %p helper %p] state=%s wrapping child picker %p",
697
- parent_.get(), this, grpc_connectivity_state_name(state),
698
- picker.get());
705
+ gpr_log(GPR_INFO,
706
+ "[grpclb %p helper %p] state=%s (%s) wrapping child "
707
+ "picker %p",
708
+ parent_.get(), this, ConnectivityStateName(state),
709
+ status.ToString().c_str(), picker.get());
699
710
  }
700
711
  RefCountedPtr<GrpcLbClientStats> client_stats;
701
712
  if (parent_->lb_calld_ != nullptr &&
@@ -703,23 +714,13 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
703
714
  client_stats = parent_->lb_calld_->client_stats()->Ref();
704
715
  }
705
716
  parent_->channel_control_helper()->UpdateState(
706
- state, UniquePtr<SubchannelPicker>(
707
- New<Picker>(parent_.get(), parent_->serverlist_,
708
- std::move(picker), std::move(client_stats))));
717
+ state, status,
718
+ absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
719
+ std::move(picker), std::move(client_stats)));
709
720
  }
710
721
 
711
722
  void GrpcLb::Helper::RequestReresolution() {
712
723
  if (parent_->shutting_down_) return;
713
- const LoadBalancingPolicy* latest_child_policy =
714
- parent_->pending_child_policy_ != nullptr
715
- ? parent_->pending_child_policy_.get()
716
- : parent_->child_policy_.get();
717
- if (child_ != latest_child_policy) return;
718
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
719
- gpr_log(GPR_INFO,
720
- "[grpclb %p] Re-resolution requested from %schild policy (%p).",
721
- parent_.get(), CalledByPendingChild() ? "pending " : "", child_);
722
- }
723
724
  // If we are talking to a balancer, we expect to get updated addresses
724
725
  // from the balancer, so we can ignore the re-resolution request from
725
726
  // the child policy. Otherwise, pass the re-resolution request up to the
@@ -730,6 +731,12 @@ void GrpcLb::Helper::RequestReresolution() {
730
731
  }
731
732
  }
732
733
 
734
+ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
735
+ absl::string_view message) {
736
+ if (parent_->shutting_down_) return;
737
+ parent_->channel_control_helper()->AddTraceEvent(severity, message);
738
+ }
739
+
733
740
  //
734
741
  // GrpcLb::BalancerCallState
735
742
  //
@@ -745,6 +752,15 @@ GrpcLb::BalancerCallState::BalancerCallState(
745
752
  // the polling entities from client_channel.
746
753
  GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
747
754
  GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
755
+ // Closure Initialization
756
+ GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
757
+ grpc_schedule_on_exec_ctx);
758
+ GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
759
+ OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
760
+ GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
761
+ this, grpc_schedule_on_exec_ctx);
762
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
763
+ this, grpc_schedule_on_exec_ctx);
748
764
  const grpc_millis deadline =
749
765
  grpclb_policy()->lb_call_timeout_ms_ == 0
750
766
  ? GRPC_MILLIS_INF_FUTURE
@@ -755,24 +771,18 @@ GrpcLb::BalancerCallState::BalancerCallState(
755
771
  GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD,
756
772
  nullptr, deadline, nullptr);
757
773
  // Init the LB call request payload.
758
- grpc_grpclb_request* request =
759
- grpc_grpclb_request_create(grpclb_policy()->server_name_);
760
- grpc_slice request_payload_slice = grpc_grpclb_request_encode(request);
774
+ upb::Arena arena;
775
+ grpc_slice request_payload_slice = GrpcLbRequestCreate(
776
+ grpclb_policy()->config_->service_name().empty()
777
+ ? grpclb_policy()->server_name_
778
+ : grpclb_policy()->config_->service_name().c_str(),
779
+ arena.ptr());
761
780
  send_message_payload_ =
762
781
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
763
782
  grpc_slice_unref_internal(request_payload_slice);
764
- grpc_grpclb_request_destroy(request);
765
783
  // Init other data associated with the LB call.
766
784
  grpc_metadata_array_init(&lb_initial_metadata_recv_);
767
785
  grpc_metadata_array_init(&lb_trailing_metadata_recv_);
768
- GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSentLocked,
769
- this, grpc_combiner_scheduler(grpclb_policy()->combiner()));
770
- GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
771
- OnBalancerMessageReceivedLocked, this,
772
- grpc_combiner_scheduler(grpclb_policy()->combiner()));
773
- GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_,
774
- OnBalancerStatusReceivedLocked, this,
775
- grpc_combiner_scheduler(grpclb_policy()->combiner()));
776
786
  }
777
787
 
778
788
  GrpcLb::BalancerCallState::~BalancerCallState() {
@@ -791,7 +801,7 @@ void GrpcLb::BalancerCallState::Orphan() {
791
801
  // lb_on_balancer_status_received_ will complete the cancellation and clean
792
802
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
793
803
  // call, then the following cancellation will be a no-op.
794
- grpc_call_cancel(lb_call_, nullptr);
804
+ grpc_call_cancel_internal(lb_call_);
795
805
  if (client_load_report_timer_callback_pending_) {
796
806
  grpc_timer_cancel(&client_load_report_timer_);
797
807
  }
@@ -876,56 +886,59 @@ void GrpcLb::BalancerCallState::StartQuery() {
876
886
  void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
877
887
  const grpc_millis next_client_load_report_time =
878
888
  ExecCtx::Get()->Now() + client_stats_report_interval_;
879
- GRPC_CLOSURE_INIT(&client_load_report_closure_,
880
- MaybeSendClientLoadReportLocked, this,
881
- grpc_combiner_scheduler(grpclb_policy()->combiner()));
889
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
890
+ this, grpc_schedule_on_exec_ctx);
882
891
  grpc_timer_init(&client_load_report_timer_, next_client_load_report_time,
883
892
  &client_load_report_closure_);
884
893
  client_load_report_timer_callback_pending_ = true;
885
894
  }
886
895
 
887
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
888
- void* arg, grpc_error* error) {
896
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(void* arg,
897
+ grpc_error* error) {
889
898
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
890
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
891
- lb_calld->client_load_report_timer_callback_pending_ = false;
892
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
893
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
899
+ GRPC_ERROR_REF(error); // ref owned by lambda
900
+ lb_calld->grpclb_policy()->work_serializer()->Run(
901
+ [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
902
+ DEBUG_LOCATION);
903
+ }
904
+
905
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
906
+ grpc_error* error) {
907
+ client_load_report_timer_callback_pending_ = false;
908
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
909
+ Unref(DEBUG_LOCATION, "client_load_report");
910
+ GRPC_ERROR_UNREF(error);
894
911
  return;
895
912
  }
896
913
  // If we've already sent the initial request, then we can go ahead and send
897
914
  // the load report. Otherwise, we need to wait until the initial request has
898
915
  // been sent to send this (see OnInitialRequestSentLocked()).
899
- if (lb_calld->send_message_payload_ == nullptr) {
900
- lb_calld->SendClientLoadReportLocked();
916
+ if (send_message_payload_ == nullptr) {
917
+ SendClientLoadReportLocked();
901
918
  } else {
902
- lb_calld->client_load_report_is_due_ = true;
919
+ client_load_report_is_due_ = true;
903
920
  }
904
921
  }
905
922
 
906
- bool GrpcLb::BalancerCallState::LoadReportCountersAreZero(
907
- grpc_grpclb_request* request) {
908
- GrpcLbClientStats::DroppedCallCounts* drop_entries =
909
- static_cast<GrpcLbClientStats::DroppedCallCounts*>(
910
- request->client_stats.calls_finished_with_drop.arg);
911
- return request->client_stats.num_calls_started == 0 &&
912
- request->client_stats.num_calls_finished == 0 &&
913
- request->client_stats.num_calls_finished_with_client_failed_to_send ==
914
- 0 &&
915
- request->client_stats.num_calls_finished_known_received == 0 &&
916
- (drop_entries == nullptr || drop_entries->size() == 0);
917
- }
918
-
919
923
  void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
920
924
  // Construct message payload.
921
925
  GPR_ASSERT(send_message_payload_ == nullptr);
922
- grpc_grpclb_request* request =
923
- grpc_grpclb_load_report_request_create(client_stats_.get());
926
+ // Get snapshot of stats.
927
+ int64_t num_calls_started;
928
+ int64_t num_calls_finished;
929
+ int64_t num_calls_finished_with_client_failed_to_send;
930
+ int64_t num_calls_finished_known_received;
931
+ std::unique_ptr<GrpcLbClientStats::DroppedCallCounts> drop_token_counts;
932
+ client_stats_->Get(&num_calls_started, &num_calls_finished,
933
+ &num_calls_finished_with_client_failed_to_send,
934
+ &num_calls_finished_known_received, &drop_token_counts);
924
935
  // Skip client load report if the counters were all zero in the last
925
936
  // report and they are still zero in this one.
926
- if (LoadReportCountersAreZero(request)) {
937
+ if (num_calls_started == 0 && num_calls_finished == 0 &&
938
+ num_calls_finished_with_client_failed_to_send == 0 &&
939
+ num_calls_finished_known_received == 0 &&
940
+ (drop_token_counts == nullptr || drop_token_counts->size() == 0)) {
927
941
  if (last_client_load_report_counters_were_zero_) {
928
- grpc_grpclb_request_destroy(request);
929
942
  ScheduleNextClientLoadReportLocked();
930
943
  return;
931
944
  }
@@ -933,18 +946,22 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
933
946
  } else {
934
947
  last_client_load_report_counters_were_zero_ = false;
935
948
  }
936
- grpc_slice request_payload_slice = grpc_grpclb_request_encode(request);
949
+ // Populate load report.
950
+ upb::Arena arena;
951
+ grpc_slice request_payload_slice = GrpcLbLoadReportRequestCreate(
952
+ num_calls_started, num_calls_finished,
953
+ num_calls_finished_with_client_failed_to_send,
954
+ num_calls_finished_known_received, drop_token_counts.get(), arena.ptr());
937
955
  send_message_payload_ =
938
956
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
939
957
  grpc_slice_unref_internal(request_payload_slice);
940
- grpc_grpclb_request_destroy(request);
941
958
  // Send the report.
942
959
  grpc_op op;
943
960
  memset(&op, 0, sizeof(op));
944
961
  op.op = GRPC_OP_SEND_MESSAGE;
945
962
  op.data.send_message.send_message = send_message_payload_;
946
- GRPC_CLOSURE_INIT(&client_load_report_closure_, ClientLoadReportDoneLocked,
947
- this, grpc_combiner_scheduler(grpclb_policy()->combiner()));
963
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, ClientLoadReportDone, this,
964
+ grpc_schedule_on_exec_ctx);
948
965
  grpc_call_error call_error = grpc_call_start_batch_and_execute(
949
966
  lb_call_, &op, 1, &client_load_report_closure_);
950
967
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
@@ -955,252 +972,278 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
955
972
  }
956
973
  }
957
974
 
958
- void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(void* arg,
959
- grpc_error* error) {
975
+ void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
976
+ grpc_error* error) {
960
977
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
961
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
962
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
963
- lb_calld->send_message_payload_ = nullptr;
964
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
965
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
978
+ GRPC_ERROR_REF(error); // ref owned by lambda
979
+ lb_calld->grpclb_policy()->work_serializer()->Run(
980
+ [lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
981
+ DEBUG_LOCATION);
982
+ }
983
+
984
+ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(grpc_error* error) {
985
+ grpc_byte_buffer_destroy(send_message_payload_);
986
+ send_message_payload_ = nullptr;
987
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
988
+ Unref(DEBUG_LOCATION, "client_load_report");
989
+ GRPC_ERROR_UNREF(error);
966
990
  return;
967
991
  }
968
- lb_calld->ScheduleNextClientLoadReportLocked();
992
+ ScheduleNextClientLoadReportLocked();
969
993
  }
970
994
 
971
- void GrpcLb::BalancerCallState::OnInitialRequestSentLocked(void* arg,
972
- grpc_error* error) {
995
+ void GrpcLb::BalancerCallState::OnInitialRequestSent(void* arg,
996
+ grpc_error* /*error*/) {
973
997
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
974
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
975
- lb_calld->send_message_payload_ = nullptr;
998
+ lb_calld->grpclb_policy()->work_serializer()->Run(
999
+ [lb_calld]() { lb_calld->OnInitialRequestSentLocked(); }, DEBUG_LOCATION);
1000
+ }
1001
+
1002
+ void GrpcLb::BalancerCallState::OnInitialRequestSentLocked() {
1003
+ grpc_byte_buffer_destroy(send_message_payload_);
1004
+ send_message_payload_ = nullptr;
976
1005
  // If we attempted to send a client load report before the initial request was
977
1006
  // sent (and this lb_calld is still in use), send the load report now.
978
- if (lb_calld->client_load_report_is_due_ &&
979
- lb_calld == lb_calld->grpclb_policy()->lb_calld_.get()) {
980
- lb_calld->SendClientLoadReportLocked();
981
- lb_calld->client_load_report_is_due_ = false;
1007
+ if (client_load_report_is_due_ && this == grpclb_policy()->lb_calld_.get()) {
1008
+ SendClientLoadReportLocked();
1009
+ client_load_report_is_due_ = false;
982
1010
  }
983
- lb_calld->Unref(DEBUG_LOCATION, "on_initial_request_sent");
1011
+ Unref(DEBUG_LOCATION, "on_initial_request_sent");
984
1012
  }
985
1013
 
986
- void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
987
- void* arg, grpc_error* error) {
1014
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
1015
+ void* arg, grpc_error* /*error*/) {
988
1016
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
989
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1017
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1018
+ [lb_calld]() { lb_calld->OnBalancerMessageReceivedLocked(); },
1019
+ DEBUG_LOCATION);
1020
+ }
1021
+
1022
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
990
1023
  // Null payload means the LB call was cancelled.
991
- if (lb_calld != grpclb_policy->lb_calld_.get() ||
992
- lb_calld->recv_message_payload_ == nullptr) {
993
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received");
1024
+ if (this != grpclb_policy()->lb_calld_.get() ||
1025
+ recv_message_payload_ == nullptr) {
1026
+ Unref(DEBUG_LOCATION, "on_message_received");
994
1027
  return;
995
1028
  }
996
1029
  grpc_byte_buffer_reader bbr;
997
- grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_);
1030
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
998
1031
  grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
999
1032
  grpc_byte_buffer_reader_destroy(&bbr);
1000
- grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
1001
- lb_calld->recv_message_payload_ = nullptr;
1002
- grpc_grpclb_initial_response* initial_response;
1003
- grpc_grpclb_serverlist* serverlist;
1004
- if (!lb_calld->seen_initial_response_ &&
1005
- (initial_response = grpc_grpclb_initial_response_parse(response_slice)) !=
1006
- nullptr) {
1007
- // Have NOT seen initial response, look for initial response.
1008
- if (initial_response->has_client_stats_report_interval) {
1009
- lb_calld->client_stats_report_interval_ = GPR_MAX(
1010
- GPR_MS_PER_SEC, grpc_grpclb_duration_to_millis(
1011
- &initial_response->client_stats_report_interval));
1012
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1013
- gpr_log(GPR_INFO,
1014
- "[grpclb %p] lb_calld=%p: Received initial LB response "
1015
- "message; client load reporting interval = %" PRId64
1016
- " milliseconds",
1017
- grpclb_policy, lb_calld,
1018
- lb_calld->client_stats_report_interval_);
1019
- }
1020
- } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1021
- gpr_log(GPR_INFO,
1022
- "[grpclb %p] lb_calld=%p: Received initial LB response message; "
1023
- "client load reporting NOT enabled",
1024
- grpclb_policy, lb_calld);
1025
- }
1026
- grpc_grpclb_initial_response_destroy(initial_response);
1027
- lb_calld->seen_initial_response_ = true;
1028
- } else if ((serverlist = grpc_grpclb_response_parse_serverlist(
1029
- response_slice)) != nullptr) {
1030
- // Have seen initial response, look for serverlist.
1031
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1032
- auto serverlist_wrapper = MakeRefCounted<Serverlist>(serverlist);
1033
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1034
- UniquePtr<char> serverlist_text = serverlist_wrapper->AsText();
1035
- gpr_log(GPR_INFO,
1036
- "[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
1037
- " servers received:\n%s",
1038
- grpclb_policy, lb_calld, serverlist->num_servers,
1039
- serverlist_text.get());
1040
- }
1041
- lb_calld->seen_serverlist_ = true;
1042
- // Start sending client load report only after we start using the
1043
- // serverlist returned from the current LB call.
1044
- if (lb_calld->client_stats_report_interval_ > 0 &&
1045
- lb_calld->client_stats_ == nullptr) {
1046
- lb_calld->client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1047
- // Ref held by callback.
1048
- lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release();
1049
- lb_calld->ScheduleNextClientLoadReportLocked();
1050
- }
1051
- // Check if the serverlist differs from the previous one.
1052
- if (grpclb_policy->serverlist_ != nullptr &&
1053
- *grpclb_policy->serverlist_ == *serverlist_wrapper) {
1054
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1055
- gpr_log(GPR_INFO,
1056
- "[grpclb %p] lb_calld=%p: Incoming server list identical to "
1057
- "current, ignoring.",
1058
- grpclb_policy, lb_calld);
1059
- }
1060
- } else { // New serverlist.
1061
- // Dispose of the fallback.
1062
- // TODO(roth): Ideally, we should stay in fallback mode until we
1063
- // know that we can reach at least one of the backends in the new
1064
- // serverlist. Unfortunately, we can't do that, since we need to
1065
- // send the new addresses to the child policy in order to determine
1066
- // if they are reachable, and if we don't exit fallback mode now,
1067
- // CreateOrUpdateChildPolicyLocked() will use the fallback
1068
- // addresses instead of the addresses from the new serverlist.
1069
- // However, if we can't reach any of the servers in the new
1070
- // serverlist, then the child policy will never switch away from
1071
- // the fallback addresses, but the grpclb policy will still think
1072
- // that we're not in fallback mode, which means that we won't send
1073
- // updates to the child policy when the fallback addresses are
1074
- // updated by the resolver. This is sub-optimal, but the only way
1075
- // to fix it is to maintain a completely separate child policy for
1076
- // fallback mode, and that's more work than we want to put into
1077
- // the grpclb implementation at this point, since we're deprecating
1078
- // it in favor of the xds policy. We will implement this the
1079
- // right way in the xds policy instead.
1080
- if (grpclb_policy->fallback_mode_) {
1081
- gpr_log(GPR_INFO,
1082
- "[grpclb %p] Received response from balancer; exiting "
1083
- "fallback mode",
1084
- grpclb_policy);
1085
- grpclb_policy->fallback_mode_ = false;
1086
- }
1087
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1088
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1089
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1090
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1091
- }
1092
- // Update the serverlist in the GrpcLb instance. This serverlist
1093
- // instance will be destroyed either upon the next update or when the
1094
- // GrpcLb instance is destroyed.
1095
- grpclb_policy->serverlist_ = std::move(serverlist_wrapper);
1096
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1097
- }
1098
- } else {
1099
- // No valid initial response or serverlist found.
1033
+ grpc_byte_buffer_destroy(recv_message_payload_);
1034
+ recv_message_payload_ = nullptr;
1035
+ GrpcLbResponse response;
1036
+ upb::Arena arena;
1037
+ if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
1038
+ (response.type == response.INITIAL && seen_initial_response_)) {
1100
1039
  char* response_slice_str =
1101
1040
  grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1102
1041
  gpr_log(GPR_ERROR,
1103
1042
  "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1104
1043
  "Ignoring.",
1105
- grpclb_policy, lb_calld, response_slice_str);
1044
+ grpclb_policy(), this, response_slice_str);
1106
1045
  gpr_free(response_slice_str);
1046
+ } else {
1047
+ switch (response.type) {
1048
+ case response.INITIAL: {
1049
+ if (response.client_stats_report_interval != 0) {
1050
+ client_stats_report_interval_ =
1051
+ GPR_MAX(GPR_MS_PER_SEC, response.client_stats_report_interval);
1052
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1053
+ gpr_log(GPR_INFO,
1054
+ "[grpclb %p] lb_calld=%p: Received initial LB response "
1055
+ "message; client load reporting interval = %" PRId64
1056
+ " milliseconds",
1057
+ grpclb_policy(), this, client_stats_report_interval_);
1058
+ }
1059
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1060
+ gpr_log(GPR_INFO,
1061
+ "[grpclb %p] lb_calld=%p: Received initial LB response "
1062
+ "message; client load reporting NOT enabled",
1063
+ grpclb_policy(), this);
1064
+ }
1065
+ seen_initial_response_ = true;
1066
+ break;
1067
+ }
1068
+ case response.SERVERLIST: {
1069
+ GPR_ASSERT(lb_call_ != nullptr);
1070
+ auto serverlist_wrapper =
1071
+ MakeRefCounted<Serverlist>(std::move(response.serverlist));
1072
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1073
+ gpr_log(GPR_INFO,
1074
+ "[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
1075
+ " servers received:\n%s",
1076
+ grpclb_policy(), this,
1077
+ serverlist_wrapper->serverlist().size(),
1078
+ serverlist_wrapper->AsText().c_str());
1079
+ }
1080
+ seen_serverlist_ = true;
1081
+ // Start sending client load report only after we start using the
1082
+ // serverlist returned from the current LB call.
1083
+ if (client_stats_report_interval_ > 0 && client_stats_ == nullptr) {
1084
+ client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1085
+ // Ref held by callback.
1086
+ Ref(DEBUG_LOCATION, "client_load_report").release();
1087
+ ScheduleNextClientLoadReportLocked();
1088
+ }
1089
+ // Check if the serverlist differs from the previous one.
1090
+ if (grpclb_policy()->serverlist_ != nullptr &&
1091
+ *grpclb_policy()->serverlist_ == *serverlist_wrapper) {
1092
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1093
+ gpr_log(GPR_INFO,
1094
+ "[grpclb %p] lb_calld=%p: Incoming server list identical "
1095
+ "to current, ignoring.",
1096
+ grpclb_policy(), this);
1097
+ }
1098
+ } else { // New serverlist.
1099
+ // Dispose of the fallback.
1100
+ // TODO(roth): Ideally, we should stay in fallback mode until we
1101
+ // know that we can reach at least one of the backends in the new
1102
+ // serverlist. Unfortunately, we can't do that, since we need to
1103
+ // send the new addresses to the child policy in order to determine
1104
+ // if they are reachable, and if we don't exit fallback mode now,
1105
+ // CreateOrUpdateChildPolicyLocked() will use the fallback
1106
+ // addresses instead of the addresses from the new serverlist.
1107
+ // However, if we can't reach any of the servers in the new
1108
+ // serverlist, then the child policy will never switch away from
1109
+ // the fallback addresses, but the grpclb policy will still think
1110
+ // that we're not in fallback mode, which means that we won't send
1111
+ // updates to the child policy when the fallback addresses are
1112
+ // updated by the resolver. This is sub-optimal, but the only way
1113
+ // to fix it is to maintain a completely separate child policy for
1114
+ // fallback mode, and that's more work than we want to put into
1115
+ // the grpclb implementation at this point, since we're deprecating
1116
+ // it in favor of the xds policy. We will implement this the
1117
+ // right way in the xds policy instead.
1118
+ if (grpclb_policy()->fallback_mode_) {
1119
+ gpr_log(GPR_INFO,
1120
+ "[grpclb %p] Received response from balancer; exiting "
1121
+ "fallback mode",
1122
+ grpclb_policy());
1123
+ grpclb_policy()->fallback_mode_ = false;
1124
+ }
1125
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1126
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1127
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1128
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1129
+ }
1130
+ // Update the serverlist in the GrpcLb instance. This serverlist
1131
+ // instance will be destroyed either upon the next update or when the
1132
+ // GrpcLb instance is destroyed.
1133
+ grpclb_policy()->serverlist_ = std::move(serverlist_wrapper);
1134
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1135
+ }
1136
+ break;
1137
+ }
1138
+ case response.FALLBACK: {
1139
+ if (!grpclb_policy()->fallback_mode_) {
1140
+ gpr_log(GPR_INFO,
1141
+ "[grpclb %p] Entering fallback mode as requested by balancer",
1142
+ grpclb_policy());
1143
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1144
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1145
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1146
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1147
+ }
1148
+ grpclb_policy()->fallback_mode_ = true;
1149
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1150
+ // Reset serverlist, so that if the balancer exits fallback
1151
+ // mode by sending the same serverlist we were previously
1152
+ // using, we don't incorrectly ignore it as a duplicate.
1153
+ grpclb_policy()->serverlist_.reset();
1154
+ }
1155
+ break;
1156
+ }
1157
+ }
1107
1158
  }
1108
1159
  grpc_slice_unref_internal(response_slice);
1109
- if (!grpclb_policy->shutting_down_) {
1160
+ if (!grpclb_policy()->shutting_down_) {
1110
1161
  // Keep listening for serverlist updates.
1111
1162
  grpc_op op;
1112
1163
  memset(&op, 0, sizeof(op));
1113
1164
  op.op = GRPC_OP_RECV_MESSAGE;
1114
- op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
1165
+ op.data.recv_message.recv_message = &recv_message_payload_;
1115
1166
  op.flags = 0;
1116
1167
  op.reserved = nullptr;
1117
1168
  // Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
1118
1169
  const grpc_call_error call_error = grpc_call_start_batch_and_execute(
1119
- lb_calld->lb_call_, &op, 1,
1120
- &lb_calld->lb_on_balancer_message_received_);
1170
+ lb_call_, &op, 1, &lb_on_balancer_message_received_);
1121
1171
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1122
1172
  } else {
1123
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1173
+ Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1124
1174
  }
1125
1175
  }
1126
1176
 
1127
- void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1128
- void* arg, grpc_error* error) {
1177
+ void GrpcLb::BalancerCallState::OnBalancerStatusReceived(void* arg,
1178
+ grpc_error* error) {
1129
1179
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1130
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1131
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1180
+ GRPC_ERROR_REF(error); // owned by lambda
1181
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1182
+ [lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
1183
+ DEBUG_LOCATION);
1184
+ }
1185
+
1186
+ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1187
+ grpc_error* error) {
1188
+ GPR_ASSERT(lb_call_ != nullptr);
1132
1189
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1133
- char* status_details =
1134
- grpc_slice_to_c_string(lb_calld->lb_call_status_details_);
1190
+ char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
1135
1191
  gpr_log(GPR_INFO,
1136
1192
  "[grpclb %p] lb_calld=%p: Status from LB server received. "
1137
1193
  "Status = %d, details = '%s', (lb_call: %p), error '%s'",
1138
- grpclb_policy, lb_calld, lb_calld->lb_call_status_, status_details,
1139
- lb_calld->lb_call_, grpc_error_string(error));
1194
+ grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
1195
+ grpc_error_string(error));
1140
1196
  gpr_free(status_details);
1141
1197
  }
1198
+ GRPC_ERROR_UNREF(error);
1142
1199
  // If this lb_calld is still in use, this call ended because of a failure so
1143
1200
  // we want to retry connecting. Otherwise, we have deliberately ended this
1144
1201
  // call and no further action is required.
1145
- if (lb_calld == grpclb_policy->lb_calld_.get()) {
1202
+ if (this == grpclb_policy()->lb_calld_.get()) {
1146
1203
  // If the fallback-at-startup checks are pending, go into fallback mode
1147
1204
  // immediately. This short-circuits the timeout for the fallback-at-startup
1148
1205
  // case.
1149
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1150
- GPR_ASSERT(!lb_calld->seen_serverlist_);
1206
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1207
+ GPR_ASSERT(!seen_serverlist_);
1151
1208
  gpr_log(GPR_INFO,
1152
1209
  "[grpclb %p] Balancer call finished without receiving "
1153
1210
  "serverlist; entering fallback mode",
1154
- grpclb_policy);
1155
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1156
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1157
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1158
- grpclb_policy->fallback_mode_ = true;
1159
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1211
+ grpclb_policy());
1212
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1213
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1214
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1215
+ grpclb_policy()->fallback_mode_ = true;
1216
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1160
1217
  } else {
1161
1218
  // This handles the fallback-after-startup case.
1162
- grpclb_policy->MaybeEnterFallbackModeAfterStartup();
1219
+ grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
1163
1220
  }
1164
- grpclb_policy->lb_calld_.reset();
1165
- GPR_ASSERT(!grpclb_policy->shutting_down_);
1166
- grpclb_policy->channel_control_helper()->RequestReresolution();
1167
- if (lb_calld->seen_initial_response_) {
1221
+ grpclb_policy()->lb_calld_.reset();
1222
+ GPR_ASSERT(!grpclb_policy()->shutting_down_);
1223
+ grpclb_policy()->channel_control_helper()->RequestReresolution();
1224
+ if (seen_initial_response_) {
1168
1225
  // If we lose connection to the LB server, reset the backoff and restart
1169
1226
  // the LB call immediately.
1170
- grpclb_policy->lb_call_backoff_.Reset();
1171
- grpclb_policy->StartBalancerCallLocked();
1227
+ grpclb_policy()->lb_call_backoff_.Reset();
1228
+ grpclb_policy()->StartBalancerCallLocked();
1172
1229
  } else {
1173
1230
  // If this LB call fails establishing any connection to the LB server,
1174
1231
  // retry later.
1175
- grpclb_policy->StartBalancerCallRetryTimerLocked();
1232
+ grpclb_policy()->StartBalancerCallRetryTimerLocked();
1176
1233
  }
1177
1234
  }
1178
- lb_calld->Unref(DEBUG_LOCATION, "lb_call_ended");
1235
+ Unref(DEBUG_LOCATION, "lb_call_ended");
1179
1236
  }
1180
1237
 
1181
1238
  //
1182
1239
  // helper code for creating balancer channel
1183
1240
  //
1184
1241
 
1185
- ServerAddressList ExtractBalancerAddresses(const ServerAddressList& addresses) {
1186
- ServerAddressList balancer_addresses;
1187
- for (size_t i = 0; i < addresses.size(); ++i) {
1188
- if (addresses[i].IsBalancer()) {
1189
- // Strip out the is_balancer channel arg, since we don't want to
1190
- // recursively use the grpclb policy in the channel used to talk to
1191
- // the balancers. Note that we do NOT strip out the balancer_name
1192
- // channel arg, since we need that to set the authority correctly
1193
- // to talk to the balancers.
1194
- static const char* args_to_remove[] = {
1195
- GRPC_ARG_ADDRESS_IS_BALANCER,
1196
- };
1197
- balancer_addresses.emplace_back(
1198
- addresses[i].address(),
1199
- grpc_channel_args_copy_and_remove(addresses[i].args(), args_to_remove,
1200
- GPR_ARRAY_SIZE(args_to_remove)));
1201
- }
1202
- }
1203
- return balancer_addresses;
1242
+ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1243
+ const ServerAddressList* addresses =
1244
+ FindGrpclbBalancerAddressesInChannelArgs(args);
1245
+ if (addresses != nullptr) return *addresses;
1246
+ return ServerAddressList();
1204
1247
  }
1205
1248
 
1206
1249
  /* Returns the channel args for the LB channel, used to create a bidirectional
@@ -1232,34 +1275,43 @@ grpc_channel_args* BuildBalancerChannelArgs(
1232
1275
  // the LB channel.
1233
1276
  GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR,
1234
1277
  // The LB channel should use the authority indicated by the target
1235
- // authority table (see \a grpc_lb_policy_grpclb_modify_lb_channel_args),
1278
+ // authority table (see \a ModifyGrpclbBalancerChannelArgs),
1236
1279
  // as opposed to the authority from the parent channel.
1237
1280
  GRPC_ARG_DEFAULT_AUTHORITY,
1238
1281
  // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the LB channel should be
1239
1282
  // treated as a stand-alone channel and not inherit this argument from the
1240
1283
  // args of the parent channel.
1241
1284
  GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
1285
+ // Don't want to pass down channelz node from parent; the balancer
1286
+ // channel will get its own.
1287
+ GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1242
1288
  };
1243
1289
  // Channel args to add.
1244
- const grpc_arg args_to_add[] = {
1245
- // The fake resolver response generator, which we use to inject
1246
- // address updates into the LB channel.
1290
+ absl::InlinedVector<grpc_arg, 3> args_to_add;
1291
+ // The fake resolver response generator, which we use to inject
1292
+ // address updates into the LB channel.
1293
+ args_to_add.emplace_back(
1247
1294
  grpc_core::FakeResolverResponseGenerator::MakeChannelArg(
1248
- response_generator),
1249
- // A channel arg indicating the target is a grpclb load balancer.
1250
- grpc_channel_arg_integer_create(
1251
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1252
- // A channel arg indicating this is an internal channels, aka it is
1253
- // owned by components in Core, not by the user application.
1254
- grpc_channel_arg_integer_create(
1255
- const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_IS_INTERNAL_CHANNEL), 1),
1256
- };
1295
+ response_generator));
1296
+ // A channel arg indicating the target is a grpclb load balancer.
1297
+ args_to_add.emplace_back(grpc_channel_arg_integer_create(
1298
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1));
1299
+ // The parent channel's channelz uuid.
1300
+ channelz::ChannelNode* channelz_node = nullptr;
1301
+ const grpc_arg* arg =
1302
+ grpc_channel_args_find(args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1303
+ if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
1304
+ arg->value.pointer.p != nullptr) {
1305
+ channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
1306
+ args_to_add.emplace_back(
1307
+ channelz::MakeParentUuidArg(channelz_node->uuid()));
1308
+ }
1257
1309
  // Construct channel args.
1258
1310
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1259
- args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add,
1260
- GPR_ARRAY_SIZE(args_to_add));
1311
+ args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
1312
+ args_to_add.size());
1261
1313
  // Make any necessary modifications for security.
1262
- return grpc_lb_policy_grpclb_modify_lb_channel_args(addresses, new_args);
1314
+ return ModifyGrpclbBalancerChannelArgs(addresses, new_args);
1263
1315
  }
1264
1316
 
1265
1317
  //
@@ -1277,13 +1329,11 @@ GrpcLb::GrpcLb(Args args)
1277
1329
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1278
1330
  .set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
1279
1331
  1000)) {
1280
- // Initialization.
1281
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimerLocked, this,
1282
- grpc_combiner_scheduler(combiner()));
1283
- GRPC_CLOSURE_INIT(&lb_channel_on_connectivity_changed_,
1284
- &GrpcLb::OnBalancerChannelConnectivityChangedLocked, this,
1285
- grpc_combiner_scheduler(args.combiner));
1286
- gpr_mu_init(&child_policy_mu_);
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);
1287
1337
  // Record server name.
1288
1338
  const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
1289
1339
  const char* server_uri = grpc_channel_arg_get_string(arg);
@@ -1309,7 +1359,6 @@ GrpcLb::GrpcLb(Args args)
1309
1359
  GrpcLb::~GrpcLb() {
1310
1360
  gpr_free((void*)server_name_);
1311
1361
  grpc_channel_args_destroy(args_);
1312
- gpr_mu_destroy(&child_policy_mu_);
1313
1362
  }
1314
1363
 
1315
1364
  void GrpcLb::ShutdownLocked() {
@@ -1319,21 +1368,14 @@ void GrpcLb::ShutdownLocked() {
1319
1368
  grpc_timer_cancel(&lb_call_retry_timer_);
1320
1369
  }
1321
1370
  if (fallback_at_startup_checks_pending_) {
1371
+ fallback_at_startup_checks_pending_ = false;
1322
1372
  grpc_timer_cancel(&lb_fallback_timer_);
1323
1373
  CancelBalancerChannelConnectivityWatchLocked();
1324
1374
  }
1325
1375
  if (child_policy_ != nullptr) {
1326
1376
  grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
1327
1377
  interested_parties());
1328
- }
1329
- if (pending_child_policy_ != nullptr) {
1330
- grpc_pollset_set_del_pollset_set(
1331
- pending_child_policy_->interested_parties(), interested_parties());
1332
- }
1333
- {
1334
- MutexLock lock(&child_policy_mu_);
1335
1378
  child_policy_.reset();
1336
- pending_child_policy_.reset();
1337
1379
  }
1338
1380
  // We destroy the LB channel here instead of in our destructor because
1339
1381
  // destroying the channel triggers a last callback to
@@ -1342,7 +1384,6 @@ void GrpcLb::ShutdownLocked() {
1342
1384
  if (lb_channel_ != nullptr) {
1343
1385
  grpc_channel_destroy(lb_channel_);
1344
1386
  lb_channel_ = nullptr;
1345
- gpr_atm_no_barrier_store(&lb_channel_uuid_, 0);
1346
1387
  }
1347
1388
  }
1348
1389
 
@@ -1357,43 +1398,12 @@ void GrpcLb::ResetBackoffLocked() {
1357
1398
  if (child_policy_ != nullptr) {
1358
1399
  child_policy_->ResetBackoffLocked();
1359
1400
  }
1360
- if (pending_child_policy_ != nullptr) {
1361
- pending_child_policy_->ResetBackoffLocked();
1362
- }
1363
- }
1364
-
1365
- void GrpcLb::FillChildRefsForChannelz(
1366
- channelz::ChildRefsList* child_subchannels,
1367
- channelz::ChildRefsList* child_channels) {
1368
- {
1369
- // Delegate to the child policy to fill the children subchannels.
1370
- // This must be done holding child_policy_mu_, since this method
1371
- // does not run in the combiner.
1372
- MutexLock lock(&child_policy_mu_);
1373
- if (child_policy_ != nullptr) {
1374
- child_policy_->FillChildRefsForChannelz(child_subchannels,
1375
- child_channels);
1376
- }
1377
- if (pending_child_policy_ != nullptr) {
1378
- pending_child_policy_->FillChildRefsForChannelz(child_subchannels,
1379
- child_channels);
1380
- }
1381
- }
1382
- gpr_atm uuid = gpr_atm_no_barrier_load(&lb_channel_uuid_);
1383
- if (uuid != 0) {
1384
- child_channels->push_back(uuid);
1385
- }
1386
1401
  }
1387
1402
 
1388
1403
  void GrpcLb::UpdateLocked(UpdateArgs args) {
1389
1404
  const bool is_initial_update = lb_channel_ == nullptr;
1390
- auto* grpclb_config =
1391
- static_cast<const ParsedGrpcLbConfig*>(args.config.get());
1392
- if (grpclb_config != nullptr) {
1393
- child_policy_config_ = grpclb_config->child_policy();
1394
- } else {
1395
- child_policy_config_ = nullptr;
1396
- }
1405
+ config_ = args.config;
1406
+ GPR_ASSERT(config_ != nullptr);
1397
1407
  ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
1398
1408
  // Update the existing child policy.
1399
1409
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
@@ -1412,12 +1422,10 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1412
1422
  grpc_channel_get_channel_stack(lb_channel_));
1413
1423
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1414
1424
  // Ref held by callback.
1415
- Ref(DEBUG_LOCATION, "watch_lb_channel_connectivity").release();
1416
- grpc_client_channel_watch_connectivity_state(
1417
- client_channel_elem,
1418
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1419
- &lb_channel_connectivity_, &lb_channel_on_connectivity_changed_,
1420
- nullptr);
1425
+ watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1426
+ grpc_client_channel_start_connectivity_watch(
1427
+ client_channel_elem, GRPC_CHANNEL_IDLE,
1428
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
1421
1429
  // Start balancer call.
1422
1430
  StartBalancerCallLocked();
1423
1431
  }
@@ -1427,27 +1435,25 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1427
1435
  // helpers for UpdateLocked()
1428
1436
  //
1429
1437
 
1430
- // Returns the backend addresses extracted from the given addresses.
1431
- ServerAddressList ExtractBackendAddresses(const ServerAddressList& addresses) {
1432
- void* lb_token = (void*)GRPC_MDELEM_LB_TOKEN_EMPTY.payload;
1438
+ ServerAddressList AddNullLbTokenToAddresses(
1439
+ const ServerAddressList& addresses) {
1440
+ static const char* lb_token = "";
1433
1441
  grpc_arg arg = grpc_channel_arg_pointer_create(
1434
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
1435
- &lb_token_arg_vtable);
1436
- ServerAddressList backend_addresses;
1442
+ const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
1443
+ const_cast<char*>(lb_token), &lb_token_arg_vtable);
1444
+ ServerAddressList addresses_out;
1437
1445
  for (size_t i = 0; i < addresses.size(); ++i) {
1438
- if (!addresses[i].IsBalancer()) {
1439
- backend_addresses.emplace_back(
1440
- addresses[i].address(),
1441
- grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1442
- }
1446
+ addresses_out.emplace_back(
1447
+ addresses[i].address(),
1448
+ grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1443
1449
  }
1444
- return backend_addresses;
1450
+ return addresses_out;
1445
1451
  }
1446
1452
 
1447
1453
  void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1448
1454
  const ServerAddressList& addresses, const grpc_channel_args& args) {
1449
1455
  // Update fallback address list.
1450
- fallback_backend_addresses_ = ExtractBackendAddresses(addresses);
1456
+ fallback_backend_addresses_ = AddNullLbTokenToAddresses(addresses);
1451
1457
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1452
1458
  // since we use this to trigger the client_load_reporting filter.
1453
1459
  static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
@@ -1457,22 +1463,15 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1457
1463
  args_ = grpc_channel_args_copy_and_add_and_remove(
1458
1464
  &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1459
1465
  // Construct args for balancer channel.
1460
- ServerAddressList balancer_addresses = ExtractBalancerAddresses(addresses);
1466
+ ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1461
1467
  grpc_channel_args* lb_channel_args = BuildBalancerChannelArgs(
1462
1468
  balancer_addresses, response_generator_.get(), &args);
1463
1469
  // Create balancer channel if needed.
1464
1470
  if (lb_channel_ == nullptr) {
1465
- char* uri_str;
1466
- gpr_asprintf(&uri_str, "fake:///%s", server_name_);
1471
+ std::string uri_str = absl::StrCat("fake:///", server_name_);
1467
1472
  lb_channel_ =
1468
- channel_control_helper()->CreateChannel(uri_str, *lb_channel_args);
1473
+ CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1469
1474
  GPR_ASSERT(lb_channel_ != nullptr);
1470
- grpc_core::channelz::ChannelNode* channel_node =
1471
- grpc_channel_get_channelz_node(lb_channel_);
1472
- if (channel_node != nullptr) {
1473
- gpr_atm_no_barrier_store(&lb_channel_uuid_, channel_node->uuid());
1474
- }
1475
- gpr_free(uri_str);
1476
1475
  }
1477
1476
  // Propagate updates to the LB channel (pick_first) through the fake
1478
1477
  // resolver.
@@ -1482,47 +1481,11 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1482
1481
  response_generator_->SetResponse(std::move(result));
1483
1482
  }
1484
1483
 
1485
- void GrpcLb::OnBalancerChannelConnectivityChangedLocked(void* arg,
1486
- grpc_error* error) {
1487
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1488
- if (!self->shutting_down_ && self->fallback_at_startup_checks_pending_) {
1489
- if (self->lb_channel_connectivity_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1490
- // Not in TRANSIENT_FAILURE. Renew connectivity watch.
1491
- grpc_channel_element* client_channel_elem =
1492
- grpc_channel_stack_last_element(
1493
- grpc_channel_get_channel_stack(self->lb_channel_));
1494
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1495
- grpc_client_channel_watch_connectivity_state(
1496
- client_channel_elem,
1497
- grpc_polling_entity_create_from_pollset_set(
1498
- self->interested_parties()),
1499
- &self->lb_channel_connectivity_,
1500
- &self->lb_channel_on_connectivity_changed_, nullptr);
1501
- return; // Early out so we don't drop the ref below.
1502
- }
1503
- // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
1504
- // fallback mode immediately.
1505
- gpr_log(GPR_INFO,
1506
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
1507
- "entering fallback mode",
1508
- self);
1509
- self->fallback_at_startup_checks_pending_ = false;
1510
- grpc_timer_cancel(&self->lb_fallback_timer_);
1511
- self->fallback_mode_ = true;
1512
- self->CreateOrUpdateChildPolicyLocked();
1513
- }
1514
- // Done watching connectivity state, so drop ref.
1515
- self->Unref(DEBUG_LOCATION, "watch_lb_channel_connectivity");
1516
- }
1517
-
1518
1484
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
1519
1485
  grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
1520
1486
  grpc_channel_get_channel_stack(lb_channel_));
1521
1487
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1522
- grpc_client_channel_watch_connectivity_state(
1523
- client_channel_elem,
1524
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1525
- nullptr, &lb_channel_on_connectivity_changed_, nullptr);
1488
+ grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
1526
1489
  }
1527
1490
 
1528
1491
  //
@@ -1561,24 +1524,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1561
1524
  // with the callback.
1562
1525
  auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1563
1526
  self.release();
1564
- GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimerLocked,
1565
- this, grpc_combiner_scheduler(combiner()));
1566
1527
  retry_timer_callback_pending_ = true;
1567
1528
  grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
1568
1529
  }
1569
1530
 
1570
- void GrpcLb::OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error) {
1531
+ void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error* error) {
1571
1532
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1572
- grpclb_policy->retry_timer_callback_pending_ = false;
1573
- if (!grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE &&
1574
- grpclb_policy->lb_calld_ == nullptr) {
1533
+ GRPC_ERROR_REF(error); // ref owned by lambda
1534
+ grpclb_policy->work_serializer()->Run(
1535
+ [grpclb_policy, error]() {
1536
+ grpclb_policy->OnBalancerCallRetryTimerLocked(error);
1537
+ },
1538
+ DEBUG_LOCATION);
1539
+ }
1540
+
1541
+ void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error* error) {
1542
+ retry_timer_callback_pending_ = false;
1543
+ if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1575
1544
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1576
- gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server",
1577
- grpclb_policy);
1545
+ gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1578
1546
  }
1579
- grpclb_policy->StartBalancerCallLocked();
1547
+ StartBalancerCallLocked();
1580
1548
  }
1581
- grpclb_policy->Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1549
+ Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1550
+ GRPC_ERROR_UNREF(error);
1582
1551
  }
1583
1552
 
1584
1553
  //
@@ -1603,22 +1572,30 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
1603
1572
  }
1604
1573
  }
1605
1574
 
1606
- void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1575
+ void GrpcLb::OnFallbackTimer(void* arg, grpc_error* error) {
1607
1576
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1577
+ GRPC_ERROR_REF(error); // ref owned by lambda
1578
+ grpclb_policy->work_serializer()->Run(
1579
+ [grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
1580
+ DEBUG_LOCATION);
1581
+ }
1582
+
1583
+ void GrpcLb::OnFallbackTimerLocked(grpc_error* error) {
1608
1584
  // If we receive a serverlist after the timer fires but before this callback
1609
1585
  // actually runs, don't fall back.
1610
- if (grpclb_policy->fallback_at_startup_checks_pending_ &&
1611
- !grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE) {
1586
+ if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1587
+ error == GRPC_ERROR_NONE) {
1612
1588
  gpr_log(GPR_INFO,
1613
1589
  "[grpclb %p] No response from balancer after fallback timeout; "
1614
1590
  "entering fallback mode",
1615
- grpclb_policy);
1616
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1617
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1618
- grpclb_policy->fallback_mode_ = true;
1619
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1591
+ this);
1592
+ fallback_at_startup_checks_pending_ = false;
1593
+ CancelBalancerChannelConnectivityWatchLocked();
1594
+ fallback_mode_ = true;
1595
+ CreateOrUpdateChildPolicyLocked();
1620
1596
  }
1621
- grpclb_policy->Unref(DEBUG_LOCATION, "on_fallback_timer");
1597
+ Unref(DEBUG_LOCATION, "on_fallback_timer");
1598
+ GRPC_ERROR_UNREF(error);
1622
1599
  }
1623
1600
 
1624
1601
  //
@@ -1627,7 +1604,7 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1627
1604
 
1628
1605
  grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1629
1606
  bool is_backend_from_grpclb_load_balancer) {
1630
- InlinedVector<grpc_arg, 2> args_to_add;
1607
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
1631
1608
  args_to_add.emplace_back(grpc_channel_arg_integer_create(
1632
1609
  const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1633
1610
  is_backend_from_grpclb_load_balancer));
@@ -1640,25 +1617,17 @@ grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1640
1617
  }
1641
1618
 
1642
1619
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1643
- const char* name, const grpc_channel_args* args) {
1644
- Helper* helper = New<Helper>(Ref());
1620
+ const grpc_channel_args* args) {
1645
1621
  LoadBalancingPolicy::Args lb_policy_args;
1646
- lb_policy_args.combiner = combiner();
1622
+ lb_policy_args.work_serializer = work_serializer();
1647
1623
  lb_policy_args.args = args;
1648
- lb_policy_args.channel_control_helper =
1649
- UniquePtr<ChannelControlHelper>(helper);
1624
+ lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
1650
1625
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1651
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
1652
- name, std::move(lb_policy_args));
1653
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
1654
- gpr_log(GPR_ERROR, "[grpclb %p] Failure creating child policy %s", this,
1655
- name);
1656
- return nullptr;
1657
- }
1658
- helper->set_child(lb_policy.get());
1626
+ MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1627
+ &grpc_lb_glb_trace);
1659
1628
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1660
- gpr_log(GPR_INFO, "[grpclb %p] Created new child policy %s (%p)", this,
1661
- name, lb_policy.get());
1629
+ gpr_log(GPR_INFO, "[grpclb %p] Created new child policy handler (%p)", this,
1630
+ lb_policy.get());
1662
1631
  }
1663
1632
  // Add the gRPC LB's interested_parties pollset_set to that of the newly
1664
1633
  // created child policy. This will make the child policy progress upon
@@ -1688,103 +1657,17 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1688
1657
  update_args.args =
1689
1658
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1690
1659
  GPR_ASSERT(update_args.args != nullptr);
1691
- update_args.config = child_policy_config_;
1692
- // If the child policy name changes, we need to create a new child
1693
- // policy. When this happens, we leave child_policy_ as-is and store
1694
- // the new child policy in pending_child_policy_. Once the new child
1695
- // policy transitions into state READY, we swap it into child_policy_,
1696
- // replacing the original child policy. So pending_child_policy_ is
1697
- // non-null only between when we apply an update that changes the child
1698
- // policy name and when the new child reports state READY.
1699
- //
1700
- // Updates can arrive at any point during this transition. We always
1701
- // apply updates relative to the most recently created child policy,
1702
- // even if the most recent one is still in pending_child_policy_. This
1703
- // is true both when applying the updates to an existing child policy
1704
- // and when determining whether we need to create a new policy.
1705
- //
1706
- // As a result of this, there are several cases to consider here:
1707
- //
1708
- // 1. We have no existing child policy (i.e., we have started up but
1709
- // have not yet received a serverlist from the balancer or gone
1710
- // into fallback mode; in this case, both child_policy_ and
1711
- // pending_child_policy_ are null). In this case, we create a
1712
- // new child policy and store it in child_policy_.
1713
- //
1714
- // 2. We have an existing child policy and have no pending child policy
1715
- // from a previous update (i.e., either there has not been a
1716
- // previous update that changed the policy name, or we have already
1717
- // finished swapping in the new policy; in this case, child_policy_
1718
- // is non-null but pending_child_policy_ is null). In this case:
1719
- // a. If child_policy_->name() equals child_policy_name, then we
1720
- // update the existing child policy.
1721
- // b. If child_policy_->name() does not equal child_policy_name,
1722
- // we create a new policy. The policy will be stored in
1723
- // pending_child_policy_ and will later be swapped into
1724
- // child_policy_ by the helper when the new child transitions
1725
- // into state READY.
1726
- //
1727
- // 3. We have an existing child policy and have a pending child policy
1728
- // from a previous update (i.e., a previous update set
1729
- // pending_child_policy_ as per case 2b above and that policy has
1730
- // not yet transitioned into state READY and been swapped into
1731
- // child_policy_; in this case, both child_policy_ and
1732
- // pending_child_policy_ are non-null). In this case:
1733
- // a. If pending_child_policy_->name() equals child_policy_name,
1734
- // then we update the existing pending child policy.
1735
- // b. If pending_child_policy->name() does not equal
1736
- // child_policy_name, then we create a new policy. The new
1737
- // policy is stored in pending_child_policy_ (replacing the one
1738
- // that was there before, which will be immediately shut down)
1739
- // and will later be swapped into child_policy_ by the helper
1740
- // when the new child transitions into state READY.
1741
- const char* child_policy_name = child_policy_config_ == nullptr
1742
- ? "round_robin"
1743
- : child_policy_config_->name();
1744
- const bool create_policy =
1745
- // case 1
1746
- child_policy_ == nullptr ||
1747
- // case 2b
1748
- (pending_child_policy_ == nullptr &&
1749
- strcmp(child_policy_->name(), child_policy_name) != 0) ||
1750
- // case 3b
1751
- (pending_child_policy_ != nullptr &&
1752
- strcmp(pending_child_policy_->name(), child_policy_name) != 0);
1753
- LoadBalancingPolicy* policy_to_update = nullptr;
1754
- if (create_policy) {
1755
- // Cases 1, 2b, and 3b: create a new child policy.
1756
- // If child_policy_ is null, we set it (case 1), else we set
1757
- // pending_child_policy_ (cases 2b and 3b).
1758
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1759
- gpr_log(GPR_INFO, "[grpclb %p] Creating new %schild policy %s", this,
1760
- child_policy_ == nullptr ? "" : "pending ", child_policy_name);
1761
- }
1762
- auto new_policy =
1763
- CreateChildPolicyLocked(child_policy_name, update_args.args);
1764
- // Swap the policy into place.
1765
- auto& lb_policy =
1766
- child_policy_ == nullptr ? child_policy_ : pending_child_policy_;
1767
- {
1768
- MutexLock lock(&child_policy_mu_);
1769
- lb_policy = std::move(new_policy);
1770
- }
1771
- policy_to_update = lb_policy.get();
1772
- } else {
1773
- // Cases 2a and 3a: update an existing policy.
1774
- // If we have a pending child policy, send the update to the pending
1775
- // policy (case 3a), else send it to the current policy (case 2a).
1776
- policy_to_update = pending_child_policy_ != nullptr
1777
- ? pending_child_policy_.get()
1778
- : child_policy_.get();
1660
+ update_args.config = config_->child_policy();
1661
+ // Create child policy if needed.
1662
+ if (child_policy_ == nullptr) {
1663
+ child_policy_ = CreateChildPolicyLocked(update_args.args);
1779
1664
  }
1780
- GPR_ASSERT(policy_to_update != nullptr);
1781
1665
  // Update the policy.
1782
1666
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1783
- gpr_log(GPR_INFO, "[grpclb %p] Updating %schild policy %p", this,
1784
- policy_to_update == pending_child_policy_.get() ? "pending " : "",
1785
- policy_to_update);
1667
+ gpr_log(GPR_INFO, "[grpclb %p] Updating child policy handler %p", this,
1668
+ child_policy_.get());
1786
1669
  }
1787
- policy_to_update->UpdateLocked(std::move(update_args));
1670
+ child_policy_->UpdateLocked(std::move(update_args));
1788
1671
  }
1789
1672
 
1790
1673
  //
@@ -1795,39 +1678,53 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1795
1678
  public:
1796
1679
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1797
1680
  LoadBalancingPolicy::Args args) const override {
1798
- return OrphanablePtr<LoadBalancingPolicy>(New<GrpcLb>(std::move(args)));
1681
+ return MakeOrphanable<GrpcLb>(std::move(args));
1799
1682
  }
1800
1683
 
1801
1684
  const char* name() const override { return kGrpclb; }
1802
1685
 
1803
- RefCountedPtr<ParsedLoadBalancingConfig> ParseLoadBalancingConfig(
1804
- const grpc_json* json, grpc_error** error) const override {
1686
+ RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1687
+ const Json& json, grpc_error** error) const override {
1805
1688
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1806
- if (json == nullptr) {
1807
- return RefCountedPtr<ParsedLoadBalancingConfig>(
1808
- New<ParsedGrpcLbConfig>(nullptr));
1689
+ if (json.type() == Json::Type::JSON_NULL) {
1690
+ return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1809
1691
  }
1810
- InlinedVector<grpc_error*, 2> error_list;
1811
- RefCountedPtr<ParsedLoadBalancingConfig> child_policy;
1812
- for (const grpc_json* field = json->child; field != nullptr;
1813
- field = field->next) {
1814
- if (field->key == nullptr) continue;
1815
- if (strcmp(field->key, "childPolicy") == 0) {
1816
- if (child_policy != nullptr) {
1817
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1818
- "field:childPolicy error:Duplicate entry"));
1819
- }
1820
- grpc_error* parse_error = GRPC_ERROR_NONE;
1821
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1822
- field, &parse_error);
1823
- if (parse_error != GRPC_ERROR_NONE) {
1824
- error_list.push_back(parse_error);
1825
- }
1692
+ std::vector<grpc_error*> error_list;
1693
+ Json child_policy_config_json_tmp;
1694
+ const Json* child_policy_config_json;
1695
+ std::string service_name;
1696
+ auto it = json.object_value().find("serviceName");
1697
+ if (it != json.object_value().end()) {
1698
+ const Json& service_name_json = it->second;
1699
+ if (service_name_json.type() != Json::Type::STRING) {
1700
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1701
+ "field:serviceName error:type should be string"));
1702
+ } else {
1703
+ service_name = service_name_json.string_value();
1826
1704
  }
1827
1705
  }
1706
+ it = json.object_value().find("childPolicy");
1707
+ if (it == json.object_value().end()) {
1708
+ child_policy_config_json_tmp = Json::Array{Json::Object{
1709
+ {"round_robin", Json::Object()},
1710
+ }};
1711
+ child_policy_config_json = &child_policy_config_json_tmp;
1712
+ } else {
1713
+ child_policy_config_json = &it->second;
1714
+ }
1715
+ grpc_error* parse_error = GRPC_ERROR_NONE;
1716
+ RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1717
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1718
+ *child_policy_config_json, &parse_error);
1719
+ if (parse_error != GRPC_ERROR_NONE) {
1720
+ std::vector<grpc_error*> child_errors;
1721
+ child_errors.push_back(parse_error);
1722
+ error_list.push_back(
1723
+ GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1724
+ }
1828
1725
  if (error_list.empty()) {
1829
- return RefCountedPtr<ParsedLoadBalancingConfig>(
1830
- New<ParsedGrpcLbConfig>(std::move(child_policy)));
1726
+ return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1727
+ std::move(service_name));
1831
1728
  } else {
1832
1729
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1833
1730
  return nullptr;
@@ -1854,7 +1751,12 @@ bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1854
1751
  grpc_channel_args_find(args, GRPC_ARG_LB_POLICY_NAME);
1855
1752
  if (channel_arg != nullptr && channel_arg->type == GRPC_ARG_STRING &&
1856
1753
  strcmp(channel_arg->value.string, "grpclb") == 0) {
1857
- return grpc_channel_stack_builder_append_filter(
1754
+ // TODO(roth): When we get around to re-attempting
1755
+ // https://github.com/grpc/grpc/pull/16214, we should try to keep
1756
+ // this filter at the very top of the subchannel stack, since that
1757
+ // will minimize the number of metadata elements that the filter
1758
+ // needs to iterate through to find the ClientStats object.
1759
+ return grpc_channel_stack_builder_prepend_filter(
1858
1760
  builder, (const grpc_channel_filter*)arg, nullptr, nullptr);
1859
1761
  }
1860
1762
  return true;
@@ -1865,8 +1767,7 @@ bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1865
1767
  void grpc_lb_policy_grpclb_init() {
1866
1768
  grpc_core::LoadBalancingPolicyRegistry::Builder::
1867
1769
  RegisterLoadBalancingPolicyFactory(
1868
- grpc_core::UniquePtr<grpc_core::LoadBalancingPolicyFactory>(
1869
- grpc_core::New<grpc_core::GrpcLbFactory>()));
1770
+ absl::make_unique<grpc_core::GrpcLbFactory>());
1870
1771
  grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
1871
1772
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1872
1773
  maybe_add_client_load_reporting_filter,