grpc 1.26.0 → 1.30.0

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

Potentially problematic release.


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

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