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
@@ -1,1898 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include "src/core/lib/iomgr/sockaddr.h"
22
- #include "src/core/lib/iomgr/socket_utils.h"
23
-
24
- #include <inttypes.h>
25
- #include <limits.h>
26
- #include <string.h>
27
-
28
- #include <grpc/grpc.h>
29
- #include <grpc/support/alloc.h>
30
- #include <grpc/support/string_util.h>
31
- #include <grpc/support/time.h>
32
-
33
- #include "src/core/ext/filters/client_channel/client_channel.h"
34
- #include "src/core/ext/filters/client_channel/lb_policy.h"
35
- #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
36
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
37
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
38
- #include "src/core/ext/filters/client_channel/parse_address.h"
39
- #include "src/core/ext/filters/client_channel/server_address.h"
40
- #include "src/core/ext/filters/client_channel/service_config.h"
41
- #include "src/core/ext/filters/client_channel/xds/xds_client.h"
42
- #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
43
- #include "src/core/lib/backoff/backoff.h"
44
- #include "src/core/lib/channel/channel_args.h"
45
- #include "src/core/lib/channel/channel_stack.h"
46
- #include "src/core/lib/gpr/string.h"
47
- #include "src/core/lib/gprpp/manual_constructor.h"
48
- #include "src/core/lib/gprpp/map.h"
49
- #include "src/core/lib/gprpp/memory.h"
50
- #include "src/core/lib/gprpp/orphanable.h"
51
- #include "src/core/lib/gprpp/ref_counted_ptr.h"
52
- #include "src/core/lib/gprpp/sync.h"
53
- #include "src/core/lib/iomgr/combiner.h"
54
- #include "src/core/lib/iomgr/sockaddr.h"
55
- #include "src/core/lib/iomgr/sockaddr_utils.h"
56
- #include "src/core/lib/iomgr/timer.h"
57
- #include "src/core/lib/slice/slice_hash_table.h"
58
- #include "src/core/lib/slice/slice_internal.h"
59
- #include "src/core/lib/slice/slice_string_helpers.h"
60
- #include "src/core/lib/surface/call.h"
61
- #include "src/core/lib/surface/channel.h"
62
- #include "src/core/lib/surface/channel_init.h"
63
- #include "src/core/lib/transport/static_metadata.h"
64
-
65
- #define GRPC_XDS_DEFAULT_FALLBACK_TIMEOUT_MS 10000
66
- #define GRPC_XDS_DEFAULT_LOCALITY_RETENTION_INTERVAL_MS (15 * 60 * 1000)
67
- #define GRPC_XDS_DEFAULT_FAILOVER_TIMEOUT_MS 10000
68
-
69
- namespace grpc_core {
70
-
71
- TraceFlag grpc_lb_xds_trace(false, "xds");
72
-
73
- namespace {
74
-
75
- constexpr char kXds[] = "xds_experimental";
76
-
77
- class ParsedXdsConfig : public LoadBalancingPolicy::Config {
78
- public:
79
- ParsedXdsConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
80
- RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy,
81
- grpc_core::UniquePtr<char> eds_service_name,
82
- grpc_core::UniquePtr<char> lrs_load_reporting_server_name)
83
- : child_policy_(std::move(child_policy)),
84
- fallback_policy_(std::move(fallback_policy)),
85
- eds_service_name_(std::move(eds_service_name)),
86
- lrs_load_reporting_server_name_(
87
- std::move(lrs_load_reporting_server_name)) {}
88
-
89
- const char* name() const override { return kXds; }
90
-
91
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
92
- return child_policy_;
93
- }
94
-
95
- RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy() const {
96
- return fallback_policy_;
97
- }
98
-
99
- const char* eds_service_name() const { return eds_service_name_.get(); };
100
-
101
- const char* lrs_load_reporting_server_name() const {
102
- return lrs_load_reporting_server_name_.get();
103
- };
104
-
105
- private:
106
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
107
- RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy_;
108
- grpc_core::UniquePtr<char> eds_service_name_;
109
- grpc_core::UniquePtr<char> lrs_load_reporting_server_name_;
110
- };
111
-
112
- class XdsLb : public LoadBalancingPolicy {
113
- public:
114
- explicit XdsLb(Args args);
115
-
116
- const char* name() const override { return kXds; }
117
-
118
- void UpdateLocked(UpdateArgs args) override;
119
- void ResetBackoffLocked() override;
120
-
121
- private:
122
- class EndpointWatcher;
123
-
124
- // We need this wrapper for the following reasons:
125
- // 1. To process per-locality load reporting.
126
- // 2. Since pickers are std::unique_ptrs we use this RefCounted wrapper to
127
- // control
128
- // references to it by the xds picker and the locality.
129
- class EndpointPickerWrapper : public RefCounted<EndpointPickerWrapper> {
130
- public:
131
- EndpointPickerWrapper(
132
- std::unique_ptr<SubchannelPicker> picker,
133
- RefCountedPtr<XdsClientStats::LocalityStats> locality_stats)
134
- : picker_(std::move(picker)),
135
- locality_stats_(std::move(locality_stats)) {
136
- locality_stats_->RefByPicker();
137
- }
138
- ~EndpointPickerWrapper() { locality_stats_->UnrefByPicker(); }
139
-
140
- PickResult Pick(PickArgs args);
141
-
142
- private:
143
- std::unique_ptr<SubchannelPicker> picker_;
144
- RefCountedPtr<XdsClientStats::LocalityStats> locality_stats_;
145
- };
146
-
147
- // The picker will use a stateless weighting algorithm to pick the locality to
148
- // use for each request.
149
- class LocalityPicker : public SubchannelPicker {
150
- public:
151
- // Maintains a weighted list of pickers from each locality that is in ready
152
- // state. The first element in the pair represents the end of a range
153
- // proportional to the locality's weight. The start of the range is the
154
- // previous value in the vector and is 0 for the first element.
155
- using PickerList =
156
- InlinedVector<std::pair<uint32_t, RefCountedPtr<EndpointPickerWrapper>>,
157
- 1>;
158
- LocalityPicker(RefCountedPtr<XdsLb> xds_policy, PickerList pickers)
159
- : xds_policy_(std::move(xds_policy)),
160
- pickers_(std::move(pickers)),
161
- drop_config_(xds_policy_->drop_config_) {}
162
-
163
- PickResult Pick(PickArgs args) override;
164
-
165
- private:
166
- // Calls the picker of the locality that the key falls within.
167
- PickResult PickFromLocality(const uint32_t key, PickArgs args);
168
-
169
- RefCountedPtr<XdsLb> xds_policy_;
170
- PickerList pickers_;
171
- RefCountedPtr<XdsDropConfig> drop_config_;
172
- };
173
-
174
- class FallbackHelper : public ChannelControlHelper {
175
- public:
176
- explicit FallbackHelper(RefCountedPtr<XdsLb> parent)
177
- : parent_(std::move(parent)) {}
178
-
179
- ~FallbackHelper() { parent_.reset(DEBUG_LOCATION, "FallbackHelper"); }
180
-
181
- RefCountedPtr<SubchannelInterface> CreateSubchannel(
182
- const grpc_channel_args& args) override;
183
- void UpdateState(grpc_connectivity_state state,
184
- std::unique_ptr<SubchannelPicker> picker) override;
185
- void RequestReresolution() override;
186
- void AddTraceEvent(TraceSeverity severity, StringView message) override;
187
-
188
- void set_child(LoadBalancingPolicy* child) { child_ = child; }
189
-
190
- private:
191
- bool CalledByPendingFallback() const;
192
- bool CalledByCurrentFallback() const;
193
-
194
- RefCountedPtr<XdsLb> parent_;
195
- LoadBalancingPolicy* child_ = nullptr;
196
- };
197
-
198
- // There is only one PriorityList instance, which has the same lifetime with
199
- // the XdsLb instance.
200
- class PriorityList {
201
- public:
202
- // Each LocalityMap holds a ref to the XdsLb.
203
- class LocalityMap : public InternallyRefCounted<LocalityMap> {
204
- public:
205
- // Each Locality holds a ref to the LocalityMap it is in.
206
- class Locality : public InternallyRefCounted<Locality> {
207
- public:
208
- Locality(RefCountedPtr<LocalityMap> locality_map,
209
- RefCountedPtr<XdsLocalityName> name);
210
- ~Locality();
211
-
212
- void UpdateLocked(uint32_t locality_weight,
213
- ServerAddressList serverlist);
214
- void ShutdownLocked();
215
- void ResetBackoffLocked();
216
- void DeactivateLocked();
217
- void Orphan() override;
218
-
219
- grpc_connectivity_state connectivity_state() const {
220
- return connectivity_state_;
221
- }
222
- uint32_t weight() const { return weight_; }
223
- RefCountedPtr<EndpointPickerWrapper> picker_wrapper() const {
224
- return picker_wrapper_;
225
- }
226
-
227
- void set_locality_map(RefCountedPtr<LocalityMap> locality_map) {
228
- locality_map_ = std::move(locality_map);
229
- }
230
-
231
- private:
232
- class Helper : public ChannelControlHelper {
233
- public:
234
- explicit Helper(RefCountedPtr<Locality> locality)
235
- : locality_(std::move(locality)) {}
236
-
237
- ~Helper() { locality_.reset(DEBUG_LOCATION, "Helper"); }
238
-
239
- RefCountedPtr<SubchannelInterface> CreateSubchannel(
240
- const grpc_channel_args& args) override;
241
- void UpdateState(grpc_connectivity_state state,
242
- std::unique_ptr<SubchannelPicker> picker) override;
243
- // This is a no-op, because we get the addresses from the xds
244
- // client, which is a watch-based API.
245
- void RequestReresolution() override {}
246
- void AddTraceEvent(TraceSeverity severity,
247
- StringView message) override;
248
- void set_child(LoadBalancingPolicy* child) { child_ = child; }
249
-
250
- private:
251
- bool CalledByPendingChild() const;
252
- bool CalledByCurrentChild() const;
253
-
254
- RefCountedPtr<Locality> locality_;
255
- LoadBalancingPolicy* child_ = nullptr;
256
- };
257
-
258
- // Methods for dealing with the child policy.
259
- OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
260
- const char* name, const grpc_channel_args* args);
261
- grpc_channel_args* CreateChildPolicyArgsLocked(
262
- const grpc_channel_args* args);
263
-
264
- static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
265
- static void OnDelayedRemovalTimerLocked(void* arg, grpc_error* error);
266
-
267
- XdsLb* xds_policy() const { return locality_map_->xds_policy(); }
268
-
269
- // The owning locality map.
270
- RefCountedPtr<LocalityMap> locality_map_;
271
-
272
- RefCountedPtr<XdsLocalityName> name_;
273
- OrphanablePtr<LoadBalancingPolicy> child_policy_;
274
- OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
275
- RefCountedPtr<EndpointPickerWrapper> picker_wrapper_;
276
- grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
277
- uint32_t weight_;
278
-
279
- // States for delayed removal.
280
- grpc_timer delayed_removal_timer_;
281
- grpc_closure on_delayed_removal_timer_;
282
- bool delayed_removal_timer_callback_pending_ = false;
283
- bool shutdown_ = false;
284
- };
285
-
286
- LocalityMap(RefCountedPtr<XdsLb> xds_policy, uint32_t priority);
287
-
288
- void UpdateLocked(
289
- const XdsPriorityListUpdate::LocalityMap& locality_map_update);
290
- void ResetBackoffLocked();
291
- void UpdateXdsPickerLocked();
292
- OrphanablePtr<Locality> ExtractLocalityLocked(
293
- const RefCountedPtr<XdsLocalityName>& name);
294
- void DeactivateLocked();
295
- // Returns true if this locality map becomes the currently used one (i.e.,
296
- // its priority is selected) after reactivation.
297
- bool MaybeReactivateLocked();
298
- void MaybeCancelFailoverTimerLocked();
299
-
300
- void Orphan() override;
301
-
302
- XdsLb* xds_policy() const { return xds_policy_.get(); }
303
- uint32_t priority() const { return priority_; }
304
- grpc_connectivity_state connectivity_state() const {
305
- return connectivity_state_;
306
- }
307
- bool failover_timer_callback_pending() const {
308
- return failover_timer_callback_pending_;
309
- }
310
-
311
- private:
312
- void OnLocalityStateUpdateLocked();
313
- void UpdateConnectivityStateLocked();
314
- static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
315
- static void OnFailoverTimer(void* arg, grpc_error* error);
316
- static void OnDelayedRemovalTimerLocked(void* arg, grpc_error* error);
317
- static void OnFailoverTimerLocked(void* arg, grpc_error* error);
318
-
319
- PriorityList* priority_list() const {
320
- return &xds_policy_->priority_list_;
321
- }
322
- const XdsPriorityListUpdate& priority_list_update() const {
323
- return xds_policy_->priority_list_update_;
324
- }
325
- const XdsPriorityListUpdate::LocalityMap* locality_map_update() const {
326
- return xds_policy_->priority_list_update_.Find(priority_);
327
- }
328
-
329
- RefCountedPtr<XdsLb> xds_policy_;
330
-
331
- std::map<RefCountedPtr<XdsLocalityName>, OrphanablePtr<Locality>,
332
- XdsLocalityName::Less>
333
- localities_;
334
- const uint32_t priority_;
335
- grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
336
-
337
- // States for delayed removal.
338
- grpc_timer delayed_removal_timer_;
339
- grpc_closure on_delayed_removal_timer_;
340
- bool delayed_removal_timer_callback_pending_ = false;
341
-
342
- // States of failover.
343
- grpc_timer failover_timer_;
344
- grpc_closure on_failover_timer_;
345
- bool failover_timer_callback_pending_ = false;
346
- };
347
-
348
- explicit PriorityList(XdsLb* xds_policy) : xds_policy_(xds_policy) {}
349
-
350
- void UpdateLocked();
351
- void ResetBackoffLocked();
352
- void ShutdownLocked();
353
- void UpdateXdsPickerLocked();
354
-
355
- const XdsPriorityListUpdate& priority_list_update() const {
356
- return xds_policy_->priority_list_update_;
357
- }
358
- uint32_t current_priority() const { return current_priority_; }
359
-
360
- private:
361
- void MaybeCreateLocalityMapLocked(uint32_t priority);
362
- void FailoverOnConnectionFailureLocked();
363
- void FailoverOnDisconnectionLocked(uint32_t failed_priority);
364
- void SwitchToHigherPriorityLocked(uint32_t priority);
365
- void DeactivatePrioritiesLowerThan(uint32_t priority);
366
- OrphanablePtr<LocalityMap::Locality> ExtractLocalityLocked(
367
- const RefCountedPtr<XdsLocalityName>& name, uint32_t exclude_priority);
368
- // Callers should make sure the priority list is non-empty.
369
- uint32_t LowestPriority() const {
370
- return static_cast<uint32_t>(priorities_.size()) - 1;
371
- }
372
- bool Contains(uint32_t priority) { return priority < priorities_.size(); }
373
-
374
- XdsLb* xds_policy_;
375
-
376
- // The list of locality maps, indexed by priority. P0 is the highest
377
- // priority.
378
- InlinedVector<OrphanablePtr<LocalityMap>, 2> priorities_;
379
- // The priority that is being used.
380
- uint32_t current_priority_ = UINT32_MAX;
381
- };
382
-
383
- ~XdsLb();
384
-
385
- void ShutdownLocked() override;
386
-
387
- // Methods for dealing with fallback state.
388
- void MaybeCancelFallbackAtStartupChecks();
389
- static void OnFallbackTimer(void* arg, grpc_error* error);
390
- static void OnFallbackTimerLocked(void* arg, grpc_error* error);
391
- void UpdateFallbackPolicyLocked();
392
- OrphanablePtr<LoadBalancingPolicy> CreateFallbackPolicyLocked(
393
- const char* name, const grpc_channel_args* args);
394
- void MaybeExitFallbackMode();
395
-
396
- const char* eds_service_name() const {
397
- if (config_ != nullptr && config_->eds_service_name() != nullptr) {
398
- return config_->eds_service_name();
399
- }
400
- return server_name_.get();
401
- }
402
-
403
- XdsClient* xds_client() const {
404
- return xds_client_from_channel_ != nullptr ? xds_client_from_channel_.get()
405
- : xds_client_.get();
406
- }
407
-
408
- // Server name from target URI.
409
- grpc_core::UniquePtr<char> server_name_;
410
-
411
- // Current channel args and config from the resolver.
412
- const grpc_channel_args* args_ = nullptr;
413
- RefCountedPtr<ParsedXdsConfig> config_;
414
-
415
- // Internal state.
416
- bool shutting_down_ = false;
417
-
418
- // The xds client and endpoint watcher.
419
- // If we get the XdsClient from the channel, we store it in
420
- // xds_client_from_channel_; if we create it ourselves, we store it in
421
- // xds_client_.
422
- RefCountedPtr<XdsClient> xds_client_from_channel_;
423
- OrphanablePtr<XdsClient> xds_client_;
424
- // A pointer to the endpoint watcher, to be used when cancelling the watch.
425
- // Note that this is not owned, so this pointer must never be derefernced.
426
- EndpointWatcher* endpoint_watcher_ = nullptr;
427
-
428
- // Whether the checks for fallback at startup are ALL pending. There are
429
- // several cases where this can be reset:
430
- // 1. The fallback timer fires, we enter fallback mode.
431
- // 2. Before the fallback timer fires, the endpoint watcher reports an
432
- // error, we enter fallback mode.
433
- // 3. Before the fallback timer fires, if any child policy in the locality map
434
- // becomes READY, we cancel the fallback timer.
435
- bool fallback_at_startup_checks_pending_ = false;
436
- // Timeout in milliseconds for before using fallback backend addresses.
437
- // 0 means not using fallback.
438
- const grpc_millis lb_fallback_timeout_ms_;
439
- // The backend addresses from the resolver.
440
- ServerAddressList fallback_backend_addresses_;
441
- // Fallback timer.
442
- grpc_timer lb_fallback_timer_;
443
- grpc_closure lb_on_fallback_;
444
-
445
- // Non-null iff we are in fallback mode.
446
- OrphanablePtr<LoadBalancingPolicy> fallback_policy_;
447
- OrphanablePtr<LoadBalancingPolicy> pending_fallback_policy_;
448
-
449
- const grpc_millis locality_retention_interval_ms_;
450
- const grpc_millis locality_map_failover_timeout_ms_;
451
- // A list of locality maps indexed by priority.
452
- PriorityList priority_list_;
453
- // The update for priority_list_.
454
- XdsPriorityListUpdate priority_list_update_;
455
-
456
- // The config for dropping calls.
457
- RefCountedPtr<XdsDropConfig> drop_config_;
458
-
459
- // The stats for client-side load reporting.
460
- XdsClientStats client_stats_;
461
- };
462
-
463
- //
464
- // XdsLb::EndpointPickerWrapper
465
- //
466
-
467
- LoadBalancingPolicy::PickResult XdsLb::EndpointPickerWrapper::Pick(
468
- LoadBalancingPolicy::PickArgs args) {
469
- // Forward the pick to the picker returned from the child policy.
470
- PickResult result = picker_->Pick(args);
471
- if (result.type != PickResult::PICK_COMPLETE ||
472
- result.subchannel == nullptr || locality_stats_ == nullptr) {
473
- return result;
474
- }
475
- // Record a call started.
476
- locality_stats_->AddCallStarted();
477
- // Intercept the recv_trailing_metadata op to record call completion.
478
- XdsClientStats::LocalityStats* locality_stats =
479
- locality_stats_->Ref(DEBUG_LOCATION, "LocalityStats+call").release();
480
- result.recv_trailing_metadata_ready =
481
- // Note: This callback does not run in either the control plane
482
- // combiner or in the data plane mutex.
483
- [locality_stats](grpc_error* error, MetadataInterface* /*metadata*/,
484
- CallState* /*call_state*/) {
485
- const bool call_failed = error != GRPC_ERROR_NONE;
486
- locality_stats->AddCallFinished(call_failed);
487
- locality_stats->Unref(DEBUG_LOCATION, "LocalityStats+call");
488
- };
489
- return result;
490
- }
491
-
492
- //
493
- // XdsLb::LocalityPicker
494
- //
495
-
496
- XdsLb::PickResult XdsLb::LocalityPicker::Pick(PickArgs args) {
497
- // Handle drop.
498
- const grpc_core::UniquePtr<char>* drop_category;
499
- if (drop_config_->ShouldDrop(&drop_category)) {
500
- xds_policy_->client_stats_.AddCallDropped(*drop_category);
501
- PickResult result;
502
- result.type = PickResult::PICK_COMPLETE;
503
- return result;
504
- }
505
- // Generate a random number in [0, total weight).
506
- const uint32_t key = rand() % pickers_[pickers_.size() - 1].first;
507
- // Forward pick to whichever locality maps to the range in which the
508
- // random number falls in.
509
- return PickFromLocality(key, args);
510
- }
511
-
512
- XdsLb::PickResult XdsLb::LocalityPicker::PickFromLocality(const uint32_t key,
513
- PickArgs args) {
514
- size_t mid = 0;
515
- size_t start_index = 0;
516
- size_t end_index = pickers_.size() - 1;
517
- size_t index = 0;
518
- while (end_index > start_index) {
519
- mid = (start_index + end_index) / 2;
520
- if (pickers_[mid].first > key) {
521
- end_index = mid;
522
- } else if (pickers_[mid].first < key) {
523
- start_index = mid + 1;
524
- } else {
525
- index = mid + 1;
526
- break;
527
- }
528
- }
529
- if (index == 0) index = start_index;
530
- GPR_ASSERT(pickers_[index].first > key);
531
- return pickers_[index].second->Pick(args);
532
- }
533
-
534
- //
535
- // XdsLb::FallbackHelper
536
- //
537
-
538
- bool XdsLb::FallbackHelper::CalledByPendingFallback() const {
539
- GPR_ASSERT(child_ != nullptr);
540
- return child_ == parent_->pending_fallback_policy_.get();
541
- }
542
-
543
- bool XdsLb::FallbackHelper::CalledByCurrentFallback() const {
544
- GPR_ASSERT(child_ != nullptr);
545
- return child_ == parent_->fallback_policy_.get();
546
- }
547
-
548
- RefCountedPtr<SubchannelInterface> XdsLb::FallbackHelper::CreateSubchannel(
549
- const grpc_channel_args& args) {
550
- if (parent_->shutting_down_ ||
551
- (!CalledByPendingFallback() && !CalledByCurrentFallback())) {
552
- return nullptr;
553
- }
554
- return parent_->channel_control_helper()->CreateSubchannel(args);
555
- }
556
-
557
- void XdsLb::FallbackHelper::UpdateState(
558
- grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
559
- if (parent_->shutting_down_) return;
560
- // If this request is from the pending fallback policy, ignore it until
561
- // it reports READY, at which point we swap it into place.
562
- if (CalledByPendingFallback()) {
563
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
564
- gpr_log(
565
- GPR_INFO,
566
- "[xdslb %p helper %p] pending fallback policy %p reports state=%s",
567
- parent_.get(), this, parent_->pending_fallback_policy_.get(),
568
- ConnectivityStateName(state));
569
- }
570
- if (state != GRPC_CHANNEL_READY) return;
571
- grpc_pollset_set_del_pollset_set(
572
- parent_->fallback_policy_->interested_parties(),
573
- parent_->interested_parties());
574
- parent_->fallback_policy_ = std::move(parent_->pending_fallback_policy_);
575
- } else if (!CalledByCurrentFallback()) {
576
- // This request is from an outdated fallback policy, so ignore it.
577
- return;
578
- }
579
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
580
- }
581
-
582
- void XdsLb::FallbackHelper::RequestReresolution() {
583
- if (parent_->shutting_down_) return;
584
- const LoadBalancingPolicy* latest_fallback_policy =
585
- parent_->pending_fallback_policy_ != nullptr
586
- ? parent_->pending_fallback_policy_.get()
587
- : parent_->fallback_policy_.get();
588
- if (child_ != latest_fallback_policy) return;
589
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
590
- gpr_log(GPR_INFO,
591
- "[xdslb %p] Re-resolution requested from the fallback policy (%p).",
592
- parent_.get(), child_);
593
- }
594
- parent_->channel_control_helper()->RequestReresolution();
595
- }
596
-
597
- void XdsLb::FallbackHelper::AddTraceEvent(TraceSeverity severity,
598
- StringView message) {
599
- if (parent_->shutting_down_ ||
600
- (!CalledByPendingFallback() && !CalledByCurrentFallback())) {
601
- return;
602
- }
603
- parent_->channel_control_helper()->AddTraceEvent(severity, message);
604
- }
605
-
606
- //
607
- // XdsLb::EndpointWatcher
608
- //
609
-
610
- class XdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
611
- public:
612
- explicit EndpointWatcher(RefCountedPtr<XdsLb> xds_policy)
613
- : xds_policy_(std::move(xds_policy)) {}
614
-
615
- void OnEndpointChanged(EdsUpdate update) override {
616
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
617
- gpr_log(GPR_INFO, "[xdslb %p] Received EDS update from xds client",
618
- xds_policy_.get());
619
- }
620
- // If the balancer tells us to drop all the calls, we should exit fallback
621
- // mode immediately.
622
- if (update.drop_all) xds_policy_->MaybeExitFallbackMode();
623
- // Update the drop config.
624
- const bool drop_config_changed =
625
- xds_policy_->drop_config_ == nullptr ||
626
- *xds_policy_->drop_config_ != *update.drop_config;
627
- xds_policy_->drop_config_ = std::move(update.drop_config);
628
- // Ignore identical locality update.
629
- if (xds_policy_->priority_list_update_ == update.priority_list_update) {
630
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
631
- gpr_log(GPR_INFO,
632
- "[xdslb %p] Incoming locality update identical to current, "
633
- "ignoring. (drop_config_changed=%d)",
634
- xds_policy_.get(), drop_config_changed);
635
- }
636
- if (drop_config_changed) {
637
- xds_policy_->priority_list_.UpdateXdsPickerLocked();
638
- }
639
- return;
640
- }
641
- // Update the priority list.
642
- xds_policy_->priority_list_update_ = std::move(update.priority_list_update);
643
- xds_policy_->priority_list_.UpdateLocked();
644
- }
645
-
646
- void OnError(grpc_error* error) override {
647
- // If the fallback-at-startup checks are pending, go into fallback mode
648
- // immediately. This short-circuits the timeout for the
649
- // fallback-at-startup case.
650
- if (xds_policy_->fallback_at_startup_checks_pending_) {
651
- gpr_log(GPR_INFO,
652
- "[xdslb %p] xds watcher reported error; entering fallback "
653
- "mode: %s",
654
- xds_policy_.get(), grpc_error_string(error));
655
- xds_policy_->fallback_at_startup_checks_pending_ = false;
656
- grpc_timer_cancel(&xds_policy_->lb_fallback_timer_);
657
- xds_policy_->UpdateFallbackPolicyLocked();
658
- // If the xds call failed, request re-resolution.
659
- // TODO(roth): We check the error string contents here to
660
- // differentiate between the xds call failing and the xds channel
661
- // going into TRANSIENT_FAILURE. This is a pretty ugly hack,
662
- // but it's okay for now, since we're not yet sure whether we will
663
- // continue to support the current fallback functionality. If we
664
- // decide to keep the fallback approach, then we should either
665
- // find a cleaner way to expose the difference between these two
666
- // cases or decide that we're okay re-resolving in both cases.
667
- // Note that even if we do keep the current fallback functionality,
668
- // this re-resolution will only be necessary if we are going to be
669
- // using this LB policy with resolvers other than the xds resolver.
670
- if (strstr(grpc_error_string(error), "xds call failed")) {
671
- xds_policy_->channel_control_helper()->RequestReresolution();
672
- }
673
- }
674
- GRPC_ERROR_UNREF(error);
675
- }
676
-
677
- private:
678
- RefCountedPtr<XdsLb> xds_policy_;
679
- };
680
-
681
- //
682
- // ctor and dtor
683
- //
684
-
685
- XdsLb::XdsLb(Args args)
686
- : LoadBalancingPolicy(std::move(args)),
687
- xds_client_from_channel_(XdsClient::GetFromChannelArgs(*args.args)),
688
- lb_fallback_timeout_ms_(grpc_channel_args_find_integer(
689
- args.args, GRPC_ARG_XDS_FALLBACK_TIMEOUT_MS,
690
- {GRPC_XDS_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX})),
691
- locality_retention_interval_ms_(grpc_channel_args_find_integer(
692
- args.args, GRPC_ARG_LOCALITY_RETENTION_INTERVAL_MS,
693
- {GRPC_XDS_DEFAULT_LOCALITY_RETENTION_INTERVAL_MS, 0, INT_MAX})),
694
- locality_map_failover_timeout_ms_(grpc_channel_args_find_integer(
695
- args.args, GRPC_ARG_XDS_FAILOVER_TIMEOUT_MS,
696
- {GRPC_XDS_DEFAULT_FAILOVER_TIMEOUT_MS, 0, INT_MAX})),
697
- priority_list_(this) {
698
- if (xds_client_from_channel_ != nullptr &&
699
- GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
700
- gpr_log(GPR_INFO, "[xdslb %p] Using xds client %p from channel", this,
701
- xds_client_from_channel_.get());
702
- }
703
- // Record server name.
704
- const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
705
- const char* server_uri = grpc_channel_arg_get_string(arg);
706
- GPR_ASSERT(server_uri != nullptr);
707
- grpc_uri* uri = grpc_uri_parse(server_uri, true);
708
- GPR_ASSERT(uri->path[0] != '\0');
709
- server_name_.reset(
710
- gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path));
711
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
712
- gpr_log(GPR_INFO, "[xdslb %p] server name from channel: %s", this,
713
- server_name_.get());
714
- }
715
- grpc_uri_destroy(uri);
716
- }
717
-
718
- XdsLb::~XdsLb() {
719
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
720
- gpr_log(GPR_INFO, "[xdslb %p] destroying xds LB policy", this);
721
- }
722
- grpc_channel_args_destroy(args_);
723
- }
724
-
725
- void XdsLb::ShutdownLocked() {
726
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
727
- gpr_log(GPR_INFO, "[xdslb %p] shutting down", this);
728
- }
729
- shutting_down_ = true;
730
- MaybeCancelFallbackAtStartupChecks();
731
- priority_list_.ShutdownLocked();
732
- if (fallback_policy_ != nullptr) {
733
- grpc_pollset_set_del_pollset_set(fallback_policy_->interested_parties(),
734
- interested_parties());
735
- }
736
- if (pending_fallback_policy_ != nullptr) {
737
- grpc_pollset_set_del_pollset_set(
738
- pending_fallback_policy_->interested_parties(), interested_parties());
739
- }
740
- fallback_policy_.reset();
741
- pending_fallback_policy_.reset();
742
- // Cancel the endpoint watch here instead of in our dtor, because the
743
- // watcher holds a ref to us.
744
- xds_client()->CancelEndpointDataWatch(StringView(eds_service_name()),
745
- endpoint_watcher_);
746
- if (config_->lrs_load_reporting_server_name() != nullptr) {
747
- xds_client()->RemoveClientStats(
748
- StringView(config_->lrs_load_reporting_server_name()),
749
- StringView(eds_service_name()), &client_stats_);
750
- }
751
- xds_client_from_channel_.reset();
752
- xds_client_.reset();
753
- }
754
-
755
- //
756
- // public methods
757
- //
758
-
759
- void XdsLb::ResetBackoffLocked() {
760
- // When the XdsClient is instantiated in the resolver instead of in this
761
- // LB policy, this is done via the resolver, so we don't need to do it
762
- // for xds_client_from_channel_ here.
763
- if (xds_client_ != nullptr) xds_client_->ResetBackoff();
764
- priority_list_.ResetBackoffLocked();
765
- if (fallback_policy_ != nullptr) {
766
- fallback_policy_->ResetBackoffLocked();
767
- }
768
- if (pending_fallback_policy_ != nullptr) {
769
- pending_fallback_policy_->ResetBackoffLocked();
770
- }
771
- }
772
-
773
- void XdsLb::UpdateLocked(UpdateArgs args) {
774
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
775
- gpr_log(GPR_INFO, "[xdslb %p] Received update", this);
776
- }
777
- const bool is_initial_update = args_ == nullptr;
778
- // Update config.
779
- const char* old_eds_service_name = eds_service_name();
780
- auto old_config = std::move(config_);
781
- config_ = std::move(args.config);
782
- // Update fallback address list.
783
- fallback_backend_addresses_ = std::move(args.addresses);
784
- // Update args.
785
- grpc_channel_args_destroy(args_);
786
- args_ = args.args;
787
- args.args = nullptr;
788
- // Update priority list.
789
- priority_list_.UpdateLocked();
790
- // Update the existing fallback policy. The fallback policy config and/or the
791
- // fallback addresses may be new.
792
- if (fallback_policy_ != nullptr) UpdateFallbackPolicyLocked();
793
- if (is_initial_update) {
794
- // Initialize XdsClient.
795
- if (xds_client_from_channel_ == nullptr) {
796
- grpc_error* error = GRPC_ERROR_NONE;
797
- xds_client_ = MakeOrphanable<XdsClient>(
798
- combiner(), interested_parties(), StringView(eds_service_name()),
799
- nullptr /* service config watcher */, *args_, &error);
800
- // TODO(roth): If we decide that we care about fallback mode, add
801
- // proper error handling here.
802
- GPR_ASSERT(error == GRPC_ERROR_NONE);
803
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
804
- gpr_log(GPR_INFO, "[xdslb %p] Created xds client %p", this,
805
- xds_client_.get());
806
- }
807
- }
808
- // Start fallback-at-startup checks.
809
- grpc_millis deadline = ExecCtx::Get()->Now() + lb_fallback_timeout_ms_;
810
- Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Held by closure
811
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &XdsLb::OnFallbackTimer, this,
812
- grpc_schedule_on_exec_ctx);
813
- fallback_at_startup_checks_pending_ = true;
814
- grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
815
- }
816
- // Update endpoint watcher if needed.
817
- if (is_initial_update ||
818
- strcmp(old_eds_service_name, eds_service_name()) != 0) {
819
- if (!is_initial_update) {
820
- xds_client()->CancelEndpointDataWatch(StringView(old_eds_service_name),
821
- endpoint_watcher_);
822
- }
823
- auto watcher = MakeUnique<EndpointWatcher>(Ref());
824
- endpoint_watcher_ = watcher.get();
825
- xds_client()->WatchEndpointData(StringView(eds_service_name()),
826
- std::move(watcher));
827
- }
828
- // Update load reporting if needed.
829
- // TODO(roth): Ideally, we should not collect any stats if load reporting
830
- // is disabled, which would require changing this code to recreate
831
- // all of the pickers whenever load reporting is enabled or disabled
832
- // here.
833
- if (is_initial_update ||
834
- (config_->lrs_load_reporting_server_name() == nullptr) !=
835
- (old_config->lrs_load_reporting_server_name() == nullptr) ||
836
- (config_->lrs_load_reporting_server_name() != nullptr &&
837
- old_config->lrs_load_reporting_server_name() != nullptr &&
838
- strcmp(config_->lrs_load_reporting_server_name(),
839
- old_config->lrs_load_reporting_server_name()) != 0)) {
840
- if (old_config != nullptr &&
841
- old_config->lrs_load_reporting_server_name() != nullptr) {
842
- xds_client()->RemoveClientStats(
843
- StringView(old_config->lrs_load_reporting_server_name()),
844
- StringView(old_eds_service_name), &client_stats_);
845
- }
846
- if (config_->lrs_load_reporting_server_name() != nullptr) {
847
- xds_client()->AddClientStats(
848
- StringView(config_->lrs_load_reporting_server_name()),
849
- StringView(eds_service_name()), &client_stats_);
850
- }
851
- }
852
- }
853
-
854
- //
855
- // fallback-related methods
856
- //
857
-
858
- void XdsLb::MaybeCancelFallbackAtStartupChecks() {
859
- if (!fallback_at_startup_checks_pending_) return;
860
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
861
- gpr_log(GPR_INFO, "[xdslb %p] Cancelling fallback timer", this);
862
- }
863
- grpc_timer_cancel(&lb_fallback_timer_);
864
- fallback_at_startup_checks_pending_ = false;
865
- }
866
-
867
- void XdsLb::OnFallbackTimer(void* arg, grpc_error* error) {
868
- XdsLb* xdslb_policy = static_cast<XdsLb*>(arg);
869
- xdslb_policy->combiner()->Run(
870
- GRPC_CLOSURE_INIT(&xdslb_policy->lb_on_fallback_,
871
- &XdsLb::OnFallbackTimerLocked, xdslb_policy, nullptr),
872
- GRPC_ERROR_REF(error));
873
- }
874
-
875
- void XdsLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
876
- XdsLb* xdslb_policy = static_cast<XdsLb*>(arg);
877
- // If some fallback-at-startup check is done after the timer fires but before
878
- // this callback actually runs, don't fall back.
879
- if (xdslb_policy->fallback_at_startup_checks_pending_ &&
880
- !xdslb_policy->shutting_down_ && error == GRPC_ERROR_NONE) {
881
- gpr_log(GPR_INFO,
882
- "[xdslb %p] Child policy not ready after fallback timeout; "
883
- "entering fallback mode",
884
- xdslb_policy);
885
- xdslb_policy->fallback_at_startup_checks_pending_ = false;
886
- xdslb_policy->UpdateFallbackPolicyLocked();
887
- }
888
- xdslb_policy->Unref(DEBUG_LOCATION, "on_fallback_timer");
889
- }
890
-
891
- void XdsLb::UpdateFallbackPolicyLocked() {
892
- if (shutting_down_) return;
893
- // Construct update args.
894
- UpdateArgs update_args;
895
- update_args.addresses = fallback_backend_addresses_;
896
- update_args.config = config_->fallback_policy();
897
- update_args.args = grpc_channel_args_copy(args_);
898
- // If the child policy name changes, we need to create a new child
899
- // policy. When this happens, we leave child_policy_ as-is and store
900
- // the new child policy in pending_child_policy_. Once the new child
901
- // policy transitions into state READY, we swap it into child_policy_,
902
- // replacing the original child policy. So pending_child_policy_ is
903
- // non-null only between when we apply an update that changes the child
904
- // policy name and when the new child reports state READY.
905
- //
906
- // Updates can arrive at any point during this transition. We always
907
- // apply updates relative to the most recently created child policy,
908
- // even if the most recent one is still in pending_child_policy_. This
909
- // is true both when applying the updates to an existing child policy
910
- // and when determining whether we need to create a new policy.
911
- //
912
- // As a result of this, there are several cases to consider here:
913
- //
914
- // 1. We have no existing child policy (i.e., we have started up but
915
- // have not yet received a serverlist from the balancer or gone
916
- // into fallback mode; in this case, both child_policy_ and
917
- // pending_child_policy_ are null). In this case, we create a
918
- // new child policy and store it in child_policy_.
919
- //
920
- // 2. We have an existing child policy and have no pending child policy
921
- // from a previous update (i.e., either there has not been a
922
- // previous update that changed the policy name, or we have already
923
- // finished swapping in the new policy; in this case, child_policy_
924
- // is non-null but pending_child_policy_ is null). In this case:
925
- // a. If child_policy_->name() equals child_policy_name, then we
926
- // update the existing child policy.
927
- // b. If child_policy_->name() does not equal child_policy_name,
928
- // we create a new policy. The policy will be stored in
929
- // pending_child_policy_ and will later be swapped into
930
- // child_policy_ by the helper when the new child transitions
931
- // into state READY.
932
- //
933
- // 3. We have an existing child policy and have a pending child policy
934
- // from a previous update (i.e., a previous update set
935
- // pending_child_policy_ as per case 2b above and that policy has
936
- // not yet transitioned into state READY and been swapped into
937
- // child_policy_; in this case, both child_policy_ and
938
- // pending_child_policy_ are non-null). In this case:
939
- // a. If pending_child_policy_->name() equals child_policy_name,
940
- // then we update the existing pending child policy.
941
- // b. If pending_child_policy->name() does not equal
942
- // child_policy_name, then we create a new policy. The new
943
- // policy is stored in pending_child_policy_ (replacing the one
944
- // that was there before, which will be immediately shut down)
945
- // and will later be swapped into child_policy_ by the helper
946
- // when the new child transitions into state READY.
947
- const char* fallback_policy_name = update_args.config == nullptr
948
- ? "round_robin"
949
- : update_args.config->name();
950
- const bool create_policy =
951
- // case 1
952
- fallback_policy_ == nullptr ||
953
- // case 2b
954
- (pending_fallback_policy_ == nullptr &&
955
- strcmp(fallback_policy_->name(), fallback_policy_name) != 0) ||
956
- // case 3b
957
- (pending_fallback_policy_ != nullptr &&
958
- strcmp(pending_fallback_policy_->name(), fallback_policy_name) != 0);
959
- LoadBalancingPolicy* policy_to_update = nullptr;
960
- if (create_policy) {
961
- // Cases 1, 2b, and 3b: create a new child policy.
962
- // If child_policy_ is null, we set it (case 1), else we set
963
- // pending_child_policy_ (cases 2b and 3b).
964
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
965
- gpr_log(GPR_INFO, "[xdslb %p] Creating new %sfallback policy %s", this,
966
- fallback_policy_ == nullptr ? "" : "pending ",
967
- fallback_policy_name);
968
- }
969
- auto& lb_policy = fallback_policy_ == nullptr ? fallback_policy_
970
- : pending_fallback_policy_;
971
- lb_policy =
972
- CreateFallbackPolicyLocked(fallback_policy_name, update_args.args);
973
- policy_to_update = lb_policy.get();
974
- } else {
975
- // Cases 2a and 3a: update an existing policy.
976
- // If we have a pending child policy, send the update to the pending
977
- // policy (case 3a), else send it to the current policy (case 2a).
978
- policy_to_update = pending_fallback_policy_ != nullptr
979
- ? pending_fallback_policy_.get()
980
- : fallback_policy_.get();
981
- }
982
- GPR_ASSERT(policy_to_update != nullptr);
983
- // Update the policy.
984
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
985
- gpr_log(
986
- GPR_INFO, "[xdslb %p] Updating %sfallback policy %p", this,
987
- policy_to_update == pending_fallback_policy_.get() ? "pending " : "",
988
- policy_to_update);
989
- }
990
- policy_to_update->UpdateLocked(std::move(update_args));
991
- }
992
-
993
- OrphanablePtr<LoadBalancingPolicy> XdsLb::CreateFallbackPolicyLocked(
994
- const char* name, const grpc_channel_args* args) {
995
- FallbackHelper* helper =
996
- new FallbackHelper(Ref(DEBUG_LOCATION, "FallbackHelper"));
997
- LoadBalancingPolicy::Args lb_policy_args;
998
- lb_policy_args.combiner = combiner();
999
- lb_policy_args.args = args;
1000
- lb_policy_args.channel_control_helper =
1001
- std::unique_ptr<ChannelControlHelper>(helper);
1002
- OrphanablePtr<LoadBalancingPolicy> lb_policy =
1003
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
1004
- name, std::move(lb_policy_args));
1005
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
1006
- gpr_log(GPR_ERROR, "[xdslb %p] Failure creating fallback policy %s", this,
1007
- name);
1008
- return nullptr;
1009
- }
1010
- helper->set_child(lb_policy.get());
1011
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1012
- gpr_log(GPR_INFO, "[xdslb %p] Created new fallback policy %s (%p)", this,
1013
- name, lb_policy.get());
1014
- }
1015
- // Add the xDS's interested_parties pollset_set to that of the newly created
1016
- // child policy. This will make the child policy progress upon activity on xDS
1017
- // LB, which in turn is tied to the application's call.
1018
- grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
1019
- interested_parties());
1020
- return lb_policy;
1021
- }
1022
-
1023
- void XdsLb::MaybeExitFallbackMode() {
1024
- if (fallback_policy_ == nullptr) return;
1025
- gpr_log(GPR_INFO, "[xdslb %p] Exiting fallback mode", this);
1026
- fallback_policy_.reset();
1027
- pending_fallback_policy_.reset();
1028
- }
1029
-
1030
- //
1031
- // XdsLb::PriorityList
1032
- //
1033
-
1034
- void XdsLb::PriorityList::UpdateLocked() {
1035
- const auto& priority_list_update = xds_policy_->priority_list_update_;
1036
- // 1. Remove from the priority list the priorities that are not in the update.
1037
- DeactivatePrioritiesLowerThan(priority_list_update.LowestPriority());
1038
- // 2. Update all the existing priorities.
1039
- for (uint32_t priority = 0; priority < priorities_.size(); ++priority) {
1040
- LocalityMap* locality_map = priorities_[priority].get();
1041
- const auto* locality_map_update = priority_list_update.Find(priority);
1042
- // Propagate locality_map_update.
1043
- // TODO(juanlishen): Find a clean way to skip duplicate update for a
1044
- // priority.
1045
- locality_map->UpdateLocked(*locality_map_update);
1046
- }
1047
- // 3. Only create a new locality map if all the existing ones have failed.
1048
- if (priorities_.empty() ||
1049
- !priorities_[priorities_.size() - 1]->failover_timer_callback_pending()) {
1050
- const uint32_t new_priority = static_cast<uint32_t>(priorities_.size());
1051
- // Create a new locality map. Note that in some rare cases (e.g., the
1052
- // locality map reports TRANSIENT_FAILURE synchronously due to subchannel
1053
- // sharing), the following invocation may result in multiple locality maps
1054
- // to be created.
1055
- MaybeCreateLocalityMapLocked(new_priority);
1056
- }
1057
- }
1058
-
1059
- void XdsLb::PriorityList::ResetBackoffLocked() {
1060
- for (size_t i = 0; i < priorities_.size(); ++i) {
1061
- priorities_[i]->ResetBackoffLocked();
1062
- }
1063
- }
1064
-
1065
- void XdsLb::PriorityList::ShutdownLocked() { priorities_.clear(); }
1066
-
1067
- void XdsLb::PriorityList::UpdateXdsPickerLocked() {
1068
- // If we are in fallback mode, don't generate an xds picker from localities.
1069
- if (xds_policy_->fallback_policy_ != nullptr) return;
1070
- if (current_priority() == UINT32_MAX) {
1071
- grpc_error* error = grpc_error_set_int(
1072
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("no ready locality map"),
1073
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1074
- xds_policy_->channel_control_helper()->UpdateState(
1075
- GRPC_CHANNEL_TRANSIENT_FAILURE,
1076
- MakeUnique<TransientFailurePicker>(error));
1077
- return;
1078
- }
1079
- priorities_[current_priority_]->UpdateXdsPickerLocked();
1080
- }
1081
-
1082
- void XdsLb::PriorityList::MaybeCreateLocalityMapLocked(uint32_t priority) {
1083
- // Exhausted priorities in the update.
1084
- if (!priority_list_update().Contains(priority)) return;
1085
- auto new_locality_map = new LocalityMap(
1086
- xds_policy_->Ref(DEBUG_LOCATION, "XdsLb+LocalityMap"), priority);
1087
- priorities_.emplace_back(OrphanablePtr<LocalityMap>(new_locality_map));
1088
- new_locality_map->UpdateLocked(*priority_list_update().Find(priority));
1089
- }
1090
-
1091
- void XdsLb::PriorityList::FailoverOnConnectionFailureLocked() {
1092
- const uint32_t failed_priority = LowestPriority();
1093
- // If we're failing over from the lowest priority, report TRANSIENT_FAILURE.
1094
- if (failed_priority == priority_list_update().LowestPriority()) {
1095
- UpdateXdsPickerLocked();
1096
- }
1097
- MaybeCreateLocalityMapLocked(failed_priority + 1);
1098
- }
1099
-
1100
- void XdsLb::PriorityList::FailoverOnDisconnectionLocked(
1101
- uint32_t failed_priority) {
1102
- current_priority_ = UINT32_MAX;
1103
- for (uint32_t next_priority = failed_priority + 1;
1104
- next_priority <= priority_list_update().LowestPriority();
1105
- ++next_priority) {
1106
- if (!Contains(next_priority)) {
1107
- MaybeCreateLocalityMapLocked(next_priority);
1108
- return;
1109
- }
1110
- if (priorities_[next_priority]->MaybeReactivateLocked()) return;
1111
- }
1112
- }
1113
-
1114
- void XdsLb::PriorityList::SwitchToHigherPriorityLocked(uint32_t priority) {
1115
- current_priority_ = priority;
1116
- DeactivatePrioritiesLowerThan(current_priority_);
1117
- UpdateXdsPickerLocked();
1118
- }
1119
-
1120
- void XdsLb::PriorityList::DeactivatePrioritiesLowerThan(uint32_t priority) {
1121
- if (priorities_.empty()) return;
1122
- // Deactivate the locality maps from the lowest priority.
1123
- for (uint32_t p = LowestPriority(); p > priority; --p) {
1124
- if (xds_policy_->locality_retention_interval_ms_ == 0) {
1125
- priorities_.pop_back();
1126
- } else {
1127
- priorities_[p]->DeactivateLocked();
1128
- }
1129
- }
1130
- }
1131
-
1132
- OrphanablePtr<XdsLb::PriorityList::LocalityMap::Locality>
1133
- XdsLb::PriorityList::ExtractLocalityLocked(
1134
- const RefCountedPtr<XdsLocalityName>& name, uint32_t exclude_priority) {
1135
- for (uint32_t priority = 0; priority < priorities_.size(); ++priority) {
1136
- if (priority == exclude_priority) continue;
1137
- LocalityMap* locality_map = priorities_[priority].get();
1138
- auto locality = locality_map->ExtractLocalityLocked(name);
1139
- if (locality != nullptr) return locality;
1140
- }
1141
- return nullptr;
1142
- }
1143
-
1144
- //
1145
- // XdsLb::PriorityList::LocalityMap
1146
- //
1147
-
1148
- XdsLb::PriorityList::LocalityMap::LocalityMap(RefCountedPtr<XdsLb> xds_policy,
1149
- uint32_t priority)
1150
- : xds_policy_(std::move(xds_policy)), priority_(priority) {
1151
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1152
- gpr_log(GPR_INFO, "[xdslb %p] Creating priority %" PRIu32,
1153
- xds_policy_.get(), priority_);
1154
- }
1155
-
1156
- GRPC_CLOSURE_INIT(&on_failover_timer_, OnFailoverTimer, this,
1157
- grpc_schedule_on_exec_ctx);
1158
- // Start the failover timer.
1159
- Ref(DEBUG_LOCATION, "LocalityMap+OnFailoverTimerLocked").release();
1160
- grpc_timer_init(
1161
- &failover_timer_,
1162
- ExecCtx::Get()->Now() + xds_policy_->locality_map_failover_timeout_ms_,
1163
- &on_failover_timer_);
1164
- failover_timer_callback_pending_ = true;
1165
- // This is the first locality map ever created, report CONNECTING.
1166
- if (priority_ == 0) {
1167
- xds_policy_->channel_control_helper()->UpdateState(
1168
- GRPC_CHANNEL_CONNECTING, MakeUnique<QueuePicker>(xds_policy_->Ref(
1169
- DEBUG_LOCATION, "QueuePicker")));
1170
- }
1171
- }
1172
-
1173
- void XdsLb::PriorityList::LocalityMap::UpdateLocked(
1174
- const XdsPriorityListUpdate::LocalityMap& locality_map_update) {
1175
- if (xds_policy_->shutting_down_) return;
1176
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1177
- gpr_log(GPR_INFO, "[xdslb %p] Start Updating priority %" PRIu32,
1178
- xds_policy(), priority_);
1179
- }
1180
- // Maybe reactivate the locality map in case all the active locality maps have
1181
- // failed.
1182
- MaybeReactivateLocked();
1183
- // Remove (later) the localities not in locality_map_update.
1184
- for (auto iter = localities_.begin(); iter != localities_.end();) {
1185
- const auto& name = iter->first;
1186
- Locality* locality = iter->second.get();
1187
- if (locality_map_update.Contains(name)) {
1188
- ++iter;
1189
- continue;
1190
- }
1191
- if (xds_policy()->locality_retention_interval_ms_ == 0) {
1192
- iter = localities_.erase(iter);
1193
- } else {
1194
- locality->DeactivateLocked();
1195
- ++iter;
1196
- }
1197
- }
1198
- // Add or update the localities in locality_map_update.
1199
- for (const auto& p : locality_map_update.localities) {
1200
- const auto& name = p.first;
1201
- const auto& locality_update = p.second;
1202
- OrphanablePtr<Locality>& locality = localities_[name];
1203
- if (locality == nullptr) {
1204
- // Move from another locality map if possible.
1205
- locality = priority_list()->ExtractLocalityLocked(name, priority_);
1206
- if (locality != nullptr) {
1207
- locality->set_locality_map(
1208
- Ref(DEBUG_LOCATION, "LocalityMap+Locality_move"));
1209
- } else {
1210
- locality = MakeOrphanable<Locality>(
1211
- Ref(DEBUG_LOCATION, "LocalityMap+Locality"), name);
1212
- }
1213
- }
1214
- // Keep a copy of serverlist in the update so that we can compare it
1215
- // with the future ones.
1216
- locality->UpdateLocked(locality_update.lb_weight,
1217
- locality_update.serverlist);
1218
- }
1219
- }
1220
-
1221
- void XdsLb::PriorityList::LocalityMap::ResetBackoffLocked() {
1222
- for (auto& p : localities_) p.second->ResetBackoffLocked();
1223
- }
1224
-
1225
- void XdsLb::PriorityList::LocalityMap::UpdateXdsPickerLocked() {
1226
- // Construct a new xds picker which maintains a map of all locality pickers
1227
- // that are ready. Each locality is represented by a portion of the range
1228
- // proportional to its weight, such that the total range is the sum of the
1229
- // weights of all localities.
1230
- LocalityPicker::PickerList picker_list;
1231
- uint32_t end = 0;
1232
- for (const auto& p : localities_) {
1233
- const auto& locality_name = p.first;
1234
- const Locality* locality = p.second.get();
1235
- // Skip the localities that are not in the latest locality map update.
1236
- if (!locality_map_update()->Contains(locality_name)) continue;
1237
- if (locality->connectivity_state() != GRPC_CHANNEL_READY) continue;
1238
- end += locality->weight();
1239
- picker_list.push_back(std::make_pair(end, locality->picker_wrapper()));
1240
- }
1241
- xds_policy()->channel_control_helper()->UpdateState(
1242
- GRPC_CHANNEL_READY, MakeUnique<LocalityPicker>(
1243
- xds_policy_->Ref(DEBUG_LOCATION, "XdsLb+Picker"),
1244
- std::move(picker_list)));
1245
- }
1246
-
1247
- OrphanablePtr<XdsLb::PriorityList::LocalityMap::Locality>
1248
- XdsLb::PriorityList::LocalityMap::ExtractLocalityLocked(
1249
- const RefCountedPtr<XdsLocalityName>& name) {
1250
- for (auto iter = localities_.begin(); iter != localities_.end(); ++iter) {
1251
- const auto& name_in_map = iter->first;
1252
- if (*name_in_map == *name) {
1253
- auto locality = std::move(iter->second);
1254
- localities_.erase(iter);
1255
- return locality;
1256
- }
1257
- }
1258
- return nullptr;
1259
- }
1260
-
1261
- void XdsLb::PriorityList::LocalityMap::DeactivateLocked() {
1262
- // If already deactivated, don't do it again.
1263
- if (delayed_removal_timer_callback_pending_) return;
1264
- MaybeCancelFailoverTimerLocked();
1265
- // Start a timer to delete the locality.
1266
- Ref(DEBUG_LOCATION, "LocalityMap+timer").release();
1267
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1268
- gpr_log(GPR_INFO,
1269
- "[xdslb %p] Will remove priority %" PRIu32 " in %" PRId64 " ms.",
1270
- xds_policy(), priority_,
1271
- xds_policy()->locality_retention_interval_ms_);
1272
- }
1273
- GRPC_CLOSURE_INIT(&on_delayed_removal_timer_, OnDelayedRemovalTimer, this,
1274
- grpc_schedule_on_exec_ctx);
1275
- grpc_timer_init(
1276
- &delayed_removal_timer_,
1277
- ExecCtx::Get()->Now() + xds_policy()->locality_retention_interval_ms_,
1278
- &on_delayed_removal_timer_);
1279
- delayed_removal_timer_callback_pending_ = true;
1280
- }
1281
-
1282
- bool XdsLb::PriorityList::LocalityMap::MaybeReactivateLocked() {
1283
- // Don't reactivate a priority that is not higher than the current one.
1284
- if (priority_ >= priority_list()->current_priority()) return false;
1285
- // Reactivate this priority by cancelling deletion timer.
1286
- if (delayed_removal_timer_callback_pending_) {
1287
- grpc_timer_cancel(&delayed_removal_timer_);
1288
- }
1289
- // Switch to this higher priority if it's READY.
1290
- if (connectivity_state_ != GRPC_CHANNEL_READY) return false;
1291
- priority_list()->SwitchToHigherPriorityLocked(priority_);
1292
- return true;
1293
- }
1294
-
1295
- void XdsLb::PriorityList::LocalityMap::MaybeCancelFailoverTimerLocked() {
1296
- if (failover_timer_callback_pending_) grpc_timer_cancel(&failover_timer_);
1297
- }
1298
-
1299
- void XdsLb::PriorityList::LocalityMap::Orphan() {
1300
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1301
- gpr_log(GPR_INFO, "[xdslb %p] Priority %" PRIu32 " orphaned.", xds_policy(),
1302
- priority_);
1303
- }
1304
- MaybeCancelFailoverTimerLocked();
1305
- if (delayed_removal_timer_callback_pending_) {
1306
- grpc_timer_cancel(&delayed_removal_timer_);
1307
- }
1308
- localities_.clear();
1309
- Unref(DEBUG_LOCATION, "LocalityMap+Orphan");
1310
- }
1311
-
1312
- void XdsLb::PriorityList::LocalityMap::OnLocalityStateUpdateLocked() {
1313
- UpdateConnectivityStateLocked();
1314
- // Ignore priorities not in priority_list_update.
1315
- if (!priority_list_update().Contains(priority_)) return;
1316
- const uint32_t current_priority = priority_list()->current_priority();
1317
- // Ignore lower-than-current priorities.
1318
- if (priority_ > current_priority) return;
1319
- // Maybe update fallback state.
1320
- if (connectivity_state_ == GRPC_CHANNEL_READY) {
1321
- xds_policy_->MaybeCancelFallbackAtStartupChecks();
1322
- xds_policy_->MaybeExitFallbackMode();
1323
- }
1324
- // Update is for a higher-than-current priority. (Special case: update is for
1325
- // any active priority if there is no current priority.)
1326
- if (priority_ < current_priority) {
1327
- if (connectivity_state_ == GRPC_CHANNEL_READY) {
1328
- MaybeCancelFailoverTimerLocked();
1329
- // If a higher-than-current priority becomes READY, switch to use it.
1330
- priority_list()->SwitchToHigherPriorityLocked(priority_);
1331
- } else if (connectivity_state_ == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1332
- // If a higher-than-current priority becomes TRANSIENT_FAILURE, only
1333
- // handle it if it's the priority that is still in failover timeout.
1334
- if (failover_timer_callback_pending_) {
1335
- MaybeCancelFailoverTimerLocked();
1336
- priority_list()->FailoverOnConnectionFailureLocked();
1337
- }
1338
- }
1339
- return;
1340
- }
1341
- // Update is for current priority.
1342
- if (connectivity_state_ != GRPC_CHANNEL_READY) {
1343
- // Fail over if it's no longer READY.
1344
- priority_list()->FailoverOnDisconnectionLocked(priority_);
1345
- }
1346
- // At this point, one of the following things has happened to the current
1347
- // priority.
1348
- // 1. It remained the same (but received picker update from its localities).
1349
- // 2. It changed to a lower priority due to failover.
1350
- // 3. It became invalid because failover didn't yield a READY priority.
1351
- // In any case, update the xds picker.
1352
- priority_list()->UpdateXdsPickerLocked();
1353
- }
1354
-
1355
- void XdsLb::PriorityList::LocalityMap::UpdateConnectivityStateLocked() {
1356
- size_t num_ready = 0;
1357
- size_t num_connecting = 0;
1358
- size_t num_idle = 0;
1359
- size_t num_transient_failures = 0;
1360
- for (const auto& p : localities_) {
1361
- const auto& locality_name = p.first;
1362
- const Locality* locality = p.second.get();
1363
- // Skip the localities that are not in the latest locality map update.
1364
- if (!locality_map_update()->Contains(locality_name)) continue;
1365
- switch (locality->connectivity_state()) {
1366
- case GRPC_CHANNEL_READY: {
1367
- ++num_ready;
1368
- break;
1369
- }
1370
- case GRPC_CHANNEL_CONNECTING: {
1371
- ++num_connecting;
1372
- break;
1373
- }
1374
- case GRPC_CHANNEL_IDLE: {
1375
- ++num_idle;
1376
- break;
1377
- }
1378
- case GRPC_CHANNEL_TRANSIENT_FAILURE: {
1379
- ++num_transient_failures;
1380
- break;
1381
- }
1382
- default:
1383
- GPR_UNREACHABLE_CODE(return );
1384
- }
1385
- }
1386
- if (num_ready > 0) {
1387
- connectivity_state_ = GRPC_CHANNEL_READY;
1388
- } else if (num_connecting > 0) {
1389
- connectivity_state_ = GRPC_CHANNEL_CONNECTING;
1390
- } else if (num_idle > 0) {
1391
- connectivity_state_ = GRPC_CHANNEL_IDLE;
1392
- } else {
1393
- connectivity_state_ = GRPC_CHANNEL_TRANSIENT_FAILURE;
1394
- }
1395
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1396
- gpr_log(GPR_INFO,
1397
- "[xdslb %p] Priority %" PRIu32 " (%p) connectivity changed to %s",
1398
- xds_policy(), priority_, this,
1399
- ConnectivityStateName(connectivity_state_));
1400
- }
1401
- }
1402
-
1403
- void XdsLb::PriorityList::LocalityMap::OnDelayedRemovalTimer(
1404
- void* arg, grpc_error* error) {
1405
- LocalityMap* self = static_cast<LocalityMap*>(arg);
1406
- self->xds_policy_->combiner()->Run(
1407
- GRPC_CLOSURE_INIT(&self->on_delayed_removal_timer_,
1408
- OnDelayedRemovalTimerLocked, self, nullptr),
1409
- GRPC_ERROR_REF(error));
1410
- }
1411
-
1412
- void XdsLb::PriorityList::LocalityMap::OnDelayedRemovalTimerLocked(
1413
- void* arg, grpc_error* error) {
1414
- LocalityMap* self = static_cast<LocalityMap*>(arg);
1415
- self->delayed_removal_timer_callback_pending_ = false;
1416
- if (error == GRPC_ERROR_NONE && !self->xds_policy_->shutting_down_) {
1417
- auto* priority_list = self->priority_list();
1418
- const bool keep = self->priority_list_update().Contains(self->priority_) &&
1419
- self->priority_ <= priority_list->current_priority();
1420
- if (!keep) {
1421
- // This check is to make sure we always delete the locality maps from
1422
- // the lowest priority even if the closures of the back-to-back timers
1423
- // are not run in FIFO order.
1424
- // TODO(juanlishen): Eliminate unnecessary maintenance overhead for some
1425
- // deactivated locality maps when out-of-order closures are run.
1426
- // TODO(juanlishen): Check the timer implementation to see if this
1427
- // defense is necessary.
1428
- if (self->priority_ == priority_list->LowestPriority()) {
1429
- priority_list->priorities_.pop_back();
1430
- } else {
1431
- gpr_log(GPR_ERROR,
1432
- "[xdslb %p] Priority %" PRIu32
1433
- " is not the lowest priority (highest numeric value) but is "
1434
- "attempted to be deleted.",
1435
- self->xds_policy(), self->priority_);
1436
- }
1437
- }
1438
- }
1439
- self->Unref(DEBUG_LOCATION, "LocalityMap+timer");
1440
- }
1441
-
1442
- void XdsLb::PriorityList::LocalityMap::OnFailoverTimer(void* arg,
1443
- grpc_error* error) {
1444
- LocalityMap* self = static_cast<LocalityMap*>(arg);
1445
- self->xds_policy_->combiner()->Run(
1446
- GRPC_CLOSURE_INIT(&self->on_failover_timer_, OnFailoverTimerLocked, self,
1447
- nullptr),
1448
- GRPC_ERROR_REF(error));
1449
- }
1450
-
1451
- void XdsLb::PriorityList::LocalityMap::OnFailoverTimerLocked(
1452
- void* arg, grpc_error* error) {
1453
- LocalityMap* self = static_cast<LocalityMap*>(arg);
1454
- self->failover_timer_callback_pending_ = false;
1455
- if (error == GRPC_ERROR_NONE && !self->xds_policy_->shutting_down_) {
1456
- self->priority_list()->FailoverOnConnectionFailureLocked();
1457
- }
1458
- self->Unref(DEBUG_LOCATION, "LocalityMap+OnFailoverTimerLocked");
1459
- }
1460
-
1461
- //
1462
- // XdsLb::PriorityList::LocalityMap::Locality
1463
- //
1464
-
1465
- XdsLb::PriorityList::LocalityMap::Locality::Locality(
1466
- RefCountedPtr<LocalityMap> locality_map,
1467
- RefCountedPtr<XdsLocalityName> name)
1468
- : locality_map_(std::move(locality_map)), name_(std::move(name)) {
1469
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1470
- gpr_log(GPR_INFO, "[xdslb %p] created Locality %p for %s", xds_policy(),
1471
- this, name_->AsHumanReadableString());
1472
- }
1473
- }
1474
-
1475
- XdsLb::PriorityList::LocalityMap::Locality::~Locality() {
1476
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1477
- gpr_log(GPR_INFO, "[xdslb %p] Locality %p %s: destroying locality",
1478
- xds_policy(), this, name_->AsHumanReadableString());
1479
- }
1480
- locality_map_.reset(DEBUG_LOCATION, "Locality");
1481
- }
1482
-
1483
- grpc_channel_args*
1484
- XdsLb::PriorityList::LocalityMap::Locality::CreateChildPolicyArgsLocked(
1485
- const grpc_channel_args* args_in) {
1486
- const grpc_arg args_to_add[] = {
1487
- // A channel arg indicating if the target is a backend inferred from a
1488
- // grpclb load balancer.
1489
- grpc_channel_arg_integer_create(
1490
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_XDS_LOAD_BALANCER),
1491
- 1),
1492
- // Inhibit client-side health checking, since the balancer does
1493
- // this for us.
1494
- grpc_channel_arg_integer_create(
1495
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
1496
- };
1497
- return grpc_channel_args_copy_and_add(args_in, args_to_add,
1498
- GPR_ARRAY_SIZE(args_to_add));
1499
- }
1500
-
1501
- OrphanablePtr<LoadBalancingPolicy>
1502
- XdsLb::PriorityList::LocalityMap::Locality::CreateChildPolicyLocked(
1503
- const char* name, const grpc_channel_args* args) {
1504
- Helper* helper = new Helper(this->Ref(DEBUG_LOCATION, "Helper"));
1505
- LoadBalancingPolicy::Args lb_policy_args;
1506
- lb_policy_args.combiner = xds_policy()->combiner();
1507
- lb_policy_args.args = args;
1508
- lb_policy_args.channel_control_helper =
1509
- std::unique_ptr<ChannelControlHelper>(helper);
1510
- OrphanablePtr<LoadBalancingPolicy> lb_policy =
1511
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
1512
- name, std::move(lb_policy_args));
1513
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
1514
- gpr_log(GPR_ERROR,
1515
- "[xdslb %p] Locality %p %s: failure creating child policy %s",
1516
- xds_policy(), this, name_->AsHumanReadableString(), name);
1517
- return nullptr;
1518
- }
1519
- helper->set_child(lb_policy.get());
1520
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1521
- gpr_log(GPR_INFO,
1522
- "[xdslb %p] Locality %p %s: Created new child policy %s (%p)",
1523
- xds_policy(), this, name_->AsHumanReadableString(), name,
1524
- lb_policy.get());
1525
- }
1526
- // Add the xDS's interested_parties pollset_set to that of the newly created
1527
- // child policy. This will make the child policy progress upon activity on
1528
- // xDS LB, which in turn is tied to the application's call.
1529
- grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
1530
- xds_policy()->interested_parties());
1531
- return lb_policy;
1532
- }
1533
-
1534
- void XdsLb::PriorityList::LocalityMap::Locality::UpdateLocked(
1535
- uint32_t locality_weight, ServerAddressList serverlist) {
1536
- if (xds_policy()->shutting_down_) return;
1537
- // Update locality weight.
1538
- weight_ = locality_weight;
1539
- if (delayed_removal_timer_callback_pending_) {
1540
- grpc_timer_cancel(&delayed_removal_timer_);
1541
- }
1542
- // Construct update args.
1543
- UpdateArgs update_args;
1544
- update_args.addresses = std::move(serverlist);
1545
- update_args.config = xds_policy()->config_->child_policy();
1546
- update_args.args = CreateChildPolicyArgsLocked(xds_policy()->args_);
1547
- // If the child policy name changes, we need to create a new child
1548
- // policy. When this happens, we leave child_policy_ as-is and store
1549
- // the new child policy in pending_child_policy_. Once the new child
1550
- // policy transitions into state READY, we swap it into child_policy_,
1551
- // replacing the original child policy. So pending_child_policy_ is
1552
- // non-null only between when we apply an update that changes the child
1553
- // policy name and when the new child reports state READY.
1554
- //
1555
- // Updates can arrive at any point during this transition. We always
1556
- // apply updates relative to the most recently created child policy,
1557
- // even if the most recent one is still in pending_child_policy_. This
1558
- // is true both when applying the updates to an existing child policy
1559
- // and when determining whether we need to create a new policy.
1560
- //
1561
- // As a result of this, there are several cases to consider here:
1562
- //
1563
- // 1. We have no existing child policy (i.e., we have started up but
1564
- // have not yet received a serverlist from the balancer or gone
1565
- // into fallback mode; in this case, both child_policy_ and
1566
- // pending_child_policy_ are null). In this case, we create a
1567
- // new child policy and store it in child_policy_.
1568
- //
1569
- // 2. We have an existing child policy and have no pending child policy
1570
- // from a previous update (i.e., either there has not been a
1571
- // previous update that changed the policy name, or we have already
1572
- // finished swapping in the new policy; in this case, child_policy_
1573
- // is non-null but pending_child_policy_ is null). In this case:
1574
- // a. If child_policy_->name() equals child_policy_name, then we
1575
- // update the existing child policy.
1576
- // b. If child_policy_->name() does not equal child_policy_name,
1577
- // we create a new policy. The policy will be stored in
1578
- // pending_child_policy_ and will later be swapped into
1579
- // child_policy_ by the helper when the new child transitions
1580
- // into state READY.
1581
- //
1582
- // 3. We have an existing child policy and have a pending child policy
1583
- // from a previous update (i.e., a previous update set
1584
- // pending_child_policy_ as per case 2b above and that policy has
1585
- // not yet transitioned into state READY and been swapped into
1586
- // child_policy_; in this case, both child_policy_ and
1587
- // pending_child_policy_ are non-null). In this case:
1588
- // a. If pending_child_policy_->name() equals child_policy_name,
1589
- // then we update the existing pending child policy.
1590
- // b. If pending_child_policy->name() does not equal
1591
- // child_policy_name, then we create a new policy. The new
1592
- // policy is stored in pending_child_policy_ (replacing the one
1593
- // that was there before, which will be immediately shut down)
1594
- // and will later be swapped into child_policy_ by the helper
1595
- // when the new child transitions into state READY.
1596
- // TODO(juanlishen): If the child policy is not configured via service config,
1597
- // use whatever algorithm is specified by the balancer.
1598
- const char* child_policy_name = update_args.config == nullptr
1599
- ? "round_robin"
1600
- : update_args.config->name();
1601
- const bool create_policy =
1602
- // case 1
1603
- child_policy_ == nullptr ||
1604
- // case 2b
1605
- (pending_child_policy_ == nullptr &&
1606
- strcmp(child_policy_->name(), child_policy_name) != 0) ||
1607
- // case 3b
1608
- (pending_child_policy_ != nullptr &&
1609
- strcmp(pending_child_policy_->name(), child_policy_name) != 0);
1610
- LoadBalancingPolicy* policy_to_update = nullptr;
1611
- if (create_policy) {
1612
- // Cases 1, 2b, and 3b: create a new child policy.
1613
- // If child_policy_ is null, we set it (case 1), else we set
1614
- // pending_child_policy_ (cases 2b and 3b).
1615
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1616
- gpr_log(GPR_INFO,
1617
- "[xdslb %p] Locality %p %s: Creating new %schild policy %s",
1618
- xds_policy(), this, name_->AsHumanReadableString(),
1619
- child_policy_ == nullptr ? "" : "pending ", child_policy_name);
1620
- }
1621
- auto& lb_policy =
1622
- child_policy_ == nullptr ? child_policy_ : pending_child_policy_;
1623
- lb_policy = CreateChildPolicyLocked(child_policy_name, update_args.args);
1624
- policy_to_update = lb_policy.get();
1625
- } else {
1626
- // Cases 2a and 3a: update an existing policy.
1627
- // If we have a pending child policy, send the update to the pending
1628
- // policy (case 3a), else send it to the current policy (case 2a).
1629
- policy_to_update = pending_child_policy_ != nullptr
1630
- ? pending_child_policy_.get()
1631
- : child_policy_.get();
1632
- }
1633
- GPR_ASSERT(policy_to_update != nullptr);
1634
- // Update the policy.
1635
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1636
- gpr_log(GPR_INFO, "[xdslb %p] Locality %p %s: Updating %schild policy %p",
1637
- xds_policy(), this, name_->AsHumanReadableString(),
1638
- policy_to_update == pending_child_policy_.get() ? "pending " : "",
1639
- policy_to_update);
1640
- }
1641
- policy_to_update->UpdateLocked(std::move(update_args));
1642
- }
1643
-
1644
- void XdsLb::PriorityList::LocalityMap::Locality::ShutdownLocked() {
1645
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1646
- gpr_log(GPR_INFO, "[xdslb %p] Locality %p %s: shutting down locality",
1647
- xds_policy(), this, name_->AsHumanReadableString());
1648
- }
1649
- // Remove the child policy's interested_parties pollset_set from the
1650
- // xDS policy.
1651
- grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
1652
- xds_policy()->interested_parties());
1653
- child_policy_.reset();
1654
- if (pending_child_policy_ != nullptr) {
1655
- grpc_pollset_set_del_pollset_set(
1656
- pending_child_policy_->interested_parties(),
1657
- xds_policy()->interested_parties());
1658
- pending_child_policy_.reset();
1659
- }
1660
- // Drop our ref to the child's picker, in case it's holding a ref to
1661
- // the child.
1662
- picker_wrapper_.reset();
1663
- if (delayed_removal_timer_callback_pending_) {
1664
- grpc_timer_cancel(&delayed_removal_timer_);
1665
- }
1666
- shutdown_ = true;
1667
- }
1668
-
1669
- void XdsLb::PriorityList::LocalityMap::Locality::ResetBackoffLocked() {
1670
- child_policy_->ResetBackoffLocked();
1671
- if (pending_child_policy_ != nullptr) {
1672
- pending_child_policy_->ResetBackoffLocked();
1673
- }
1674
- }
1675
-
1676
- void XdsLb::PriorityList::LocalityMap::Locality::Orphan() {
1677
- ShutdownLocked();
1678
- Unref();
1679
- }
1680
-
1681
- void XdsLb::PriorityList::LocalityMap::Locality::DeactivateLocked() {
1682
- // If already deactivated, don't do that again.
1683
- if (weight_ == 0) return;
1684
- // Set the locality weight to 0 so that future xds picker won't contain this
1685
- // locality.
1686
- weight_ = 0;
1687
- // Start a timer to delete the locality.
1688
- Ref(DEBUG_LOCATION, "Locality+timer").release();
1689
- GRPC_CLOSURE_INIT(&on_delayed_removal_timer_, OnDelayedRemovalTimer, this,
1690
- grpc_schedule_on_exec_ctx);
1691
- grpc_timer_init(
1692
- &delayed_removal_timer_,
1693
- ExecCtx::Get()->Now() + xds_policy()->locality_retention_interval_ms_,
1694
- &on_delayed_removal_timer_);
1695
- delayed_removal_timer_callback_pending_ = true;
1696
- }
1697
-
1698
- void XdsLb::PriorityList::LocalityMap::Locality::OnDelayedRemovalTimer(
1699
- void* arg, grpc_error* error) {
1700
- Locality* self = static_cast<Locality*>(arg);
1701
- self->xds_policy()->combiner()->Run(
1702
- GRPC_CLOSURE_INIT(&self->on_delayed_removal_timer_,
1703
- OnDelayedRemovalTimerLocked, self, nullptr),
1704
- GRPC_ERROR_REF(error));
1705
- }
1706
-
1707
- void XdsLb::PriorityList::LocalityMap::Locality::OnDelayedRemovalTimerLocked(
1708
- void* arg, grpc_error* error) {
1709
- Locality* self = static_cast<Locality*>(arg);
1710
- self->delayed_removal_timer_callback_pending_ = false;
1711
- if (error == GRPC_ERROR_NONE && !self->shutdown_ && self->weight_ == 0) {
1712
- self->locality_map_->localities_.erase(self->name_);
1713
- }
1714
- self->Unref(DEBUG_LOCATION, "Locality+timer");
1715
- }
1716
-
1717
- //
1718
- // XdsLb::Locality::Helper
1719
- //
1720
-
1721
- bool XdsLb::PriorityList::LocalityMap::Locality::Helper::CalledByPendingChild()
1722
- const {
1723
- GPR_ASSERT(child_ != nullptr);
1724
- return child_ == locality_->pending_child_policy_.get();
1725
- }
1726
-
1727
- bool XdsLb::PriorityList::LocalityMap::Locality::Helper::CalledByCurrentChild()
1728
- const {
1729
- GPR_ASSERT(child_ != nullptr);
1730
- return child_ == locality_->child_policy_.get();
1731
- }
1732
-
1733
- RefCountedPtr<SubchannelInterface>
1734
- XdsLb::PriorityList::LocalityMap::Locality::Helper::CreateSubchannel(
1735
- const grpc_channel_args& args) {
1736
- if (locality_->xds_policy()->shutting_down_ ||
1737
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
1738
- return nullptr;
1739
- }
1740
- return locality_->xds_policy()->channel_control_helper()->CreateSubchannel(
1741
- args);
1742
- }
1743
-
1744
- void XdsLb::PriorityList::LocalityMap::Locality::Helper::UpdateState(
1745
- grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
1746
- if (locality_->xds_policy()->shutting_down_) return;
1747
- // If this request is from the pending child policy, ignore it until
1748
- // it reports READY, at which point we swap it into place.
1749
- if (CalledByPendingChild()) {
1750
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
1751
- gpr_log(GPR_INFO,
1752
- "[xdslb %p helper %p] pending child policy %p reports state=%s",
1753
- locality_->xds_policy(), this,
1754
- locality_->pending_child_policy_.get(),
1755
- ConnectivityStateName(state));
1756
- }
1757
- if (state != GRPC_CHANNEL_READY) return;
1758
- grpc_pollset_set_del_pollset_set(
1759
- locality_->child_policy_->interested_parties(),
1760
- locality_->xds_policy()->interested_parties());
1761
- locality_->child_policy_ = std::move(locality_->pending_child_policy_);
1762
- } else if (!CalledByCurrentChild()) {
1763
- // This request is from an outdated child, so ignore it.
1764
- return;
1765
- }
1766
- // Cache the picker and its state in the locality.
1767
- // TODO(roth): If load reporting is not configured, we should ideally
1768
- // pass a null LocalityStats ref to the EndpointPickerWrapper and have it
1769
- // not collect any stats, since they're not going to be used. This would
1770
- // require recreating all of the pickers whenever we get a config update.
1771
- locality_->picker_wrapper_ = MakeRefCounted<EndpointPickerWrapper>(
1772
- std::move(picker),
1773
- locality_->xds_policy()->client_stats_.FindLocalityStats(
1774
- locality_->name_));
1775
- locality_->connectivity_state_ = state;
1776
- // Notify the locality map.
1777
- locality_->locality_map_->OnLocalityStateUpdateLocked();
1778
- }
1779
-
1780
- void XdsLb::PriorityList::LocalityMap::Locality::Helper::AddTraceEvent(
1781
- TraceSeverity severity, StringView message) {
1782
- if (locality_->xds_policy()->shutting_down_ ||
1783
- (!CalledByPendingChild() && !CalledByCurrentChild())) {
1784
- return;
1785
- }
1786
- locality_->xds_policy()->channel_control_helper()->AddTraceEvent(severity,
1787
- message);
1788
- }
1789
-
1790
- //
1791
- // factory
1792
- //
1793
-
1794
- class XdsFactory : public LoadBalancingPolicyFactory {
1795
- public:
1796
- OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1797
- LoadBalancingPolicy::Args args) const override {
1798
- return MakeOrphanable<XdsLb>(std::move(args));
1799
- }
1800
-
1801
- const char* name() const override { return kXds; }
1802
-
1803
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1804
- const grpc_json* json, grpc_error** error) const override {
1805
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1806
- if (json == nullptr) {
1807
- // xds was mentioned as a policy in the deprecated loadBalancingPolicy
1808
- // field or in the client API.
1809
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1810
- "field:loadBalancingPolicy error:xds policy requires configuration. "
1811
- "Please use loadBalancingConfig field of service config instead.");
1812
- return nullptr;
1813
- }
1814
- GPR_DEBUG_ASSERT(strcmp(json->key, name()) == 0);
1815
- InlinedVector<grpc_error*, 3> error_list;
1816
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
1817
- RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy;
1818
- const char* eds_service_name = nullptr;
1819
- const char* lrs_load_reporting_server_name = nullptr;
1820
- for (const grpc_json* field = json->child; field != nullptr;
1821
- field = field->next) {
1822
- if (field->key == nullptr) continue;
1823
- if (strcmp(field->key, "childPolicy") == 0) {
1824
- if (child_policy != nullptr) {
1825
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1826
- "field:childPolicy error:Duplicate entry"));
1827
- }
1828
- grpc_error* parse_error = GRPC_ERROR_NONE;
1829
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1830
- field, &parse_error);
1831
- if (child_policy == nullptr) {
1832
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1833
- error_list.push_back(parse_error);
1834
- }
1835
- } else if (strcmp(field->key, "fallbackPolicy") == 0) {
1836
- if (fallback_policy != nullptr) {
1837
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1838
- "field:fallbackPolicy error:Duplicate entry"));
1839
- }
1840
- grpc_error* parse_error = GRPC_ERROR_NONE;
1841
- fallback_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1842
- field, &parse_error);
1843
- if (fallback_policy == nullptr) {
1844
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1845
- error_list.push_back(parse_error);
1846
- }
1847
- } else if (strcmp(field->key, "edsServiceName") == 0) {
1848
- if (eds_service_name != nullptr) {
1849
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1850
- "field:edsServiceName error:Duplicate entry"));
1851
- }
1852
- if (field->type != GRPC_JSON_STRING) {
1853
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1854
- "field:edsServiceName error:type should be string"));
1855
- continue;
1856
- }
1857
- eds_service_name = field->value;
1858
- } else if (strcmp(field->key, "lrsLoadReportingServerName") == 0) {
1859
- if (lrs_load_reporting_server_name != nullptr) {
1860
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1861
- "field:lrsLoadReportingServerName error:Duplicate entry"));
1862
- }
1863
- if (field->type != GRPC_JSON_STRING) {
1864
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1865
- "field:lrsLoadReportingServerName error:type should be string"));
1866
- continue;
1867
- }
1868
- lrs_load_reporting_server_name = field->value;
1869
- }
1870
- }
1871
- if (error_list.empty()) {
1872
- return MakeRefCounted<ParsedXdsConfig>(
1873
- std::move(child_policy), std::move(fallback_policy),
1874
- grpc_core::UniquePtr<char>(gpr_strdup(eds_service_name)),
1875
- grpc_core::UniquePtr<char>(
1876
- gpr_strdup(lrs_load_reporting_server_name)));
1877
- } else {
1878
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("Xds Parser", &error_list);
1879
- return nullptr;
1880
- }
1881
- }
1882
- };
1883
-
1884
- } // namespace
1885
-
1886
- } // namespace grpc_core
1887
-
1888
- //
1889
- // Plugin registration
1890
- //
1891
-
1892
- void grpc_lb_policy_xds_init() {
1893
- grpc_core::LoadBalancingPolicyRegistry::Builder::
1894
- RegisterLoadBalancingPolicyFactory(
1895
- grpc_core::MakeUnique<grpc_core::XdsFactory>());
1896
- }
1897
-
1898
- void grpc_lb_policy_xds_shutdown() {}