grpc 1.27.0 → 1.30.2

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 (965) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8023 -11435
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +24 -21
  7. data/include/grpc/impl/codegen/port_platform.h +13 -2
  8. data/include/grpc/impl/codegen/sync.h +5 -3
  9. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  10. data/include/grpc/module.modulemap +25 -37
  11. data/include/grpc/support/sync_abseil.h +26 -0
  12. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  13. data/src/core/ext/filters/client_channel/client_channel.cc +282 -269
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +31 -47
  15. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -3
  16. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  17. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  18. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  19. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  20. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -11
  21. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  22. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +286 -495
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +18 -21
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -14
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +148 -98
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  42. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +49 -77
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  45. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  46. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  47. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  48. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +129 -128
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +17 -21
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +186 -135
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  58. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +42 -45
  59. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +94 -103
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  61. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  62. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +61 -10
  63. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  64. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  65. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +242 -300
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +21 -18
  68. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +56 -206
  69. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +11 -14
  70. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  71. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  72. data/src/core/ext/filters/client_channel/service_config.cc +144 -253
  73. data/src/core/ext/filters/client_channel/service_config.h +32 -109
  74. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  75. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  76. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  77. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  78. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  79. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1381 -301
  80. data/src/core/ext/filters/client_channel/xds/xds_api.h +211 -152
  81. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +214 -359
  82. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +28 -44
  83. data/src/core/ext/filters/client_channel/xds/xds_channel.h +3 -1
  84. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +16 -11
  85. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1118 -472
  86. data/src/core/ext/filters/client_channel/xds/xds_client.h +116 -45
  87. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +59 -135
  88. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +122 -137
  89. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  90. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  91. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  92. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  93. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  94. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  95. data/src/core/ext/filters/message_size/message_size_filter.cc +38 -44
  96. data/src/core/ext/filters/message_size/message_size_filter.h +5 -5
  97. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -10
  98. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +26 -27
  100. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  103. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  105. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  106. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  108. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  109. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  110. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  111. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  112. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  114. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  115. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -9
  116. data/src/core/ext/transport/inproc/inproc_transport.cc +41 -42
  117. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  118. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  121. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +5 -205
  122. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -788
  123. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  124. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  125. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  129. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +5 -362
  130. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +14 -1337
  131. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +30 -8
  134. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +60 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +2 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +2 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +7 -4
  138. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  141. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +87 -23
  142. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +262 -62
  143. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +20 -15
  144. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +46 -32
  145. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +27 -4
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +70 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +46 -25
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +98 -25
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +2 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +77 -21
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +201 -4
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  156. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -0
  157. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +8 -68
  158. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +14 -201
  159. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  160. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +2 -71
  162. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +3 -228
  163. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  164. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +2 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  167. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  168. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  170. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  171. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  172. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  174. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  175. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  176. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  178. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  180. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  181. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  182. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  184. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  185. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  186. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  187. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  188. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  189. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  190. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  191. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  192. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  193. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  194. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  195. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  196. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  198. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  199. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  200. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  201. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  203. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  204. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  205. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  206. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  207. data/src/core/ext/upb-generated/envoy/type/range.upb.c +12 -0
  208. data/src/core/ext/upb-generated/envoy/type/range.upb.h +27 -0
  209. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  210. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  211. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  212. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  213. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  214. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  215. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +30 -27
  216. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +64 -52
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  220. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  223. data/src/core/ext/upb-generated/validate/validate.upb.c +44 -39
  224. data/src/core/ext/upb-generated/validate/validate.upb.h +155 -119
  225. data/src/core/lib/channel/channel_args.cc +15 -14
  226. data/src/core/lib/channel/channel_args.h +3 -1
  227. data/src/core/lib/channel/channel_stack.h +20 -13
  228. data/src/core/lib/channel/channel_trace.cc +32 -41
  229. data/src/core/lib/channel/channel_trace.h +3 -3
  230. data/src/core/lib/channel/channelz.cc +163 -254
  231. data/src/core/lib/channel/channelz.h +15 -17
  232. data/src/core/lib/channel/channelz_registry.cc +52 -77
  233. data/src/core/lib/channel/channelz_registry.h +4 -4
  234. data/src/core/lib/channel/connected_channel.cc +7 -5
  235. data/src/core/lib/channel/context.h +1 -1
  236. data/src/core/lib/channel/handshaker.cc +11 -13
  237. data/src/core/lib/channel/handshaker.h +4 -2
  238. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  239. data/src/core/lib/channel/status_util.cc +2 -3
  240. data/src/core/lib/compression/message_compress.cc +5 -1
  241. data/src/core/lib/debug/stats.cc +21 -27
  242. data/src/core/lib/debug/stats.h +3 -1
  243. data/src/core/lib/gpr/spinlock.h +2 -3
  244. data/src/core/lib/gpr/string.cc +2 -26
  245. data/src/core/lib/gpr/string.h +0 -16
  246. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  247. data/src/core/lib/gpr/sync_posix.cc +8 -5
  248. data/src/core/lib/gpr/sync_windows.cc +4 -2
  249. data/src/core/lib/gpr/time.cc +4 -0
  250. data/src/core/lib/gpr/time_posix.cc +1 -1
  251. data/src/core/lib/gprpp/atomic.h +6 -6
  252. data/src/core/lib/gprpp/fork.cc +1 -1
  253. data/src/core/lib/gprpp/host_port.cc +30 -36
  254. data/src/core/lib/gprpp/host_port.h +14 -17
  255. data/src/core/lib/gprpp/map.h +5 -11
  256. data/src/core/lib/gprpp/memory.h +2 -6
  257. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  258. data/src/core/lib/gprpp/sync.h +9 -0
  259. data/src/core/lib/http/format_request.cc +46 -65
  260. data/src/core/lib/http/httpcli.cc +2 -3
  261. data/src/core/lib/http/httpcli.h +2 -3
  262. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  263. data/src/core/lib/http/parser.h +2 -3
  264. data/src/core/lib/iomgr/buffer_list.cc +36 -35
  265. data/src/core/lib/iomgr/buffer_list.h +22 -21
  266. data/src/core/lib/iomgr/call_combiner.h +3 -2
  267. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  268. data/src/core/lib/iomgr/closure.h +2 -3
  269. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  270. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  271. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  272. data/src/core/lib/iomgr/error.cc +6 -9
  273. data/src/core/lib/iomgr/error.h +4 -5
  274. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  275. data/src/core/lib/iomgr/ev_apple.h +43 -0
  276. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  277. data/src/core/lib/iomgr/ev_epollex_linux.cc +14 -7
  278. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  279. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  280. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  281. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  282. data/src/core/lib/iomgr/load_file.cc +1 -0
  283. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  284. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  285. data/src/core/lib/iomgr/port.h +1 -0
  286. data/src/core/lib/iomgr/python_util.h +46 -0
  287. data/src/core/lib/iomgr/resolve_address.h +4 -6
  288. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  289. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  290. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  291. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  292. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  293. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  294. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  295. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  296. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  297. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  298. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  299. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  300. data/src/core/lib/iomgr/tcp_client_posix.cc +25 -22
  301. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  302. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  303. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  304. data/src/core/lib/iomgr/tcp_posix.cc +2 -1
  305. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  306. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  307. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  308. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  309. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  310. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  311. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  312. data/src/core/lib/iomgr/timer_generic.h +39 -0
  313. data/src/core/lib/iomgr/timer_heap.h +2 -3
  314. data/src/core/lib/iomgr/udp_server.cc +9 -14
  315. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  316. data/src/core/lib/iomgr/work_serializer.h +65 -0
  317. data/src/core/lib/json/json.h +210 -79
  318. data/src/core/lib/json/json_reader.cc +469 -455
  319. data/src/core/lib/json/json_writer.cc +174 -169
  320. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  321. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  322. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  323. data/src/core/lib/security/credentials/credentials.cc +0 -84
  324. data/src/core/lib/security/credentials/credentials.h +8 -59
  325. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  326. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -12
  327. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  328. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  329. data/src/core/lib/security/credentials/jwt/json_token.cc +26 -56
  330. data/src/core/lib/security/credentials/jwt/json_token.h +4 -6
  331. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -18
  332. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  333. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +151 -168
  334. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  335. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +91 -60
  336. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -4
  337. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  338. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  339. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  340. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +40 -12
  341. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  342. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  343. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  344. data/src/core/lib/security/security_connector/local/local_security_connector.cc +6 -8
  345. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  346. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -37
  347. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  348. data/src/core/lib/security/security_connector/ssl_utils.cc +62 -13
  349. data/src/core/lib/security/security_connector/ssl_utils.h +12 -11
  350. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -52
  351. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +32 -6
  352. data/src/core/lib/security/transport/auth_filters.h +0 -5
  353. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  354. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  355. data/src/core/lib/security/util/json_util.cc +22 -15
  356. data/src/core/lib/security/util/json_util.h +2 -2
  357. data/src/core/lib/slice/slice_intern.cc +2 -3
  358. data/src/core/lib/slice/slice_internal.h +14 -0
  359. data/src/core/lib/slice/slice_utils.h +9 -0
  360. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  361. data/src/core/lib/surface/call.cc +2 -3
  362. data/src/core/lib/surface/call_log_batch.cc +50 -58
  363. data/src/core/lib/surface/channel.cc +53 -31
  364. data/src/core/lib/surface/channel.h +35 -4
  365. data/src/core/lib/surface/channel_ping.cc +2 -3
  366. data/src/core/lib/surface/completion_queue.cc +33 -33
  367. data/src/core/lib/surface/event_string.cc +18 -25
  368. data/src/core/lib/surface/event_string.h +3 -1
  369. data/src/core/lib/surface/init_secure.cc +1 -4
  370. data/src/core/lib/surface/server.cc +570 -369
  371. data/src/core/lib/surface/server.h +32 -0
  372. data/src/core/lib/surface/version.cc +2 -2
  373. data/src/core/lib/transport/byte_stream.h +7 -2
  374. data/src/core/lib/transport/connectivity_state.cc +7 -6
  375. data/src/core/lib/transport/connectivity_state.h +5 -3
  376. data/src/core/lib/transport/metadata.cc +3 -3
  377. data/src/core/lib/transport/metadata_batch.h +2 -3
  378. data/src/core/lib/transport/static_metadata.h +1 -1
  379. data/src/core/lib/transport/status_conversion.cc +6 -14
  380. data/src/core/lib/transport/transport.cc +2 -3
  381. data/src/core/lib/transport/transport.h +3 -2
  382. data/src/core/lib/transport/transport_op_string.cc +61 -102
  383. data/src/core/lib/uri/uri_parser.h +2 -3
  384. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  385. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  386. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +9 -2
  387. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  388. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +33 -3
  389. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  390. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  391. data/src/core/tsi/fake_transport_security.cc +10 -15
  392. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  393. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  394. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  395. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
  396. data/src/core/tsi/ssl_transport_security.cc +54 -40
  397. data/src/core/tsi/ssl_transport_security.h +8 -8
  398. data/src/core/tsi/ssl_types.h +0 -2
  399. data/src/core/tsi/transport_security.h +6 -9
  400. data/src/core/tsi/transport_security_grpc.h +2 -3
  401. data/src/core/tsi/transport_security_interface.h +3 -3
  402. data/src/ruby/ext/grpc/rb_call.c +9 -1
  403. data/src/ruby/ext/grpc/rb_call_credentials.c +3 -2
  404. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  405. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  406. data/src/ruby/lib/grpc/errors.rb +103 -42
  407. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  408. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  409. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  410. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  411. data/src/ruby/lib/grpc/structs.rb +1 -1
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  414. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  415. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  416. data/src/ruby/spec/debug_message_spec.rb +134 -0
  417. data/src/ruby/spec/generic/service_spec.rb +2 -0
  418. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  419. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  420. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  421. data/src/ruby/spec/support/services.rb +10 -4
  422. data/src/ruby/spec/testdata/ca.pem +18 -13
  423. data/src/ruby/spec/testdata/client.key +26 -14
  424. data/src/ruby/spec/testdata/client.pem +18 -12
  425. data/src/ruby/spec/testdata/server1.key +26 -14
  426. data/src/ruby/spec/testdata/server1.pem +20 -14
  427. data/third_party/abseil-cpp/absl/base/attributes.h +1 -1
  428. data/third_party/abseil-cpp/absl/base/config.h +10 -4
  429. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +30 -9
  430. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  431. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +7 -5
  432. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +2 -1
  433. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +2 -2
  434. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -3
  435. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +3 -3
  436. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +37 -0
  437. data/third_party/abseil-cpp/absl/base/options.h +2 -10
  438. data/third_party/abseil-cpp/absl/strings/charconv.cc +0 -1
  439. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  440. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  441. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  442. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  443. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  452. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  453. data/third_party/abseil-cpp/absl/strings/string_view.h +19 -11
  454. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  455. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  456. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  457. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  458. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  459. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  465. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  466. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  467. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  468. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  469. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  470. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  471. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  472. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  473. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  481. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  482. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  483. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  484. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  485. data/{src/boringssl → third_party/boringssl-with-bazel}/err_data.c +329 -297
  486. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
  487. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bool.c +0 -0
  488. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_d2i_fp.c +0 -0
  489. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_dup.c +0 -0
  490. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_enum.c +0 -0
  491. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  492. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_i2d_fp.c +0 -0
  493. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_int.c +0 -0
  494. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_mbstr.c +0 -0
  495. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_object.c +0 -0
  496. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  497. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  498. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_strnid.c +0 -0
  499. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_time.c +3 -4
  500. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
  501. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  502. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  503. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_lib.c +0 -0
  504. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  505. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  506. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
  507. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
  508. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
  509. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
  510. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  511. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_enc.c +0 -0
  512. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  513. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  514. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  515. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  516. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  517. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/base64/base64.c +0 -0
  518. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio.c +0 -0
  519. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  520. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/connect.c +3 -4
  521. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/fd.c +0 -1
  522. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/file.c +5 -6
  523. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  524. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  525. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/pair.c +0 -1
  526. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  527. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket.c +0 -0
  528. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket_helper.c +0 -0
  529. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  530. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/convert.c +0 -0
  531. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/buf/buf.c +10 -69
  532. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  533. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/ber.c +0 -0
  534. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/cbb.c +41 -2
  535. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/cbs.c +60 -3
  536. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/internal.h +0 -0
  537. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/unicode.c +0 -0
  538. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/chacha.c +0 -0
  539. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/internal.h +0 -0
  540. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/cipher_extra.c +0 -0
  541. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/derive_key.c +1 -1
  542. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesccm.c +0 -0
  543. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesctrhmac.c +0 -0
  544. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesgcmsiv.c +8 -0
  545. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_chacha20poly1305.c +0 -0
  546. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  547. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  548. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  549. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_tls.c +0 -0
  550. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  551. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/tls_cbc.c +0 -0
  552. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cmac/cmac.c +0 -0
  553. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf.c +0 -0
  554. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  555. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  556. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  557. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  558. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.c +7 -6
  559. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.h +0 -0
  560. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  561. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-intel.c +13 -4
  562. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  563. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/crypto.c +11 -0
  564. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/curve25519.c +18 -26
  565. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/curve25519_tables.h +13 -21
  566. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/internal.h +14 -22
  567. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/curve25519/spake25519.c +1 -1
  568. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/check.c +3 -3
  569. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh.c +16 -2
  570. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  571. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  572. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  573. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa.c +10 -0
  574. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  575. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_asn1.c +0 -0
  576. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_derive.c +2 -3
  577. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  579. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdh_extra/ecdh_extra.c +2 -2
  580. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdsa_extra/ecdsa_asn1.c +0 -0
  581. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/engine/engine.c +0 -0
  582. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/err.c +39 -38
  583. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/internal.h +0 -0
  584. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  585. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp.c +0 -0
  586. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_asn1.c +0 -0
  587. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_ctx.c +0 -0
  588. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/internal.h +0 -0
  589. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_dsa_asn1.c +0 -0
  590. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec.c +0 -1
  591. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec_asn1.c +0 -0
  592. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519.c +0 -0
  593. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519_asn1.c +0 -0
  594. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa.c +14 -2
  595. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa_asn1.c +0 -0
  596. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519.c +0 -0
  597. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519_asn1.c +1 -2
  598. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  599. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  600. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/scrypt.c +0 -0
  601. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  602. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  603. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  604. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  605. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/internal.h +5 -7
  606. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/key_wrap.c +0 -0
  607. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/mode_wrappers.c +0 -2
  608. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bcm.c +4 -1
  609. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  610. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  611. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bn.c +0 -0
  612. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  613. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/cmp.c +0 -0
  614. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/ctx.c +0 -0
  615. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div.c +0 -0
  616. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div_extra.c +0 -0
  617. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/exponentiation.c +3 -3
  618. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd.c +0 -0
  619. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd_extra.c +0 -0
  620. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  621. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/internal.h +14 -11
  622. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  623. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery.c +8 -8
  624. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery_inv.c +0 -0
  625. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/mul.c +30 -154
  626. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/prime.c +11 -12
  627. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/random.c +0 -0
  628. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.c +0 -0
  629. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.h +0 -0
  630. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/shift.c +0 -0
  631. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  632. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  633. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/cipher.c +0 -0
  634. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_aes.c +3 -5
  635. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_des.c +0 -0
  636. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/internal.h +0 -0
  637. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/delocate.h +0 -0
  638. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  639. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  640. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digest.c +0 -0
  641. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digests.c +16 -0
  642. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  643. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/md32_common.h +0 -0
  644. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec.c +289 -117
  645. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_key.c +14 -28
  646. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  647. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/felem.c +25 -7
  648. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/internal.h +432 -160
  649. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/oct.c +63 -71
  650. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p224-64.c +5 -14
  651. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  652. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  653. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.h +0 -0
  654. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  655. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  657. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/simple.c +125 -148
  658. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  659. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/util.c +0 -0
  660. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/wnaf.c +61 -18
  661. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  662. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  663. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/fips_shared_support.c +0 -0
  664. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  665. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/is_fips.c +0 -0
  666. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md4/md4.c +0 -0
  667. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/internal.h +0 -0
  668. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/md5.c +0 -0
  669. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cbc.c +0 -0
  670. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cfb.c +0 -0
  671. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ctr.c +0 -0
  672. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/gcm.c +45 -193
  673. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  674. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/internal.h +8 -18
  675. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ofb.c +0 -0
  676. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  677. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/ctrdrbg.c +0 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  679. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  680. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  681. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/internal.h +41 -5
  682. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/rand.c +32 -17
  683. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/urandom.c +24 -114
  684. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/blinding.c +4 -0
  685. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/internal.h +1 -0
  686. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/padding.c +0 -0
  687. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa.c +58 -39
  688. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa_impl.c +72 -49
  689. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/self_check/self_check.c +0 -0
  690. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/internal.h +0 -0
  691. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  692. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1.c +0 -0
  693. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha256.c +0 -0
  694. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha512.c +44 -35
  695. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  696. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  697. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  698. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hrss/hrss.c +210 -311
  699. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hrss/internal.h +0 -1
  700. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/internal.h +21 -1
  701. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/lhash/lhash.c +0 -0
  702. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/mem.c +99 -12
  703. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj.c +16 -21
  704. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_dat.h +41 -6
  705. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  706. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_all.c +0 -0
  707. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_info.c +0 -1
  708. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_lib.c +7 -7
  709. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_oth.c +0 -1
  710. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pk8.c +0 -1
  711. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pkey.c +0 -1
  712. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  713. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  714. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  715. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7.c +0 -0
  716. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7_x509.c +1 -1
  717. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/internal.h +0 -0
  718. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/p5_pbev2.c +0 -0
  719. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8.c +0 -0
  720. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8_x509.c +0 -0
  721. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  722. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305.c +2 -2
  723. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_arm.c +21 -20
  724. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_vec.c +34 -17
  725. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/internal.h +0 -0
  726. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/pool.c +1 -2
  727. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/deterministic.c +6 -10
  728. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  729. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/fuchsia.c +0 -0
  730. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  731. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/windows.c +16 -0
  732. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  733. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  734. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_lock.c +0 -0
  735. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  736. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_print.c +0 -0
  737. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/siphash/siphash.c +3 -1
  738. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/stack/stack.c +0 -0
  739. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  740. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_none.c +0 -0
  741. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_pthread.c +4 -0
  742. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_win.c +4 -0
  743. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  744. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  745. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  746. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  747. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  748. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_strex.c +0 -0
  749. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_verify.c +0 -1
  750. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
  751. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/asn1_gen.c +0 -0
  752. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/by_dir.c +1 -1
  753. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/by_file.c +0 -1
  754. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  755. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  756. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  757. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  758. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_crl.c +0 -0
  759. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_req.c +0 -0
  760. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509.c +0 -0
  761. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  762. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  763. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
  764. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  765. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_cmp.c +0 -1
  766. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  767. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_def.c +0 -0
  768. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  769. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_lu.c +0 -0
  770. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_obj.c +1 -1
  771. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_r2x.c +0 -1
  772. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_req.c +0 -1
  773. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_set.c +16 -0
  774. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_trs.c +1 -2
  775. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_txt.c +0 -0
  776. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  777. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_vfy.c +5 -1
  778. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_vpm.c +3 -4
  779. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509cset.c +0 -0
  780. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509name.c +4 -3
  781. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  782. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  783. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  784. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_all.c +0 -1
  785. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  786. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
  787. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  788. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  789. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  790. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  791. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
  792. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  793. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
  794. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  795. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  796. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509.c +0 -0
  797. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  798. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/ext_dat.h +0 -0
  799. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/internal.h +0 -0
  800. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_cache.c +0 -0
  801. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  802. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  803. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  804. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  805. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_node.c +0 -0
  806. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_tree.c +0 -0
  807. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akey.c +0 -0
  808. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  809. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_alt.c +3 -3
  810. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  811. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  812. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_conf.c +0 -0
  813. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_cpols.c +0 -0
  814. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  815. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_enum.c +2 -2
  816. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  817. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_genn.c +0 -0
  818. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  819. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_info.c +4 -5
  820. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  821. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_lib.c +0 -0
  822. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  823. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ocsp.c +0 -0
  824. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pci.c +0 -0
  825. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  826. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  827. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  828. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  829. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  830. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_purp.c +2 -3
  831. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_skey.c +0 -0
  832. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  833. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_utl.c +11 -12
  834. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aead.h +0 -0
  835. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aes.h +0 -0
  836. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
  837. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1.h +0 -0
  838. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  839. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  840. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base.h +5 -1
  841. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base64.h +0 -0
  842. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bio.h +0 -0
  843. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/blowfish.h +0 -0
  844. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bn.h +32 -20
  845. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buf.h +9 -9
  846. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  847. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bytestring.h +34 -0
  848. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cast.h +0 -0
  849. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  850. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cipher.h +0 -0
  851. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cmac.h +0 -0
  852. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/conf.h +0 -0
  853. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cpu.h +0 -0
  854. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/crypto.h +9 -4
  855. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/curve25519.h +0 -0
  856. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  857. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dh.h +20 -0
  858. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/digest.h +1 -0
  859. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dsa.h +16 -0
  860. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  861. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/e_os2.h +0 -0
  862. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ec.h +11 -4
  863. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ec_key.h +4 -2
  864. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdh.h +0 -0
  865. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdsa.h +6 -0
  866. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/engine.h +0 -0
  867. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/err.h +13 -9
  868. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/evp.h +20 -0
  869. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  870. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  871. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hmac.h +0 -0
  872. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hrss.h +0 -0
  873. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  874. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/lhash.h +0 -0
  875. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md4.h +0 -0
  876. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md5.h +0 -0
  877. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/mem.h +17 -2
  878. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/nid.h +14 -0
  879. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj.h +0 -0
  880. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  881. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  882. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  883. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  884. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  885. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pem.h +0 -0
  886. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  887. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs7.h +0 -0
  888. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs8.h +0 -0
  889. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/poly1305.h +5 -7
  890. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pool.h +0 -0
  891. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rand.h +3 -17
  892. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  893. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ripemd.h +0 -0
  894. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rsa.h +31 -0
  895. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  896. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/sha.h +26 -0
  897. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/siphash.h +0 -0
  898. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/span.h +0 -0
  899. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  900. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl.h +182 -97
  901. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl3.h +0 -0
  902. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/stack.h +0 -0
  903. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/thread.h +0 -0
  904. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/tls1.h +1 -3
  905. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  906. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/type_check.h +0 -0
  907. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509.h +5 -3
  908. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509_vfy.h +1 -0
  909. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509v3.h +0 -0
  910. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  911. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_both.cc +0 -5
  912. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_lib.cc +3 -3
  913. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_pkt.cc +0 -1
  914. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_srtp.cc +0 -0
  915. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_method.cc +13 -5
  916. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_record.cc +0 -0
  917. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handoff.cc +237 -51
  918. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake.cc +19 -7
  919. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_client.cc +51 -32
  920. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_server.cc +12 -8
  921. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/internal.h +94 -71
  922. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_both.cc +10 -10
  923. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_lib.cc +4 -5
  924. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_pkt.cc +21 -22
  925. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_aead_ctx.cc +0 -0
  926. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_asn1.cc +30 -2
  927. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_buffer.cc +34 -15
  928. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cert.cc +4 -1
  929. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cipher.cc +0 -1
  930. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_file.cc +0 -0
  931. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_key_share.cc +0 -0
  932. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_lib.cc +19 -15
  933. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_privkey.cc +13 -2
  934. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_session.cc +66 -6
  935. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_stat.cc +6 -0
  936. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_transcript.cc +0 -0
  937. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_versions.cc +1 -1
  938. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_x509.cc +0 -0
  939. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_enc.cc +6 -2
  940. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_lib.cc +53 -219
  941. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_both.cc +1 -1
  942. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_client.cc +101 -31
  943. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_enc.cc +28 -76
  944. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_server.cc +111 -104
  945. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_method.cc +64 -26
  946. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_record.cc +7 -2
  947. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_32.h +245 -175
  948. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_64.h +135 -75
  949. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  950. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/p256_64.h +512 -503
  951. metadata +648 -499
  952. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1917
  953. data/src/core/lib/gprpp/inlined_vector.h +0 -246
  954. data/src/core/lib/gprpp/optional.h +0 -74
  955. data/src/core/lib/gprpp/string_view.h +0 -169
  956. data/src/core/lib/iomgr/logical_thread.cc +0 -103
  957. data/src/core/lib/iomgr/logical_thread.h +0 -52
  958. data/src/core/lib/json/json.cc +0 -94
  959. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3297
  960. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -860
  961. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9501
  962. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +0 -96
  963. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +0 -84
  964. data/third_party/boringssl/third_party/fiat/p256.c +0 -1063
  965. data/third_party/boringssl/third_party/fiat/p256_32.h +0 -3226
@@ -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
+ */
@@ -64,6 +64,10 @@
64
64
  #include <limits.h>
65
65
  #include <string.h>
66
66
 
67
+ #include "absl/container/inlined_vector.h"
68
+ #include "absl/strings/str_format.h"
69
+ #include "absl/strings/str_join.h"
70
+
67
71
  #include <grpc/byte_buffer_reader.h>
68
72
  #include <grpc/grpc.h>
69
73
  #include <grpc/support/alloc.h>
@@ -71,8 +75,10 @@
71
75
  #include <grpc/support/time.h>
72
76
 
73
77
  #include "src/core/ext/filters/client_channel/client_channel.h"
78
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
74
79
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
75
80
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
81
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
76
82
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
77
83
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
78
84
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
@@ -89,7 +95,6 @@
89
95
  #include "src/core/lib/gprpp/memory.h"
90
96
  #include "src/core/lib/gprpp/orphanable.h"
91
97
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
92
- #include "src/core/lib/iomgr/combiner.h"
93
98
  #include "src/core/lib/iomgr/sockaddr.h"
94
99
  #include "src/core/lib/iomgr/sockaddr_utils.h"
95
100
  #include "src/core/lib/iomgr/timer.h"
@@ -121,10 +126,9 @@ namespace {
121
126
 
122
127
  constexpr char kGrpclb[] = "grpclb";
123
128
 
124
- class ParsedGrpcLbConfig : public LoadBalancingPolicy::Config {
129
+ class GrpcLbConfig : public LoadBalancingPolicy::Config {
125
130
  public:
126
- explicit ParsedGrpcLbConfig(
127
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
131
+ explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
128
132
  : child_policy_(std::move(child_policy)) {}
129
133
  const char* name() const override { return kGrpclb; }
130
134
 
@@ -178,11 +182,11 @@ class GrpcLb : public LoadBalancingPolicy {
178
182
  static void OnBalancerMessageReceived(void* arg, grpc_error* error);
179
183
  static void OnBalancerStatusReceived(void* arg, grpc_error* error);
180
184
 
181
- static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
182
- static void ClientLoadReportDoneLocked(void* arg, grpc_error* error);
183
- static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
184
- static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
185
- static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
185
+ void MaybeSendClientLoadReportLocked(grpc_error* error);
186
+ void ClientLoadReportDoneLocked(grpc_error* error);
187
+ void OnInitialRequestSentLocked();
188
+ void OnBalancerMessageReceivedLocked();
189
+ void OnBalancerStatusReceivedLocked(grpc_error* error);
186
190
 
187
191
  // The owning LB policy.
188
192
  RefCountedPtr<LoadBalancingPolicy> grpclb_policy_;
@@ -233,7 +237,7 @@ class GrpcLb : public LoadBalancingPolicy {
233
237
  const std::vector<GrpcLbServer>& serverlist() const { return serverlist_; }
234
238
 
235
239
  // Returns a text representation suitable for logging.
236
- grpc_core::UniquePtr<char> AsText() const;
240
+ std::string AsText() const;
237
241
 
238
242
  // Extracts all non-drop entries into a ServerAddressList.
239
243
  ServerAddressList GetServerAddressList(
@@ -247,16 +251,16 @@ class GrpcLb : public LoadBalancingPolicy {
247
251
  // should not be dropped.
248
252
  //
249
253
  // Note: This is called from the picker, so it will be invoked in
250
- // the channel's data plane combiner, NOT the control plane
251
- // combiner. It should not be accessed by any other part of the LB
254
+ // the channel's data plane mutex, NOT the control plane
255
+ // work_serializer. It should not be accessed by any other part of the LB
252
256
  // policy.
253
257
  const char* ShouldDrop();
254
258
 
255
259
  private:
256
260
  std::vector<GrpcLbServer> serverlist_;
257
261
 
258
- // Guarded by the channel's data plane combiner, NOT the control
259
- // plane combiner. It should not be accessed by anything but the
262
+ // Guarded by the channel's data plane mutex, NOT the control
263
+ // plane work_serializer. It should not be accessed by anything but the
260
264
  // picker via the ShouldDrop() method.
261
265
  size_t drop_index_ = 0;
262
266
  };
@@ -295,16 +299,42 @@ class GrpcLb : public LoadBalancingPolicy {
295
299
  void UpdateState(grpc_connectivity_state state,
296
300
  std::unique_ptr<SubchannelPicker> picker) override;
297
301
  void RequestReresolution() override;
298
- void AddTraceEvent(TraceSeverity severity, StringView message) override;
302
+ void AddTraceEvent(TraceSeverity severity,
303
+ absl::string_view message) override;
304
+
305
+ private:
306
+ RefCountedPtr<GrpcLb> parent_;
307
+ };
308
+
309
+ class StateWatcher : public AsyncConnectivityStateWatcherInterface {
310
+ public:
311
+ explicit StateWatcher(RefCountedPtr<GrpcLb> parent)
312
+ : AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
313
+ parent_(std::move(parent)) {}
299
314
 
300
- void set_child(LoadBalancingPolicy* child) { child_ = child; }
315
+ ~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
301
316
 
302
317
  private:
303
- bool CalledByPendingChild() const;
304
- bool CalledByCurrentChild() const;
318
+ void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
319
+ if (parent_->fallback_at_startup_checks_pending_ &&
320
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
321
+ // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
322
+ // fallback mode immediately.
323
+ gpr_log(GPR_INFO,
324
+ "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
325
+ "entering fallback mode",
326
+ parent_.get());
327
+ parent_->fallback_at_startup_checks_pending_ = false;
328
+ grpc_timer_cancel(&parent_->lb_fallback_timer_);
329
+ parent_->fallback_mode_ = true;
330
+ parent_->CreateOrUpdateChildPolicyLocked();
331
+ // Cancel the watch, since we don't care about the channel state once we
332
+ // go into fallback mode.
333
+ parent_->CancelBalancerChannelConnectivityWatchLocked();
334
+ }
335
+ }
305
336
 
306
337
  RefCountedPtr<GrpcLb> parent_;
307
- LoadBalancingPolicy* child_ = nullptr;
308
338
  };
309
339
 
310
340
  ~GrpcLb();
@@ -314,28 +344,25 @@ class GrpcLb : public LoadBalancingPolicy {
314
344
  // Helper functions used in UpdateLocked().
315
345
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
316
346
  const grpc_channel_args& args);
317
- static void OnBalancerChannelConnectivityChanged(void* arg,
318
- grpc_error* error);
319
- static void OnBalancerChannelConnectivityChangedLocked(void* arg,
320
- grpc_error* error);
347
+
321
348
  void CancelBalancerChannelConnectivityWatchLocked();
322
349
 
323
350
  // Methods for dealing with fallback state.
324
351
  void MaybeEnterFallbackModeAfterStartup();
325
352
  static void OnFallbackTimer(void* arg, grpc_error* error);
326
- static void OnFallbackTimerLocked(void* arg, grpc_error* error);
353
+ void OnFallbackTimerLocked(grpc_error* error);
327
354
 
328
355
  // Methods for dealing with the balancer call.
329
356
  void StartBalancerCallLocked();
330
357
  void StartBalancerCallRetryTimerLocked();
331
358
  static void OnBalancerCallRetryTimer(void* arg, grpc_error* error);
332
- static void OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error);
359
+ void OnBalancerCallRetryTimerLocked(grpc_error* error);
333
360
 
334
361
  // Methods for dealing with the child policy.
335
362
  grpc_channel_args* CreateChildPolicyArgsLocked(
336
363
  bool is_backend_from_grpclb_load_balancer);
337
364
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
338
- const char* name, const grpc_channel_args* args);
365
+ const grpc_channel_args* args);
339
366
  void CreateOrUpdateChildPolicyLocked();
340
367
 
341
368
  // Who the client is trying to communicate with.
@@ -349,6 +376,7 @@ class GrpcLb : public LoadBalancingPolicy {
349
376
 
350
377
  // The channel for communicating with the LB server.
351
378
  grpc_channel* lb_channel_ = nullptr;
379
+ StateWatcher* watcher_ = nullptr;
352
380
  // Response generator to inject address updates into lb_channel_.
353
381
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
354
382
 
@@ -381,14 +409,9 @@ class GrpcLb : public LoadBalancingPolicy {
381
409
  bool fallback_at_startup_checks_pending_ = false;
382
410
  grpc_timer lb_fallback_timer_;
383
411
  grpc_closure lb_on_fallback_;
384
- grpc_connectivity_state lb_channel_connectivity_ = GRPC_CHANNEL_IDLE;
385
- grpc_closure lb_channel_on_connectivity_changed_;
386
412
 
387
413
  // The child policy to use for the backends.
388
414
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
389
- // When switching child policies, the new policy will be stored here
390
- // until it reports READY, at which point it will be moved to child_policy_.
391
- OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
392
415
  // The child policy config.
393
416
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
394
417
  // Child policy in state READY.
@@ -424,28 +447,22 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
424
447
  }
425
448
  }
426
449
 
427
- grpc_core::UniquePtr<char> GrpcLb::Serverlist::AsText() const {
428
- gpr_strvec entries;
429
- gpr_strvec_init(&entries);
450
+ std::string GrpcLb::Serverlist::AsText() const {
451
+ std::vector<std::string> entries;
430
452
  for (size_t i = 0; i < serverlist_.size(); ++i) {
431
453
  const GrpcLbServer& server = serverlist_[i];
432
- char* ipport;
454
+ std::string ipport;
433
455
  if (server.drop) {
434
- ipport = gpr_strdup("(drop)");
456
+ ipport = "(drop)";
435
457
  } else {
436
458
  grpc_resolved_address addr;
437
459
  ParseServer(server, &addr);
438
- grpc_sockaddr_to_string(&ipport, &addr, false);
460
+ ipport = grpc_sockaddr_to_string(&addr, false);
439
461
  }
440
- char* entry;
441
- gpr_asprintf(&entry, " %" PRIuPTR ": %s token=%s\n", i, ipport,
442
- server.load_balance_token);
443
- gpr_free(ipport);
444
- gpr_strvec_add(&entries, entry);
462
+ entries.push_back(absl::StrFormat(" %" PRIuPTR ": %s token=%s\n", i,
463
+ ipport, server.load_balance_token));
445
464
  }
446
- grpc_core::UniquePtr<char> result(gpr_strvec_flatten(&entries, nullptr));
447
- gpr_strvec_destroy(&entries);
448
- return result;
465
+ return absl::StrJoin(entries, "");
449
466
  }
450
467
 
451
468
  // vtables for channel args for LB token and client stats.
@@ -537,7 +554,7 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
537
554
  lb_token[0] = '\0';
538
555
  }
539
556
  // Add address.
540
- InlinedVector<grpc_arg, 2> args_to_add;
557
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
541
558
  args_to_add.emplace_back(grpc_channel_arg_pointer_create(
542
559
  const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
543
560
  &lb_token_arg_vtable));
@@ -608,7 +625,7 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
608
625
  // how to interpret it.
609
626
  args.initial_metadata->Add(
610
627
  kGrpcLbClientStatsMetadataKey,
611
- StringView(reinterpret_cast<const char*>(client_stats), 0));
628
+ absl::string_view(reinterpret_cast<const char*>(client_stats), 0));
612
629
  // Update calls-started.
613
630
  client_stats->AddCallStarted();
614
631
  }
@@ -630,46 +647,15 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
630
647
  // GrpcLb::Helper
631
648
  //
632
649
 
633
- bool GrpcLb::Helper::CalledByPendingChild() const {
634
- GPR_ASSERT(child_ != nullptr);
635
- return child_ == parent_->pending_child_policy_.get();
636
- }
637
-
638
- bool GrpcLb::Helper::CalledByCurrentChild() const {
639
- GPR_ASSERT(child_ != nullptr);
640
- return child_ == parent_->child_policy_.get();
641
- }
642
-
643
650
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
644
651
  const grpc_channel_args& args) {
645
- if (parent_->shutting_down_ ||
646
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
647
- return nullptr;
648
- }
652
+ if (parent_->shutting_down_) return nullptr;
649
653
  return parent_->channel_control_helper()->CreateSubchannel(args);
650
654
  }
651
655
 
652
656
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
653
657
  std::unique_ptr<SubchannelPicker> picker) {
654
658
  if (parent_->shutting_down_) return;
655
- // If this request is from the pending child policy, ignore it until
656
- // it reports READY, at which point we swap it into place.
657
- if (CalledByPendingChild()) {
658
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
659
- gpr_log(GPR_INFO,
660
- "[grpclb %p helper %p] pending child policy %p reports state=%s",
661
- parent_.get(), this, parent_->pending_child_policy_.get(),
662
- ConnectivityStateName(state));
663
- }
664
- if (state != GRPC_CHANNEL_READY) return;
665
- grpc_pollset_set_del_pollset_set(
666
- parent_->child_policy_->interested_parties(),
667
- parent_->interested_parties());
668
- parent_->child_policy_ = std::move(parent_->pending_child_policy_);
669
- } else if (!CalledByCurrentChild()) {
670
- // This request is from an outdated child, so ignore it.
671
- return;
672
- }
673
659
  // Record whether child policy reports READY.
674
660
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
675
661
  // Enter fallback mode if needed.
@@ -715,22 +701,13 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
715
701
  client_stats = parent_->lb_calld_->client_stats()->Ref();
716
702
  }
717
703
  parent_->channel_control_helper()->UpdateState(
718
- state, MakeUnique<Picker>(parent_.get(), parent_->serverlist_,
704
+ state,
705
+ absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
719
706
  std::move(picker), std::move(client_stats)));
720
707
  }
721
708
 
722
709
  void GrpcLb::Helper::RequestReresolution() {
723
710
  if (parent_->shutting_down_) return;
724
- const LoadBalancingPolicy* latest_child_policy =
725
- parent_->pending_child_policy_ != nullptr
726
- ? parent_->pending_child_policy_.get()
727
- : parent_->child_policy_.get();
728
- if (child_ != latest_child_policy) return;
729
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
730
- gpr_log(GPR_INFO,
731
- "[grpclb %p] Re-resolution requested from %schild policy (%p).",
732
- parent_.get(), CalledByPendingChild() ? "pending " : "", child_);
733
- }
734
711
  // If we are talking to a balancer, we expect to get updated addresses
735
712
  // from the balancer, so we can ignore the re-resolution request from
736
713
  // the child policy. Otherwise, pass the re-resolution request up to the
@@ -741,11 +718,9 @@ void GrpcLb::Helper::RequestReresolution() {
741
718
  }
742
719
  }
743
720
 
744
- void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
745
- if (parent_->shutting_down_ ||
746
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
747
- return;
748
- }
721
+ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
722
+ absl::string_view message) {
723
+ if (parent_->shutting_down_) return;
749
724
  parent_->channel_control_helper()->AddTraceEvent(severity, message);
750
725
  }
751
726
 
@@ -764,6 +739,15 @@ GrpcLb::BalancerCallState::BalancerCallState(
764
739
  // the polling entities from client_channel.
765
740
  GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
766
741
  GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
742
+ // Closure Initialization
743
+ GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
744
+ grpc_schedule_on_exec_ctx);
745
+ GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
746
+ OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
747
+ GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
748
+ this, grpc_schedule_on_exec_ctx);
749
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
750
+ this, grpc_schedule_on_exec_ctx);
767
751
  const grpc_millis deadline =
768
752
  grpclb_policy()->lb_call_timeout_ms_ == 0
769
753
  ? GRPC_MILLIS_INF_FUTURE
@@ -840,8 +824,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
840
824
  // with the callback.
841
825
  auto self = Ref(DEBUG_LOCATION, "on_initial_request_sent");
842
826
  self.release();
843
- GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
844
- grpc_schedule_on_exec_ctx);
845
827
  call_error = grpc_call_start_batch_and_execute(
846
828
  lb_call_, ops, (size_t)(op - ops), &lb_on_initial_request_sent_);
847
829
  GPR_ASSERT(GRPC_CALL_OK == call_error);
@@ -864,8 +846,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
864
846
  // with the callback.
865
847
  self = Ref(DEBUG_LOCATION, "on_message_received");
866
848
  self.release();
867
- GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
868
- OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
869
849
  call_error = grpc_call_start_batch_and_execute(
870
850
  lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_message_received_);
871
851
  GPR_ASSERT(GRPC_CALL_OK == call_error);
@@ -882,8 +862,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
882
862
  // This callback signals the end of the LB call, so it relies on the initial
883
863
  // ref instead of a new ref. When it's invoked, it's the initial ref that is
884
864
  // unreffed.
885
- GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
886
- this, grpc_schedule_on_exec_ctx);
887
865
  call_error = grpc_call_start_batch_and_execute(
888
866
  lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_status_received_);
889
867
  GPR_ASSERT(GRPC_CALL_OK == call_error);
@@ -902,28 +880,27 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
902
880
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(void* arg,
903
881
  grpc_error* error) {
904
882
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
905
- lb_calld->grpclb_policy()->combiner()->Run(
906
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
907
- MaybeSendClientLoadReportLocked, lb_calld, nullptr),
908
- GRPC_ERROR_REF(error));
883
+ GRPC_ERROR_REF(error); // ref owned by lambda
884
+ lb_calld->grpclb_policy()->work_serializer()->Run(
885
+ [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
886
+ DEBUG_LOCATION);
909
887
  }
910
888
 
911
889
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
912
- void* arg, grpc_error* error) {
913
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
914
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
915
- lb_calld->client_load_report_timer_callback_pending_ = false;
916
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
917
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
890
+ grpc_error* error) {
891
+ client_load_report_timer_callback_pending_ = false;
892
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
893
+ Unref(DEBUG_LOCATION, "client_load_report");
894
+ GRPC_ERROR_UNREF(error);
918
895
  return;
919
896
  }
920
897
  // If we've already sent the initial request, then we can go ahead and send
921
898
  // the load report. Otherwise, we need to wait until the initial request has
922
899
  // been sent to send this (see OnInitialRequestSentLocked()).
923
- if (lb_calld->send_message_payload_ == nullptr) {
924
- lb_calld->SendClientLoadReportLocked();
900
+ if (send_message_payload_ == nullptr) {
901
+ SendClientLoadReportLocked();
925
902
  } else {
926
- lb_calld->client_load_report_is_due_ = true;
903
+ client_load_report_is_due_ = true;
927
904
  }
928
905
  }
929
906
 
@@ -982,140 +959,125 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
982
959
  void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
983
960
  grpc_error* error) {
984
961
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
985
- lb_calld->grpclb_policy()->combiner()->Run(
986
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
987
- ClientLoadReportDoneLocked, lb_calld, nullptr),
988
- GRPC_ERROR_REF(error));
962
+ GRPC_ERROR_REF(error); // ref owned by lambda
963
+ lb_calld->grpclb_policy()->work_serializer()->Run(
964
+ [lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
965
+ DEBUG_LOCATION);
989
966
  }
990
967
 
991
- void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(void* arg,
992
- grpc_error* error) {
993
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
994
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
995
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
996
- lb_calld->send_message_payload_ = nullptr;
997
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
998
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
968
+ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(grpc_error* error) {
969
+ grpc_byte_buffer_destroy(send_message_payload_);
970
+ send_message_payload_ = nullptr;
971
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
972
+ Unref(DEBUG_LOCATION, "client_load_report");
973
+ GRPC_ERROR_UNREF(error);
999
974
  return;
1000
975
  }
1001
- lb_calld->ScheduleNextClientLoadReportLocked();
976
+ ScheduleNextClientLoadReportLocked();
1002
977
  }
1003
978
 
1004
979
  void GrpcLb::BalancerCallState::OnInitialRequestSent(void* arg,
1005
- grpc_error* error) {
980
+ grpc_error* /*error*/) {
1006
981
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1007
- lb_calld->grpclb_policy()->combiner()->Run(
1008
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_initial_request_sent_,
1009
- OnInitialRequestSentLocked, lb_calld, nullptr),
1010
- GRPC_ERROR_REF(error));
982
+ lb_calld->grpclb_policy()->work_serializer()->Run(
983
+ [lb_calld]() { lb_calld->OnInitialRequestSentLocked(); }, DEBUG_LOCATION);
1011
984
  }
1012
985
 
1013
- void GrpcLb::BalancerCallState::OnInitialRequestSentLocked(
1014
- void* arg, grpc_error* /*error*/) {
1015
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1016
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
1017
- lb_calld->send_message_payload_ = nullptr;
986
+ void GrpcLb::BalancerCallState::OnInitialRequestSentLocked() {
987
+ grpc_byte_buffer_destroy(send_message_payload_);
988
+ send_message_payload_ = nullptr;
1018
989
  // If we attempted to send a client load report before the initial request was
1019
990
  // sent (and this lb_calld is still in use), send the load report now.
1020
- if (lb_calld->client_load_report_is_due_ &&
1021
- lb_calld == lb_calld->grpclb_policy()->lb_calld_.get()) {
1022
- lb_calld->SendClientLoadReportLocked();
1023
- lb_calld->client_load_report_is_due_ = false;
991
+ if (client_load_report_is_due_ && this == grpclb_policy()->lb_calld_.get()) {
992
+ SendClientLoadReportLocked();
993
+ client_load_report_is_due_ = false;
1024
994
  }
1025
- lb_calld->Unref(DEBUG_LOCATION, "on_initial_request_sent");
995
+ Unref(DEBUG_LOCATION, "on_initial_request_sent");
1026
996
  }
1027
997
 
1028
- void GrpcLb::BalancerCallState::OnBalancerMessageReceived(void* arg,
1029
- grpc_error* error) {
998
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
999
+ void* arg, grpc_error* /*error*/) {
1030
1000
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1031
- lb_calld->grpclb_policy()->combiner()->Run(
1032
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
1033
- OnBalancerMessageReceivedLocked, lb_calld, nullptr),
1034
- GRPC_ERROR_REF(error));
1001
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1002
+ [lb_calld]() { lb_calld->OnBalancerMessageReceivedLocked(); },
1003
+ DEBUG_LOCATION);
1035
1004
  }
1036
1005
 
1037
- void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
1038
- void* arg, grpc_error* /*error*/) {
1039
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1040
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1006
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1041
1007
  // Null payload means the LB call was cancelled.
1042
- if (lb_calld != grpclb_policy->lb_calld_.get() ||
1043
- lb_calld->recv_message_payload_ == nullptr) {
1044
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received");
1008
+ if (this != grpclb_policy()->lb_calld_.get() ||
1009
+ recv_message_payload_ == nullptr) {
1010
+ Unref(DEBUG_LOCATION, "on_message_received");
1045
1011
  return;
1046
1012
  }
1047
1013
  grpc_byte_buffer_reader bbr;
1048
- grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_);
1014
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1049
1015
  grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1050
1016
  grpc_byte_buffer_reader_destroy(&bbr);
1051
- grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
1052
- lb_calld->recv_message_payload_ = nullptr;
1017
+ grpc_byte_buffer_destroy(recv_message_payload_);
1018
+ recv_message_payload_ = nullptr;
1053
1019
  GrpcLbResponse response;
1054
1020
  upb::Arena arena;
1055
1021
  if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
1056
- (response.type == response.INITIAL && lb_calld->seen_initial_response_)) {
1022
+ (response.type == response.INITIAL && seen_initial_response_)) {
1057
1023
  char* response_slice_str =
1058
1024
  grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1059
1025
  gpr_log(GPR_ERROR,
1060
1026
  "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1061
1027
  "Ignoring.",
1062
- grpclb_policy, lb_calld, response_slice_str);
1028
+ grpclb_policy(), this, response_slice_str);
1063
1029
  gpr_free(response_slice_str);
1064
1030
  } else {
1065
1031
  switch (response.type) {
1066
1032
  case response.INITIAL: {
1067
1033
  if (response.client_stats_report_interval != 0) {
1068
- lb_calld->client_stats_report_interval_ =
1034
+ client_stats_report_interval_ =
1069
1035
  GPR_MAX(GPR_MS_PER_SEC, response.client_stats_report_interval);
1070
1036
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1071
1037
  gpr_log(GPR_INFO,
1072
1038
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1073
1039
  "message; client load reporting interval = %" PRId64
1074
1040
  " milliseconds",
1075
- grpclb_policy, lb_calld,
1076
- lb_calld->client_stats_report_interval_);
1041
+ grpclb_policy(), this, client_stats_report_interval_);
1077
1042
  }
1078
1043
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1079
1044
  gpr_log(GPR_INFO,
1080
1045
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1081
1046
  "message; client load reporting NOT enabled",
1082
- grpclb_policy, lb_calld);
1047
+ grpclb_policy(), this);
1083
1048
  }
1084
- lb_calld->seen_initial_response_ = true;
1049
+ seen_initial_response_ = true;
1085
1050
  break;
1086
1051
  }
1087
1052
  case response.SERVERLIST: {
1088
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1053
+ GPR_ASSERT(lb_call_ != nullptr);
1089
1054
  auto serverlist_wrapper =
1090
1055
  MakeRefCounted<Serverlist>(std::move(response.serverlist));
1091
1056
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1092
- grpc_core::UniquePtr<char> serverlist_text =
1093
- serverlist_wrapper->AsText();
1094
1057
  gpr_log(GPR_INFO,
1095
1058
  "[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
1096
1059
  " servers received:\n%s",
1097
- grpclb_policy, lb_calld,
1060
+ grpclb_policy(), this,
1098
1061
  serverlist_wrapper->serverlist().size(),
1099
- serverlist_text.get());
1062
+ serverlist_wrapper->AsText().c_str());
1100
1063
  }
1101
- lb_calld->seen_serverlist_ = true;
1064
+ seen_serverlist_ = true;
1102
1065
  // Start sending client load report only after we start using the
1103
1066
  // serverlist returned from the current LB call.
1104
- if (lb_calld->client_stats_report_interval_ > 0 &&
1105
- lb_calld->client_stats_ == nullptr) {
1106
- lb_calld->client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1067
+ if (client_stats_report_interval_ > 0 && client_stats_ == nullptr) {
1068
+ client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1107
1069
  // Ref held by callback.
1108
- lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release();
1109
- lb_calld->ScheduleNextClientLoadReportLocked();
1070
+ Ref(DEBUG_LOCATION, "client_load_report").release();
1071
+ ScheduleNextClientLoadReportLocked();
1110
1072
  }
1111
1073
  // Check if the serverlist differs from the previous one.
1112
- if (grpclb_policy->serverlist_ != nullptr &&
1113
- *grpclb_policy->serverlist_ == *serverlist_wrapper) {
1074
+ if (grpclb_policy()->serverlist_ != nullptr &&
1075
+ *grpclb_policy()->serverlist_ == *serverlist_wrapper) {
1114
1076
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1115
1077
  gpr_log(GPR_INFO,
1116
1078
  "[grpclb %p] lb_calld=%p: Incoming server list identical "
1117
1079
  "to current, ignoring.",
1118
- grpclb_policy, lb_calld);
1080
+ grpclb_policy(), this);
1119
1081
  }
1120
1082
  } else { // New serverlist.
1121
1083
  // Dispose of the fallback.
@@ -1137,155 +1099,135 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
1137
1099
  // the grpclb implementation at this point, since we're deprecating
1138
1100
  // it in favor of the xds policy. We will implement this the
1139
1101
  // right way in the xds policy instead.
1140
- if (grpclb_policy->fallback_mode_) {
1102
+ if (grpclb_policy()->fallback_mode_) {
1141
1103
  gpr_log(GPR_INFO,
1142
1104
  "[grpclb %p] Received response from balancer; exiting "
1143
1105
  "fallback mode",
1144
- grpclb_policy);
1145
- grpclb_policy->fallback_mode_ = false;
1106
+ grpclb_policy());
1107
+ grpclb_policy()->fallback_mode_ = false;
1146
1108
  }
1147
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1148
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1149
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1150
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1109
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1110
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1111
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1112
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1151
1113
  }
1152
1114
  // Update the serverlist in the GrpcLb instance. This serverlist
1153
1115
  // instance will be destroyed either upon the next update or when the
1154
1116
  // GrpcLb instance is destroyed.
1155
- grpclb_policy->serverlist_ = std::move(serverlist_wrapper);
1156
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1117
+ grpclb_policy()->serverlist_ = std::move(serverlist_wrapper);
1118
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1157
1119
  }
1158
1120
  break;
1159
1121
  }
1160
1122
  case response.FALLBACK: {
1161
- if (!grpclb_policy->fallback_mode_) {
1123
+ if (!grpclb_policy()->fallback_mode_) {
1162
1124
  gpr_log(GPR_INFO,
1163
1125
  "[grpclb %p] Entering fallback mode as requested by balancer",
1164
- grpclb_policy);
1165
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1166
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1167
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1168
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1126
+ grpclb_policy());
1127
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1128
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1129
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1130
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1169
1131
  }
1170
- grpclb_policy->fallback_mode_ = true;
1171
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1132
+ grpclb_policy()->fallback_mode_ = true;
1133
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1172
1134
  // Reset serverlist, so that if the balancer exits fallback
1173
1135
  // mode by sending the same serverlist we were previously
1174
1136
  // using, we don't incorrectly ignore it as a duplicate.
1175
- grpclb_policy->serverlist_.reset();
1137
+ grpclb_policy()->serverlist_.reset();
1176
1138
  }
1177
1139
  break;
1178
1140
  }
1179
1141
  }
1180
1142
  }
1181
1143
  grpc_slice_unref_internal(response_slice);
1182
- if (!grpclb_policy->shutting_down_) {
1144
+ if (!grpclb_policy()->shutting_down_) {
1183
1145
  // Keep listening for serverlist updates.
1184
1146
  grpc_op op;
1185
1147
  memset(&op, 0, sizeof(op));
1186
1148
  op.op = GRPC_OP_RECV_MESSAGE;
1187
- op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
1149
+ op.data.recv_message.recv_message = &recv_message_payload_;
1188
1150
  op.flags = 0;
1189
1151
  op.reserved = nullptr;
1190
1152
  // Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
1191
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
1192
- GrpcLb::BalancerCallState::OnBalancerMessageReceived,
1193
- lb_calld, grpc_schedule_on_exec_ctx);
1194
1153
  const grpc_call_error call_error = grpc_call_start_batch_and_execute(
1195
- lb_calld->lb_call_, &op, 1,
1196
- &lb_calld->lb_on_balancer_message_received_);
1154
+ lb_call_, &op, 1, &lb_on_balancer_message_received_);
1197
1155
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1198
1156
  } else {
1199
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1157
+ Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1200
1158
  }
1201
1159
  }
1202
1160
 
1203
1161
  void GrpcLb::BalancerCallState::OnBalancerStatusReceived(void* arg,
1204
1162
  grpc_error* error) {
1205
1163
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1206
- lb_calld->grpclb_policy()->combiner()->Run(
1207
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_status_received_,
1208
- OnBalancerStatusReceivedLocked, lb_calld, nullptr),
1209
- GRPC_ERROR_REF(error));
1164
+ GRPC_ERROR_REF(error); // owned by lambda
1165
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1166
+ [lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
1167
+ DEBUG_LOCATION);
1210
1168
  }
1211
1169
 
1212
1170
  void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1213
- void* arg, grpc_error* error) {
1214
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1215
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1216
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1171
+ grpc_error* error) {
1172
+ GPR_ASSERT(lb_call_ != nullptr);
1217
1173
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1218
- char* status_details =
1219
- grpc_slice_to_c_string(lb_calld->lb_call_status_details_);
1174
+ char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
1220
1175
  gpr_log(GPR_INFO,
1221
1176
  "[grpclb %p] lb_calld=%p: Status from LB server received. "
1222
1177
  "Status = %d, details = '%s', (lb_call: %p), error '%s'",
1223
- grpclb_policy, lb_calld, lb_calld->lb_call_status_, status_details,
1224
- lb_calld->lb_call_, grpc_error_string(error));
1178
+ grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
1179
+ grpc_error_string(error));
1225
1180
  gpr_free(status_details);
1226
1181
  }
1182
+ GRPC_ERROR_UNREF(error);
1227
1183
  // If this lb_calld is still in use, this call ended because of a failure so
1228
1184
  // we want to retry connecting. Otherwise, we have deliberately ended this
1229
1185
  // call and no further action is required.
1230
- if (lb_calld == grpclb_policy->lb_calld_.get()) {
1186
+ if (this == grpclb_policy()->lb_calld_.get()) {
1231
1187
  // If the fallback-at-startup checks are pending, go into fallback mode
1232
1188
  // immediately. This short-circuits the timeout for the fallback-at-startup
1233
1189
  // case.
1234
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1235
- GPR_ASSERT(!lb_calld->seen_serverlist_);
1190
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1191
+ GPR_ASSERT(!seen_serverlist_);
1236
1192
  gpr_log(GPR_INFO,
1237
1193
  "[grpclb %p] Balancer call finished without receiving "
1238
1194
  "serverlist; entering fallback mode",
1239
- grpclb_policy);
1240
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1241
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1242
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1243
- grpclb_policy->fallback_mode_ = true;
1244
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1195
+ grpclb_policy());
1196
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1197
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1198
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1199
+ grpclb_policy()->fallback_mode_ = true;
1200
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1245
1201
  } else {
1246
1202
  // This handles the fallback-after-startup case.
1247
- grpclb_policy->MaybeEnterFallbackModeAfterStartup();
1203
+ grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
1248
1204
  }
1249
- grpclb_policy->lb_calld_.reset();
1250
- GPR_ASSERT(!grpclb_policy->shutting_down_);
1251
- grpclb_policy->channel_control_helper()->RequestReresolution();
1252
- if (lb_calld->seen_initial_response_) {
1205
+ grpclb_policy()->lb_calld_.reset();
1206
+ GPR_ASSERT(!grpclb_policy()->shutting_down_);
1207
+ grpclb_policy()->channel_control_helper()->RequestReresolution();
1208
+ if (seen_initial_response_) {
1253
1209
  // If we lose connection to the LB server, reset the backoff and restart
1254
1210
  // the LB call immediately.
1255
- grpclb_policy->lb_call_backoff_.Reset();
1256
- grpclb_policy->StartBalancerCallLocked();
1211
+ grpclb_policy()->lb_call_backoff_.Reset();
1212
+ grpclb_policy()->StartBalancerCallLocked();
1257
1213
  } else {
1258
1214
  // If this LB call fails establishing any connection to the LB server,
1259
1215
  // retry later.
1260
- grpclb_policy->StartBalancerCallRetryTimerLocked();
1216
+ grpclb_policy()->StartBalancerCallRetryTimerLocked();
1261
1217
  }
1262
1218
  }
1263
- lb_calld->Unref(DEBUG_LOCATION, "lb_call_ended");
1219
+ Unref(DEBUG_LOCATION, "lb_call_ended");
1264
1220
  }
1265
1221
 
1266
1222
  //
1267
1223
  // helper code for creating balancer channel
1268
1224
  //
1269
1225
 
1270
- ServerAddressList ExtractBalancerAddresses(const ServerAddressList& addresses) {
1271
- ServerAddressList balancer_addresses;
1272
- for (size_t i = 0; i < addresses.size(); ++i) {
1273
- if (addresses[i].IsBalancer()) {
1274
- // Strip out the is_balancer channel arg, since we don't want to
1275
- // recursively use the grpclb policy in the channel used to talk to
1276
- // the balancers. Note that we do NOT strip out the balancer_name
1277
- // channel arg, since we need that to set the authority correctly
1278
- // to talk to the balancers.
1279
- static const char* args_to_remove[] = {
1280
- GRPC_ARG_ADDRESS_IS_BALANCER,
1281
- };
1282
- balancer_addresses.emplace_back(
1283
- addresses[i].address(),
1284
- grpc_channel_args_copy_and_remove(addresses[i].args(), args_to_remove,
1285
- GPR_ARRAY_SIZE(args_to_remove)));
1286
- }
1287
- }
1288
- return balancer_addresses;
1226
+ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1227
+ const ServerAddressList* addresses =
1228
+ FindGrpclbBalancerAddressesInChannelArgs(args);
1229
+ if (addresses != nullptr) return *addresses;
1230
+ return ServerAddressList();
1289
1231
  }
1290
1232
 
1291
1233
  /* Returns the channel args for the LB channel, used to create a bidirectional
@@ -1329,7 +1271,7 @@ grpc_channel_args* BuildBalancerChannelArgs(
1329
1271
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1330
1272
  };
1331
1273
  // Channel args to add.
1332
- InlinedVector<grpc_arg, 3> args_to_add;
1274
+ absl::InlinedVector<grpc_arg, 3> args_to_add;
1333
1275
  // The fake resolver response generator, which we use to inject
1334
1276
  // address updates into the LB channel.
1335
1277
  args_to_add.emplace_back(
@@ -1371,6 +1313,11 @@ GrpcLb::GrpcLb(Args args)
1371
1313
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1372
1314
  .set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
1373
1315
  1000)) {
1316
+ // Closure Initialization
1317
+ GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1318
+ grpc_schedule_on_exec_ctx);
1319
+ GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1320
+ grpc_schedule_on_exec_ctx);
1374
1321
  // Record server name.
1375
1322
  const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
1376
1323
  const char* server_uri = grpc_channel_arg_get_string(arg);
@@ -1405,19 +1352,15 @@ void GrpcLb::ShutdownLocked() {
1405
1352
  grpc_timer_cancel(&lb_call_retry_timer_);
1406
1353
  }
1407
1354
  if (fallback_at_startup_checks_pending_) {
1355
+ fallback_at_startup_checks_pending_ = false;
1408
1356
  grpc_timer_cancel(&lb_fallback_timer_);
1409
1357
  CancelBalancerChannelConnectivityWatchLocked();
1410
1358
  }
1411
1359
  if (child_policy_ != nullptr) {
1412
1360
  grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
1413
1361
  interested_parties());
1362
+ child_policy_.reset();
1414
1363
  }
1415
- if (pending_child_policy_ != nullptr) {
1416
- grpc_pollset_set_del_pollset_set(
1417
- pending_child_policy_->interested_parties(), interested_parties());
1418
- }
1419
- child_policy_.reset();
1420
- pending_child_policy_.reset();
1421
1364
  // We destroy the LB channel here instead of in our destructor because
1422
1365
  // destroying the channel triggers a last callback to
1423
1366
  // OnBalancerChannelConnectivityChangedLocked(), and we need to be
@@ -1439,15 +1382,11 @@ void GrpcLb::ResetBackoffLocked() {
1439
1382
  if (child_policy_ != nullptr) {
1440
1383
  child_policy_->ResetBackoffLocked();
1441
1384
  }
1442
- if (pending_child_policy_ != nullptr) {
1443
- pending_child_policy_->ResetBackoffLocked();
1444
- }
1445
1385
  }
1446
1386
 
1447
1387
  void GrpcLb::UpdateLocked(UpdateArgs args) {
1448
1388
  const bool is_initial_update = lb_channel_ == nullptr;
1449
- auto* grpclb_config =
1450
- static_cast<const ParsedGrpcLbConfig*>(args.config.get());
1389
+ auto* grpclb_config = static_cast<const GrpcLbConfig*>(args.config.get());
1451
1390
  if (grpclb_config != nullptr) {
1452
1391
  child_policy_config_ = grpclb_config->child_policy();
1453
1392
  } else {
@@ -1463,8 +1402,6 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1463
1402
  // Start timer.
1464
1403
  grpc_millis deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
1465
1404
  Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
1466
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1467
- grpc_schedule_on_exec_ctx);
1468
1405
  grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
1469
1406
  // Start watching the channel's connectivity state. If the channel
1470
1407
  // goes into state TRANSIENT_FAILURE before the timer fires, we go into
@@ -1473,15 +1410,10 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1473
1410
  grpc_channel_get_channel_stack(lb_channel_));
1474
1411
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1475
1412
  // Ref held by callback.
1476
- Ref(DEBUG_LOCATION, "watch_lb_channel_connectivity").release();
1477
- GRPC_CLOSURE_INIT(&lb_channel_on_connectivity_changed_,
1478
- &GrpcLb::OnBalancerChannelConnectivityChanged, this,
1479
- grpc_schedule_on_exec_ctx);
1480
- grpc_client_channel_watch_connectivity_state(
1481
- client_channel_elem,
1482
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1483
- &lb_channel_connectivity_, &lb_channel_on_connectivity_changed_,
1484
- nullptr);
1413
+ watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1414
+ grpc_client_channel_start_connectivity_watch(
1415
+ client_channel_elem, GRPC_CHANNEL_IDLE,
1416
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
1485
1417
  // Start balancer call.
1486
1418
  StartBalancerCallLocked();
1487
1419
  }
@@ -1491,27 +1423,25 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1491
1423
  // helpers for UpdateLocked()
1492
1424
  //
1493
1425
 
1494
- // Returns the backend addresses extracted from the given addresses.
1495
- ServerAddressList ExtractBackendAddresses(const ServerAddressList& addresses) {
1426
+ ServerAddressList AddNullLbTokenToAddresses(
1427
+ const ServerAddressList& addresses) {
1496
1428
  static const char* lb_token = "";
1497
1429
  grpc_arg arg = grpc_channel_arg_pointer_create(
1498
1430
  const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
1499
1431
  const_cast<char*>(lb_token), &lb_token_arg_vtable);
1500
- ServerAddressList backend_addresses;
1432
+ ServerAddressList addresses_out;
1501
1433
  for (size_t i = 0; i < addresses.size(); ++i) {
1502
- if (!addresses[i].IsBalancer()) {
1503
- backend_addresses.emplace_back(
1504
- addresses[i].address(),
1505
- grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1506
- }
1434
+ addresses_out.emplace_back(
1435
+ addresses[i].address(),
1436
+ grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1507
1437
  }
1508
- return backend_addresses;
1438
+ return addresses_out;
1509
1439
  }
1510
1440
 
1511
1441
  void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1512
1442
  const ServerAddressList& addresses, const grpc_channel_args& args) {
1513
1443
  // Update fallback address list.
1514
- fallback_backend_addresses_ = ExtractBackendAddresses(addresses);
1444
+ fallback_backend_addresses_ = AddNullLbTokenToAddresses(addresses);
1515
1445
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1516
1446
  // since we use this to trigger the client_load_reporting filter.
1517
1447
  static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
@@ -1521,7 +1451,7 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1521
1451
  args_ = grpc_channel_args_copy_and_add_and_remove(
1522
1452
  &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1523
1453
  // Construct args for balancer channel.
1524
- ServerAddressList balancer_addresses = ExtractBalancerAddresses(addresses);
1454
+ ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1525
1455
  grpc_channel_args* lb_channel_args = BuildBalancerChannelArgs(
1526
1456
  balancer_addresses, response_generator_.get(), &args);
1527
1457
  // Create balancer channel if needed.
@@ -1540,60 +1470,11 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1540
1470
  response_generator_->SetResponse(std::move(result));
1541
1471
  }
1542
1472
 
1543
- void GrpcLb::OnBalancerChannelConnectivityChanged(void* arg,
1544
- grpc_error* error) {
1545
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1546
- self->combiner()->Run(
1547
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1548
- &GrpcLb::OnBalancerChannelConnectivityChangedLocked,
1549
- self, nullptr),
1550
- GRPC_ERROR_REF(error));
1551
- }
1552
-
1553
- void GrpcLb::OnBalancerChannelConnectivityChangedLocked(void* arg,
1554
- grpc_error* /*error*/) {
1555
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1556
- if (!self->shutting_down_ && self->fallback_at_startup_checks_pending_) {
1557
- if (self->lb_channel_connectivity_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1558
- // Not in TRANSIENT_FAILURE. Renew connectivity watch.
1559
- grpc_channel_element* client_channel_elem =
1560
- grpc_channel_stack_last_element(
1561
- grpc_channel_get_channel_stack(self->lb_channel_));
1562
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1563
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1564
- &GrpcLb::OnBalancerChannelConnectivityChanged, self,
1565
- grpc_schedule_on_exec_ctx);
1566
- grpc_client_channel_watch_connectivity_state(
1567
- client_channel_elem,
1568
- grpc_polling_entity_create_from_pollset_set(
1569
- self->interested_parties()),
1570
- &self->lb_channel_connectivity_,
1571
- &self->lb_channel_on_connectivity_changed_, nullptr);
1572
- return; // Early out so we don't drop the ref below.
1573
- }
1574
- // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
1575
- // fallback mode immediately.
1576
- gpr_log(GPR_INFO,
1577
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
1578
- "entering fallback mode",
1579
- self);
1580
- self->fallback_at_startup_checks_pending_ = false;
1581
- grpc_timer_cancel(&self->lb_fallback_timer_);
1582
- self->fallback_mode_ = true;
1583
- self->CreateOrUpdateChildPolicyLocked();
1584
- }
1585
- // Done watching connectivity state, so drop ref.
1586
- self->Unref(DEBUG_LOCATION, "watch_lb_channel_connectivity");
1587
- }
1588
-
1589
1473
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
1590
1474
  grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
1591
1475
  grpc_channel_get_channel_stack(lb_channel_));
1592
1476
  GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1593
- grpc_client_channel_watch_connectivity_state(
1594
- client_channel_elem,
1595
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1596
- nullptr, &lb_channel_on_connectivity_changed_, nullptr);
1477
+ grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
1597
1478
  }
1598
1479
 
1599
1480
  //
@@ -1632,33 +1513,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1632
1513
  // with the callback.
1633
1514
  auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1634
1515
  self.release();
1635
- GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1636
- grpc_schedule_on_exec_ctx);
1637
1516
  retry_timer_callback_pending_ = true;
1638
1517
  grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
1639
1518
  }
1640
1519
 
1641
1520
  void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error* error) {
1642
1521
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1643
- grpclb_policy->combiner()->Run(
1644
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_call_retry_,
1645
- &GrpcLb::OnBalancerCallRetryTimerLocked, grpclb_policy,
1646
- nullptr),
1647
- GRPC_ERROR_REF(error));
1522
+ GRPC_ERROR_REF(error); // ref owned by lambda
1523
+ grpclb_policy->work_serializer()->Run(
1524
+ [grpclb_policy, error]() {
1525
+ grpclb_policy->OnBalancerCallRetryTimerLocked(error);
1526
+ },
1527
+ DEBUG_LOCATION);
1648
1528
  }
1649
1529
 
1650
- void GrpcLb::OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error) {
1651
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1652
- grpclb_policy->retry_timer_callback_pending_ = false;
1653
- if (!grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE &&
1654
- grpclb_policy->lb_calld_ == nullptr) {
1530
+ void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error* error) {
1531
+ retry_timer_callback_pending_ = false;
1532
+ if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1655
1533
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1656
- gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server",
1657
- grpclb_policy);
1534
+ gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1658
1535
  }
1659
- grpclb_policy->StartBalancerCallLocked();
1536
+ StartBalancerCallLocked();
1660
1537
  }
1661
- grpclb_policy->Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1538
+ Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1539
+ GRPC_ERROR_UNREF(error);
1662
1540
  }
1663
1541
 
1664
1542
  //
@@ -1685,28 +1563,28 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
1685
1563
 
1686
1564
  void GrpcLb::OnFallbackTimer(void* arg, grpc_error* error) {
1687
1565
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1688
- grpclb_policy->combiner()->Run(
1689
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_fallback_,
1690
- &GrpcLb::OnFallbackTimerLocked, grpclb_policy, nullptr),
1691
- GRPC_ERROR_REF(error));
1566
+ GRPC_ERROR_REF(error); // ref owned by lambda
1567
+ grpclb_policy->work_serializer()->Run(
1568
+ [grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
1569
+ DEBUG_LOCATION);
1692
1570
  }
1693
1571
 
1694
- void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1695
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1572
+ void GrpcLb::OnFallbackTimerLocked(grpc_error* error) {
1696
1573
  // If we receive a serverlist after the timer fires but before this callback
1697
1574
  // actually runs, don't fall back.
1698
- if (grpclb_policy->fallback_at_startup_checks_pending_ &&
1699
- !grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE) {
1575
+ if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1576
+ error == GRPC_ERROR_NONE) {
1700
1577
  gpr_log(GPR_INFO,
1701
1578
  "[grpclb %p] No response from balancer after fallback timeout; "
1702
1579
  "entering fallback mode",
1703
- grpclb_policy);
1704
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1705
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1706
- grpclb_policy->fallback_mode_ = true;
1707
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1580
+ this);
1581
+ fallback_at_startup_checks_pending_ = false;
1582
+ CancelBalancerChannelConnectivityWatchLocked();
1583
+ fallback_mode_ = true;
1584
+ CreateOrUpdateChildPolicyLocked();
1708
1585
  }
1709
- grpclb_policy->Unref(DEBUG_LOCATION, "on_fallback_timer");
1586
+ Unref(DEBUG_LOCATION, "on_fallback_timer");
1587
+ GRPC_ERROR_UNREF(error);
1710
1588
  }
1711
1589
 
1712
1590
  //
@@ -1715,7 +1593,7 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1715
1593
 
1716
1594
  grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1717
1595
  bool is_backend_from_grpclb_load_balancer) {
1718
- InlinedVector<grpc_arg, 2> args_to_add;
1596
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
1719
1597
  args_to_add.emplace_back(grpc_channel_arg_integer_create(
1720
1598
  const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1721
1599
  is_backend_from_grpclb_load_balancer));
@@ -1728,25 +1606,17 @@ grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1728
1606
  }
1729
1607
 
1730
1608
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1731
- const char* name, const grpc_channel_args* args) {
1732
- Helper* helper = new Helper(Ref());
1609
+ const grpc_channel_args* args) {
1733
1610
  LoadBalancingPolicy::Args lb_policy_args;
1734
- lb_policy_args.combiner = combiner();
1611
+ lb_policy_args.work_serializer = work_serializer();
1735
1612
  lb_policy_args.args = args;
1736
- lb_policy_args.channel_control_helper =
1737
- std::unique_ptr<ChannelControlHelper>(helper);
1613
+ lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
1738
1614
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1739
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
1740
- name, std::move(lb_policy_args));
1741
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
1742
- gpr_log(GPR_ERROR, "[grpclb %p] Failure creating child policy %s", this,
1743
- name);
1744
- return nullptr;
1745
- }
1746
- helper->set_child(lb_policy.get());
1615
+ MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1616
+ &grpc_lb_glb_trace);
1747
1617
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1748
- gpr_log(GPR_INFO, "[grpclb %p] Created new child policy %s (%p)", this,
1749
- name, lb_policy.get());
1618
+ gpr_log(GPR_INFO, "[grpclb %p] Created new child policy handler (%p)", this,
1619
+ lb_policy.get());
1750
1620
  }
1751
1621
  // Add the gRPC LB's interested_parties pollset_set to that of the newly
1752
1622
  // created child policy. This will make the child policy progress upon
@@ -1777,97 +1647,16 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1777
1647
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1778
1648
  GPR_ASSERT(update_args.args != nullptr);
1779
1649
  update_args.config = child_policy_config_;
1780
- // If the child policy name changes, we need to create a new child
1781
- // policy. When this happens, we leave child_policy_ as-is and store
1782
- // the new child policy in pending_child_policy_. Once the new child
1783
- // policy transitions into state READY, we swap it into child_policy_,
1784
- // replacing the original child policy. So pending_child_policy_ is
1785
- // non-null only between when we apply an update that changes the child
1786
- // policy name and when the new child reports state READY.
1787
- //
1788
- // Updates can arrive at any point during this transition. We always
1789
- // apply updates relative to the most recently created child policy,
1790
- // even if the most recent one is still in pending_child_policy_. This
1791
- // is true both when applying the updates to an existing child policy
1792
- // and when determining whether we need to create a new policy.
1793
- //
1794
- // As a result of this, there are several cases to consider here:
1795
- //
1796
- // 1. We have no existing child policy (i.e., we have started up but
1797
- // have not yet received a serverlist from the balancer or gone
1798
- // into fallback mode; in this case, both child_policy_ and
1799
- // pending_child_policy_ are null). In this case, we create a
1800
- // new child policy and store it in child_policy_.
1801
- //
1802
- // 2. We have an existing child policy and have no pending child policy
1803
- // from a previous update (i.e., either there has not been a
1804
- // previous update that changed the policy name, or we have already
1805
- // finished swapping in the new policy; in this case, child_policy_
1806
- // is non-null but pending_child_policy_ is null). In this case:
1807
- // a. If child_policy_->name() equals child_policy_name, then we
1808
- // update the existing child policy.
1809
- // b. If child_policy_->name() does not equal child_policy_name,
1810
- // we create a new policy. The policy will be stored in
1811
- // pending_child_policy_ and will later be swapped into
1812
- // child_policy_ by the helper when the new child transitions
1813
- // into state READY.
1814
- //
1815
- // 3. We have an existing child policy and have a pending child policy
1816
- // from a previous update (i.e., a previous update set
1817
- // pending_child_policy_ as per case 2b above and that policy has
1818
- // not yet transitioned into state READY and been swapped into
1819
- // child_policy_; in this case, both child_policy_ and
1820
- // pending_child_policy_ are non-null). In this case:
1821
- // a. If pending_child_policy_->name() equals child_policy_name,
1822
- // then we update the existing pending child policy.
1823
- // b. If pending_child_policy->name() does not equal
1824
- // child_policy_name, then we create a new policy. The new
1825
- // policy is stored in pending_child_policy_ (replacing the one
1826
- // that was there before, which will be immediately shut down)
1827
- // and will later be swapped into child_policy_ by the helper
1828
- // when the new child transitions into state READY.
1829
- const char* child_policy_name = child_policy_config_ == nullptr
1830
- ? "round_robin"
1831
- : child_policy_config_->name();
1832
- const bool create_policy =
1833
- // case 1
1834
- child_policy_ == nullptr ||
1835
- // case 2b
1836
- (pending_child_policy_ == nullptr &&
1837
- strcmp(child_policy_->name(), child_policy_name) != 0) ||
1838
- // case 3b
1839
- (pending_child_policy_ != nullptr &&
1840
- strcmp(pending_child_policy_->name(), child_policy_name) != 0);
1841
- LoadBalancingPolicy* policy_to_update = nullptr;
1842
- if (create_policy) {
1843
- // Cases 1, 2b, and 3b: create a new child policy.
1844
- // If child_policy_ is null, we set it (case 1), else we set
1845
- // pending_child_policy_ (cases 2b and 3b).
1846
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1847
- gpr_log(GPR_INFO, "[grpclb %p] Creating new %schild policy %s", this,
1848
- child_policy_ == nullptr ? "" : "pending ", child_policy_name);
1849
- }
1850
- // Swap the policy into place.
1851
- auto& lb_policy =
1852
- child_policy_ == nullptr ? child_policy_ : pending_child_policy_;
1853
- lb_policy = CreateChildPolicyLocked(child_policy_name, update_args.args);
1854
- policy_to_update = lb_policy.get();
1855
- } else {
1856
- // Cases 2a and 3a: update an existing policy.
1857
- // If we have a pending child policy, send the update to the pending
1858
- // policy (case 3a), else send it to the current policy (case 2a).
1859
- policy_to_update = pending_child_policy_ != nullptr
1860
- ? pending_child_policy_.get()
1861
- : child_policy_.get();
1650
+ // Create child policy if needed.
1651
+ if (child_policy_ == nullptr) {
1652
+ child_policy_ = CreateChildPolicyLocked(update_args.args);
1862
1653
  }
1863
- GPR_ASSERT(policy_to_update != nullptr);
1864
1654
  // Update the policy.
1865
1655
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1866
- gpr_log(GPR_INFO, "[grpclb %p] Updating %schild policy %p", this,
1867
- policy_to_update == pending_child_policy_.get() ? "pending " : "",
1868
- policy_to_update);
1656
+ gpr_log(GPR_INFO, "[grpclb %p] Updating child policy handler %p", this,
1657
+ child_policy_.get());
1869
1658
  }
1870
- policy_to_update->UpdateLocked(std::move(update_args));
1659
+ child_policy_->UpdateLocked(std::move(update_args));
1871
1660
  }
1872
1661
 
1873
1662
  //
@@ -1884,33 +1673,35 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1884
1673
  const char* name() const override { return kGrpclb; }
1885
1674
 
1886
1675
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1887
- const grpc_json* json, grpc_error** error) const override {
1676
+ const Json& json, grpc_error** error) const override {
1888
1677
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1889
- if (json == nullptr) {
1890
- return RefCountedPtr<LoadBalancingPolicy::Config>(
1891
- new ParsedGrpcLbConfig(nullptr));
1678
+ if (json.type() == Json::Type::JSON_NULL) {
1679
+ return MakeRefCounted<GrpcLbConfig>(nullptr);
1892
1680
  }
1893
- InlinedVector<grpc_error*, 2> error_list;
1894
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
1895
- for (const grpc_json* field = json->child; field != nullptr;
1896
- field = field->next) {
1897
- if (field->key == nullptr) continue;
1898
- if (strcmp(field->key, "childPolicy") == 0) {
1899
- if (child_policy != nullptr) {
1900
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1901
- "field:childPolicy error:Duplicate entry"));
1902
- }
1903
- grpc_error* parse_error = GRPC_ERROR_NONE;
1904
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1905
- field, &parse_error);
1906
- if (parse_error != GRPC_ERROR_NONE) {
1907
- error_list.push_back(parse_error);
1908
- }
1909
- }
1681
+ std::vector<grpc_error*> error_list;
1682
+ Json child_policy_config_json_tmp;
1683
+ const Json* child_policy_config_json;
1684
+ auto it = json.object_value().find("childPolicy");
1685
+ if (it == json.object_value().end()) {
1686
+ child_policy_config_json_tmp = Json::Array{Json::Object{
1687
+ {"round_robin", Json::Object()},
1688
+ }};
1689
+ child_policy_config_json = &child_policy_config_json_tmp;
1690
+ } else {
1691
+ child_policy_config_json = &it->second;
1692
+ }
1693
+ grpc_error* parse_error = GRPC_ERROR_NONE;
1694
+ RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1695
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1696
+ *child_policy_config_json, &parse_error);
1697
+ if (parse_error != GRPC_ERROR_NONE) {
1698
+ std::vector<grpc_error*> child_errors;
1699
+ child_errors.push_back(parse_error);
1700
+ error_list.push_back(
1701
+ GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1910
1702
  }
1911
1703
  if (error_list.empty()) {
1912
- return RefCountedPtr<LoadBalancingPolicy::Config>(
1913
- new ParsedGrpcLbConfig(std::move(child_policy)));
1704
+ return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config));
1914
1705
  } else {
1915
1706
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1916
1707
  return nullptr;
@@ -1953,7 +1744,7 @@ bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1953
1744
  void grpc_lb_policy_grpclb_init() {
1954
1745
  grpc_core::LoadBalancingPolicyRegistry::Builder::
1955
1746
  RegisterLoadBalancingPolicyFactory(
1956
- grpc_core::MakeUnique<grpc_core::GrpcLbFactory>());
1747
+ absl::make_unique<grpc_core::GrpcLbFactory>());
1957
1748
  grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
1958
1749
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1959
1750
  maybe_add_client_load_reporting_filter,