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
@@ -18,6 +18,8 @@
18
18
 
19
19
  #include <string.h>
20
20
 
21
+ #include "absl/strings/str_cat.h"
22
+
21
23
  #include "src/core/ext/filters/client_channel/lb_policy.h"
22
24
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
23
25
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
@@ -36,22 +38,21 @@ namespace {
36
38
 
37
39
  constexpr char kCds[] = "cds_experimental";
38
40
 
39
- // Parsed config for this LB policy.
40
- class ParsedCdsConfig : public LoadBalancingPolicy::Config {
41
+ // Config for this LB policy.
42
+ class CdsLbConfig : public LoadBalancingPolicy::Config {
41
43
  public:
42
- explicit ParsedCdsConfig(grpc_core::UniquePtr<char> cluster)
43
- : cluster_(std::move(cluster)) {}
44
- const char* cluster() const { return cluster_.get(); }
44
+ explicit CdsLbConfig(std::string cluster) : cluster_(std::move(cluster)) {}
45
+ const std::string& cluster() const { return cluster_; }
45
46
  const char* name() const override { return kCds; }
46
47
 
47
48
  private:
48
- grpc_core::UniquePtr<char> cluster_;
49
+ std::string cluster_;
49
50
  };
50
51
 
51
52
  // CDS LB policy.
52
53
  class CdsLb : public LoadBalancingPolicy {
53
54
  public:
54
- explicit CdsLb(Args args);
55
+ CdsLb(RefCountedPtr<XdsClient> xds_client, Args args);
55
56
 
56
57
  const char* name() const override { return kCds; }
57
58
 
@@ -64,8 +65,9 @@ class CdsLb : public LoadBalancingPolicy {
64
65
  public:
65
66
  explicit ClusterWatcher(RefCountedPtr<CdsLb> parent)
66
67
  : parent_(std::move(parent)) {}
67
- void OnClusterChanged(CdsUpdate cluster_data) override;
68
+ void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override;
68
69
  void OnError(grpc_error* error) override;
70
+ void OnResourceDoesNotExist() override;
69
71
 
70
72
  private:
71
73
  RefCountedPtr<CdsLb> parent_;
@@ -80,7 +82,8 @@ class CdsLb : public LoadBalancingPolicy {
80
82
  void UpdateState(grpc_connectivity_state state,
81
83
  std::unique_ptr<SubchannelPicker> picker) override;
82
84
  void RequestReresolution() override;
83
- void AddTraceEvent(TraceSeverity severity, StringView message) override;
85
+ void AddTraceEvent(TraceSeverity severity,
86
+ absl::string_view message) override;
84
87
 
85
88
  private:
86
89
  RefCountedPtr<CdsLb> parent_;
@@ -90,7 +93,9 @@ class CdsLb : public LoadBalancingPolicy {
90
93
 
91
94
  void ShutdownLocked() override;
92
95
 
93
- RefCountedPtr<ParsedCdsConfig> config_;
96
+ void MaybeDestroyChildPolicyLocked();
97
+
98
+ RefCountedPtr<CdsLbConfig> config_;
94
99
 
95
100
  // Current channel args from the resolver.
96
101
  const grpc_channel_args* args_ = nullptr;
@@ -112,47 +117,56 @@ class CdsLb : public LoadBalancingPolicy {
112
117
  // CdsLb::ClusterWatcher
113
118
  //
114
119
 
115
- void CdsLb::ClusterWatcher::OnClusterChanged(CdsUpdate cluster_data) {
120
+ void CdsLb::ClusterWatcher::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
116
121
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
117
- gpr_log(GPR_INFO, "[cdslb %p] received CDS update from xds client",
118
- parent_.get());
122
+ gpr_log(GPR_INFO,
123
+ "[cdslb %p] received CDS update from xds client %p: "
124
+ "eds_service_name=%s lrs_load_reporting_server_name=%s",
125
+ parent_.get(), parent_->xds_client_.get(),
126
+ cluster_data.eds_service_name.c_str(),
127
+ cluster_data.lrs_load_reporting_server_name.has_value()
128
+ ? cluster_data.lrs_load_reporting_server_name.value().c_str()
129
+ : "(unset)");
119
130
  }
120
131
  // Construct config for child policy.
121
- char* lrs_str = nullptr;
122
- if (cluster_data.lrs_load_reporting_server_name != nullptr) {
123
- gpr_asprintf(&lrs_str, " \"lrsLoadReportingServerName\": \"%s\",\n",
124
- cluster_data.lrs_load_reporting_server_name.get());
132
+ Json::Object child_config = {
133
+ {"clusterName", parent_->config_->cluster()},
134
+ {"localityPickingPolicy",
135
+ Json::Array{
136
+ Json::Object{
137
+ {"weighted_target_experimental",
138
+ Json::Object{
139
+ {"targets", Json::Object()},
140
+ }},
141
+ },
142
+ }},
143
+ {"endpointPickingPolicy",
144
+ Json::Array{
145
+ Json::Object{
146
+ {"round_robin", Json::Object()},
147
+ },
148
+ }},
149
+ };
150
+ if (!cluster_data.eds_service_name.empty()) {
151
+ child_config["edsServiceName"] = cluster_data.eds_service_name;
152
+ }
153
+ if (cluster_data.lrs_load_reporting_server_name.has_value()) {
154
+ child_config["lrsLoadReportingServerName"] =
155
+ cluster_data.lrs_load_reporting_server_name.value();
125
156
  }
126
- char* json_str;
127
- gpr_asprintf(&json_str,
128
- "[{\n"
129
- " \"xds_experimental\": {\n"
130
- "%s"
131
- " \"edsServiceName\": \"%s\"\n"
132
- " }\n"
133
- "}]",
134
- (lrs_str == nullptr ? "" : lrs_str),
135
- (cluster_data.eds_service_name == nullptr
136
- ? parent_->config_->cluster()
137
- : cluster_data.eds_service_name.get()));
138
- gpr_free(lrs_str);
139
- grpc_core::UniquePtr<char> json_str_deleter(json_str);
157
+ Json json = Json::Array{
158
+ Json::Object{
159
+ {"eds_experimental", std::move(child_config)},
160
+ },
161
+ };
140
162
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
163
+ std::string json_str = json.Dump(/*indent=*/1);
141
164
  gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
142
- parent_.get(), json_str);
143
- }
144
- grpc_json* json = grpc_json_parse_string(json_str);
145
- if (json == nullptr) {
146
- char* msg;
147
- gpr_asprintf(&msg, "Could not parse LB config: %s", json_str);
148
- OnError(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg));
149
- gpr_free(msg);
150
- return;
165
+ parent_.get(), json_str.c_str());
151
166
  }
152
167
  grpc_error* error = GRPC_ERROR_NONE;
153
168
  RefCountedPtr<LoadBalancingPolicy::Config> config =
154
169
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
155
- grpc_json_destroy(json);
156
170
  if (error != GRPC_ERROR_NONE) {
157
171
  OnError(error);
158
172
  return;
@@ -160,15 +174,24 @@ void CdsLb::ClusterWatcher::OnClusterChanged(CdsUpdate cluster_data) {
160
174
  // Create child policy if not already present.
161
175
  if (parent_->child_policy_ == nullptr) {
162
176
  LoadBalancingPolicy::Args args;
163
- args.combiner = parent_->combiner();
177
+ args.work_serializer = parent_->work_serializer();
164
178
  args.args = parent_->args_;
165
- args.channel_control_helper = MakeUnique<Helper>(parent_->Ref());
179
+ args.channel_control_helper = absl::make_unique<Helper>(parent_->Ref());
166
180
  parent_->child_policy_ =
167
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
168
- "xds_experimental", std::move(args));
181
+ LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(config->name(),
182
+ std::move(args));
183
+ if (parent_->child_policy_ == nullptr) {
184
+ OnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
185
+ "failed to create child policy"));
186
+ return;
187
+ }
169
188
  grpc_pollset_set_add_pollset_set(
170
189
  parent_->child_policy_->interested_parties(),
171
190
  parent_->interested_parties());
191
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
192
+ gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)",
193
+ parent_.get(), config->name(), parent_->child_policy_.get());
194
+ }
172
195
  }
173
196
  // Update child policy.
174
197
  UpdateArgs args;
@@ -179,19 +202,35 @@ void CdsLb::ClusterWatcher::OnClusterChanged(CdsUpdate cluster_data) {
179
202
 
180
203
  void CdsLb::ClusterWatcher::OnError(grpc_error* error) {
181
204
  gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
182
- parent_.get(), parent_->config_->cluster(), grpc_error_string(error));
205
+ parent_.get(), parent_->config_->cluster().c_str(),
206
+ grpc_error_string(error));
183
207
  // Go into TRANSIENT_FAILURE if we have not yet created the child
184
208
  // policy (i.e., we have not yet received data from xds). Otherwise,
185
209
  // we keep running with the data we had previously.
186
210
  if (parent_->child_policy_ == nullptr) {
187
211
  parent_->channel_control_helper()->UpdateState(
188
212
  GRPC_CHANNEL_TRANSIENT_FAILURE,
189
- MakeUnique<TransientFailurePicker>(error));
213
+ absl::make_unique<TransientFailurePicker>(error));
190
214
  } else {
191
215
  GRPC_ERROR_UNREF(error);
192
216
  }
193
217
  }
194
218
 
219
+ void CdsLb::ClusterWatcher::OnResourceDoesNotExist() {
220
+ gpr_log(GPR_ERROR,
221
+ "[cdslb %p] CDS resource for %s does not exist -- reporting "
222
+ "TRANSIENT_FAILURE",
223
+ parent_.get(), parent_->config_->cluster().c_str());
224
+ parent_->channel_control_helper()->UpdateState(
225
+ GRPC_CHANNEL_TRANSIENT_FAILURE,
226
+ absl::make_unique<TransientFailurePicker>(
227
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
228
+ absl::StrCat("CDS resource \"", parent_->config_->cluster(),
229
+ "\" does not exist")
230
+ .c_str())));
231
+ parent_->MaybeDestroyChildPolicyLocked();
232
+ }
233
+
195
234
  //
196
235
  // CdsLb::Helper
197
236
  //
@@ -204,7 +243,7 @@ RefCountedPtr CdsLb::Helper::CreateSubchannel(
204
243
 
205
244
  void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
206
245
  std::unique_ptr<SubchannelPicker> picker) {
207
- if (parent_->shutting_down_) return;
246
+ if (parent_->shutting_down_ || parent_->child_policy_ == nullptr) return;
208
247
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
209
248
  gpr_log(GPR_INFO, "[cdslb %p] state updated by child: %s", this,
210
249
  ConnectivityStateName(state));
@@ -221,7 +260,8 @@ void CdsLb::Helper::RequestReresolution() {
221
260
  parent_->channel_control_helper()->RequestReresolution();
222
261
  }
223
262
 
224
- void CdsLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
263
+ void CdsLb::Helper::AddTraceEvent(TraceSeverity severity,
264
+ absl::string_view message) {
225
265
  if (parent_->shutting_down_) return;
226
266
  parent_->channel_control_helper()->AddTraceEvent(severity, message);
227
267
  }
@@ -230,12 +270,11 @@ void CdsLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
230
270
  // CdsLb
231
271
  //
232
272
 
233
- CdsLb::CdsLb(Args args)
234
- : LoadBalancingPolicy(std::move(args)),
235
- xds_client_(XdsClient::GetFromChannelArgs(*args.args)) {
236
- if (xds_client_ != nullptr && GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
237
- gpr_log(GPR_INFO, "[cdslb %p] Using xds client %p from channel", this,
238
- xds_client_.get());
273
+ CdsLb::CdsLb(RefCountedPtr<XdsClient> xds_client, Args args)
274
+ : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
275
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
276
+ gpr_log(GPR_INFO, "[cdslb %p] created -- using xds client %p from channel",
277
+ this, xds_client_.get());
239
278
  }
240
279
  }
241
280
 
@@ -251,46 +290,61 @@ void CdsLb::ShutdownLocked() {
251
290
  gpr_log(GPR_INFO, "[cdslb %p] shutting down", this);
252
291
  }
253
292
  shutting_down_ = true;
254
- if (child_policy_ != nullptr) {
255
- grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
256
- interested_parties());
257
- child_policy_.reset();
258
- }
293
+ MaybeDestroyChildPolicyLocked();
259
294
  if (xds_client_ != nullptr) {
260
295
  if (cluster_watcher_ != nullptr) {
261
- xds_client_->CancelClusterDataWatch(StringView(config_->cluster()),
262
- cluster_watcher_);
296
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
297
+ gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
298
+ config_->cluster().c_str());
299
+ }
300
+ xds_client_->CancelClusterDataWatch(config_->cluster(), cluster_watcher_);
263
301
  }
264
302
  xds_client_.reset();
265
303
  }
266
304
  }
267
305
 
306
+ void CdsLb::MaybeDestroyChildPolicyLocked() {
307
+ if (child_policy_ != nullptr) {
308
+ grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
309
+ interested_parties());
310
+ child_policy_.reset();
311
+ }
312
+ }
313
+
268
314
  void CdsLb::ResetBackoffLocked() {
269
315
  if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
270
316
  }
271
317
 
272
318
  void CdsLb::UpdateLocked(UpdateArgs args) {
273
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
274
- gpr_log(GPR_INFO, "[cdslb %p] received update", this);
275
- }
276
319
  // Update config.
277
320
  auto old_config = std::move(config_);
278
321
  config_ = std::move(args.config);
322
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
323
+ gpr_log(GPR_INFO, "[cdslb %p] received update: cluster=%s", this,
324
+ config_->cluster().c_str());
325
+ }
279
326
  // Update args.
280
327
  grpc_channel_args_destroy(args_);
281
328
  args_ = args.args;
282
329
  args.args = nullptr;
283
330
  // If cluster name changed, cancel watcher and restart.
284
- if (old_config == nullptr ||
285
- strcmp(old_config->cluster(), config_->cluster()) != 0) {
331
+ if (old_config == nullptr || old_config->cluster() != config_->cluster()) {
286
332
  if (old_config != nullptr) {
287
- xds_client_->CancelClusterDataWatch(StringView(old_config->cluster()),
288
- cluster_watcher_);
333
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
334
+ gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
335
+ old_config->cluster().c_str());
336
+ }
337
+ xds_client_->CancelClusterDataWatch(old_config->cluster(),
338
+ cluster_watcher_,
339
+ /*delay_unsubscription=*/true);
340
+ }
341
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
342
+ gpr_log(GPR_INFO, "[cdslb %p] starting watch for cluster %s", this,
343
+ config_->cluster().c_str());
289
344
  }
290
- auto watcher = MakeUnique<ClusterWatcher>(Ref());
345
+ auto watcher = absl::make_unique<ClusterWatcher>(Ref());
291
346
  cluster_watcher_ = watcher.get();
292
- xds_client_->WatchClusterData(StringView(config_->cluster()),
293
- std::move(watcher));
347
+ xds_client_->WatchClusterData(config_->cluster(), std::move(watcher));
294
348
  }
295
349
  }
296
350
 
@@ -298,19 +352,27 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
298
352
  // factory
299
353
  //
300
354
 
301
- class CdsFactory : public LoadBalancingPolicyFactory {
355
+ class CdsLbFactory : public LoadBalancingPolicyFactory {
302
356
  public:
303
357
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
304
358
  LoadBalancingPolicy::Args args) const override {
305
- return MakeOrphanable<CdsLb>(std::move(args));
359
+ RefCountedPtr<XdsClient> xds_client =
360
+ XdsClient::GetFromChannelArgs(*args.args);
361
+ if (xds_client == nullptr) {
362
+ gpr_log(GPR_ERROR,
363
+ "XdsClient not present in channel args -- cannot instantiate "
364
+ "cds LB policy");
365
+ return nullptr;
366
+ }
367
+ return MakeOrphanable<CdsLb>(std::move(xds_client), std::move(args));
306
368
  }
307
369
 
308
370
  const char* name() const override { return kCds; }
309
371
 
310
372
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
311
- const grpc_json* json, grpc_error** error) const override {
373
+ const Json& json, grpc_error** error) const override {
312
374
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
313
- if (json == nullptr) {
375
+ if (json.type() == Json::Type::JSON_NULL) {
314
376
  // xds was mentioned as a policy in the deprecated loadBalancingPolicy
315
377
  // field or in the client API.
316
378
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -318,36 +380,23 @@ class CdsFactory : public LoadBalancingPolicyFactory {
318
380
  "Please use loadBalancingConfig field of service config instead.");
319
381
  return nullptr;
320
382
  }
321
- GPR_DEBUG_ASSERT(strcmp(json->key, name()) == 0);
322
- InlinedVector<grpc_error*, 3> error_list;
323
- const char* cluster = nullptr;
324
- for (const grpc_json* field = json->child; field != nullptr;
325
- field = field->next) {
326
- if (field->key == nullptr) continue;
327
- if (strcmp(field->key, "cluster") == 0) {
328
- if (cluster != nullptr) {
329
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
330
- "field:cluster error:Duplicate entry"));
331
- }
332
- if (field->type != GRPC_JSON_STRING) {
333
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
334
- "field:cluster error:type should be string"));
335
- continue;
336
- }
337
- cluster = field->value;
338
- }
339
- }
340
- if (cluster == nullptr) {
383
+ std::vector<grpc_error*> error_list;
384
+ std::string cluster;
385
+ auto it = json.object_value().find("cluster");
386
+ if (it == json.object_value().end()) {
341
387
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
342
388
  "required field 'cluster' not present"));
343
- }
344
- if (error_list.empty()) {
345
- return MakeRefCounted<ParsedCdsConfig>(
346
- grpc_core::UniquePtr<char>(gpr_strdup(cluster)));
389
+ } else if (it->second.type() != Json::Type::STRING) {
390
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
391
+ "field:cluster error:type should be string"));
347
392
  } else {
393
+ cluster = it->second.string_value();
394
+ }
395
+ if (!error_list.empty()) {
348
396
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("Cds Parser", &error_list);
349
397
  return nullptr;
350
398
  }
399
+ return MakeRefCounted<CdsLbConfig>(std::move(cluster));
351
400
  }
352
401
  };
353
402
 
@@ -362,7 +411,7 @@ class CdsFactory : public LoadBalancingPolicyFactory {
362
411
  void grpc_lb_policy_cds_init() {
363
412
  grpc_core::LoadBalancingPolicyRegistry::Builder::
364
413
  RegisterLoadBalancingPolicyFactory(
365
- grpc_core::MakeUnique<grpc_core::CdsFactory>());
414
+ absl::make_unique<grpc_core::CdsLbFactory>());
366
415
  }
367
416
 
368
417
  void grpc_lb_policy_cds_shutdown() {}
@@ -0,0 +1,938 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include <inttypes.h>
20
+ #include <limits.h>
21
+
22
+ #include "absl/strings/str_cat.h"
23
+ #include "absl/types/optional.h"
24
+
25
+ #include <grpc/grpc.h>
26
+
27
+ #include "src/core/ext/filters/client_channel/client_channel.h"
28
+ #include "src/core/ext/filters/client_channel/lb_policy.h"
29
+ #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
32
+ #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
33
+ #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
34
+ #include "src/core/ext/filters/client_channel/server_address.h"
35
+ #include "src/core/ext/filters/client_channel/xds/xds_channel_args.h"
36
+ #include "src/core/ext/filters/client_channel/xds/xds_client.h"
37
+ #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
38
+ #include "src/core/lib/channel/channel_args.h"
39
+ #include "src/core/lib/gprpp/orphanable.h"
40
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
41
+ #include "src/core/lib/iomgr/timer.h"
42
+ #include "src/core/lib/iomgr/work_serializer.h"
43
+ #include "src/core/lib/uri/uri_parser.h"
44
+
45
+ #define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
46
+
47
+ namespace grpc_core {
48
+
49
+ TraceFlag grpc_lb_eds_trace(false, "eds_lb");
50
+
51
+ namespace {
52
+
53
+ constexpr char kEds[] = "eds_experimental";
54
+
55
+ // Config for EDS LB policy.
56
+ class EdsLbConfig : public LoadBalancingPolicy::Config {
57
+ public:
58
+ EdsLbConfig(std::string cluster_name, std::string eds_service_name,
59
+ absl::optional<std::string> lrs_load_reporting_server_name,
60
+ Json locality_picking_policy, Json endpoint_picking_policy)
61
+ : cluster_name_(std::move(cluster_name)),
62
+ eds_service_name_(std::move(eds_service_name)),
63
+ lrs_load_reporting_server_name_(
64
+ std::move(lrs_load_reporting_server_name)),
65
+ locality_picking_policy_(std::move(locality_picking_policy)),
66
+ endpoint_picking_policy_(std::move(endpoint_picking_policy)) {}
67
+
68
+ const char* name() const override { return kEds; }
69
+
70
+ const std::string& cluster_name() const { return cluster_name_; }
71
+ const std::string& eds_service_name() const { return eds_service_name_; }
72
+ const absl::optional<std::string>& lrs_load_reporting_server_name() const {
73
+ return lrs_load_reporting_server_name_;
74
+ };
75
+ const Json& locality_picking_policy() const {
76
+ return locality_picking_policy_;
77
+ }
78
+ const Json& endpoint_picking_policy() const {
79
+ return endpoint_picking_policy_;
80
+ }
81
+
82
+ private:
83
+ std::string cluster_name_;
84
+ std::string eds_service_name_;
85
+ absl::optional<std::string> lrs_load_reporting_server_name_;
86
+ Json locality_picking_policy_;
87
+ Json endpoint_picking_policy_;
88
+ };
89
+
90
+ // EDS LB policy.
91
+ class EdsLb : public LoadBalancingPolicy {
92
+ public:
93
+ explicit EdsLb(Args args);
94
+
95
+ const char* name() const override { return kEds; }
96
+
97
+ void UpdateLocked(UpdateArgs args) override;
98
+ void ResetBackoffLocked() override;
99
+
100
+ private:
101
+ class EndpointWatcher;
102
+
103
+ // A simple wrapper for ref-counting a picker from the child policy.
104
+ class ChildPickerWrapper : public RefCounted<ChildPickerWrapper> {
105
+ public:
106
+ explicit ChildPickerWrapper(std::unique_ptr<SubchannelPicker> picker)
107
+ : picker_(std::move(picker)) {}
108
+ PickResult Pick(PickArgs args) { return picker_->Pick(args); }
109
+
110
+ private:
111
+ std::unique_ptr<SubchannelPicker> picker_;
112
+ };
113
+
114
+ // A picker that handles drops.
115
+ class DropPicker : public SubchannelPicker {
116
+ public:
117
+ explicit DropPicker(EdsLb* eds_policy);
118
+
119
+ PickResult Pick(PickArgs args) override;
120
+
121
+ private:
122
+ RefCountedPtr<XdsApi::DropConfig> drop_config_;
123
+ RefCountedPtr<XdsClusterDropStats> drop_stats_;
124
+ RefCountedPtr<ChildPickerWrapper> child_picker_;
125
+ };
126
+
127
+ class Helper : public ChannelControlHelper {
128
+ public:
129
+ explicit Helper(RefCountedPtr<EdsLb> eds_policy)
130
+ : eds_policy_(std::move(eds_policy)) {}
131
+
132
+ ~Helper() { eds_policy_.reset(DEBUG_LOCATION, "Helper"); }
133
+
134
+ RefCountedPtr<SubchannelInterface> CreateSubchannel(
135
+ const grpc_channel_args& args) override;
136
+ void UpdateState(grpc_connectivity_state state,
137
+ std::unique_ptr<SubchannelPicker> picker) override;
138
+ // This is a no-op, because we get the addresses from the xds
139
+ // client, which is a watch-based API.
140
+ void RequestReresolution() override {}
141
+ void AddTraceEvent(TraceSeverity severity,
142
+ absl::string_view message) override;
143
+
144
+ private:
145
+ RefCountedPtr<EdsLb> eds_policy_;
146
+ };
147
+
148
+ ~EdsLb();
149
+
150
+ void ShutdownLocked() override;
151
+
152
+ void MaybeDestroyChildPolicyLocked();
153
+
154
+ void UpdatePriorityList(XdsApi::PriorityListUpdate priority_list_update);
155
+ void UpdateChildPolicyLocked();
156
+ OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
157
+ const grpc_channel_args* args);
158
+ ServerAddressList CreateChildPolicyAddressesLocked();
159
+ RefCountedPtr<Config> CreateChildPolicyConfigLocked();
160
+ grpc_channel_args* CreateChildPolicyArgsLocked(
161
+ const grpc_channel_args* args_in);
162
+ void MaybeUpdateDropPickerLocked();
163
+
164
+ // Caller must ensure that config_ is set before calling.
165
+ const absl::string_view GetEdsResourceName() const {
166
+ if (xds_client_from_channel_ == nullptr) return server_name_;
167
+ if (!config_->eds_service_name().empty()) {
168
+ return config_->eds_service_name();
169
+ }
170
+ return config_->cluster_name();
171
+ }
172
+
173
+ // Returns a pair containing the cluster and eds_service_name to use
174
+ // for LRS load reporting.
175
+ // Caller must ensure that config_ is set before calling.
176
+ std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
177
+ if (xds_client_from_channel_ == nullptr) return {server_name_, nullptr};
178
+ return {config_->cluster_name(), config_->eds_service_name()};
179
+ }
180
+
181
+ XdsClient* xds_client() const {
182
+ return xds_client_from_channel_ != nullptr ? xds_client_from_channel_.get()
183
+ : xds_client_.get();
184
+ }
185
+
186
+ // Server name from target URI.
187
+ std::string server_name_;
188
+
189
+ // Current channel args and config from the resolver.
190
+ const grpc_channel_args* args_ = nullptr;
191
+ RefCountedPtr<EdsLbConfig> config_;
192
+
193
+ // Internal state.
194
+ bool shutting_down_ = false;
195
+
196
+ // The xds client and endpoint watcher.
197
+ // If we get the XdsClient from the channel, we store it in
198
+ // xds_client_from_channel_; if we create it ourselves, we store it in
199
+ // xds_client_.
200
+ RefCountedPtr<XdsClient> xds_client_from_channel_;
201
+ OrphanablePtr<XdsClient> xds_client_;
202
+ // A pointer to the endpoint watcher, to be used when cancelling the watch.
203
+ // Note that this is not owned, so this pointer must never be derefernced.
204
+ EndpointWatcher* endpoint_watcher_ = nullptr;
205
+ // The latest data from the endpoint watcher.
206
+ XdsApi::PriorityListUpdate priority_list_update_;
207
+ // State used to retain child policy names for priority policy.
208
+ std::vector<size_t /*child_number*/> priority_child_numbers_;
209
+
210
+ RefCountedPtr<XdsApi::DropConfig> drop_config_;
211
+ RefCountedPtr<XdsClusterDropStats> drop_stats_;
212
+
213
+ OrphanablePtr<LoadBalancingPolicy> child_policy_;
214
+
215
+ // The latest state and picker returned from the child policy.
216
+ grpc_connectivity_state child_state_;
217
+ RefCountedPtr<ChildPickerWrapper> child_picker_;
218
+ };
219
+
220
+ //
221
+ // EdsLb::DropPicker
222
+ //
223
+
224
+ EdsLb::DropPicker::DropPicker(EdsLb* eds_policy)
225
+ : drop_config_(eds_policy->drop_config_),
226
+ drop_stats_(eds_policy->drop_stats_),
227
+ child_picker_(eds_policy->child_picker_) {
228
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
229
+ gpr_log(GPR_INFO, "[edslb %p] constructed new drop picker %p", eds_policy,
230
+ this);
231
+ }
232
+ }
233
+
234
+ EdsLb::PickResult EdsLb::DropPicker::Pick(PickArgs args) {
235
+ // Handle drop.
236
+ const std::string* drop_category;
237
+ if (drop_config_->ShouldDrop(&drop_category)) {
238
+ if (drop_stats_ != nullptr) drop_stats_->AddCallDropped(*drop_category);
239
+ PickResult result;
240
+ result.type = PickResult::PICK_COMPLETE;
241
+ return result;
242
+ }
243
+ // If we're not dropping all calls, we should always have a child picker.
244
+ if (child_picker_ == nullptr) { // Should never happen.
245
+ PickResult result;
246
+ result.type = PickResult::PICK_FAILED;
247
+ result.error =
248
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
249
+ "eds drop picker not given any child picker"),
250
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
251
+ return result;
252
+ }
253
+ // Not dropping, so delegate to child's picker.
254
+ return child_picker_->Pick(args);
255
+ }
256
+
257
+ //
258
+ // EdsLb::Helper
259
+ //
260
+
261
+ RefCountedPtr<SubchannelInterface> EdsLb::Helper::CreateSubchannel(
262
+ const grpc_channel_args& args) {
263
+ if (eds_policy_->shutting_down_) return nullptr;
264
+ return eds_policy_->channel_control_helper()->CreateSubchannel(args);
265
+ }
266
+
267
+ void EdsLb::Helper::UpdateState(grpc_connectivity_state state,
268
+ std::unique_ptr<SubchannelPicker> picker) {
269
+ if (eds_policy_->shutting_down_ || eds_policy_->child_policy_ == nullptr) {
270
+ return;
271
+ }
272
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
273
+ gpr_log(GPR_INFO, "[edslb %p] child policy updated state=%s picker=%p",
274
+ eds_policy_.get(), ConnectivityStateName(state), picker.get());
275
+ }
276
+ // Save the state and picker.
277
+ eds_policy_->child_state_ = state;
278
+ eds_policy_->child_picker_ =
279
+ MakeRefCounted<ChildPickerWrapper>(std::move(picker));
280
+ // Wrap the picker in a DropPicker and pass it up.
281
+ eds_policy_->MaybeUpdateDropPickerLocked();
282
+ }
283
+
284
+ void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
285
+ absl::string_view message) {
286
+ if (eds_policy_->shutting_down_) return;
287
+ eds_policy_->channel_control_helper()->AddTraceEvent(severity, message);
288
+ }
289
+
290
+ //
291
+ // EdsLb::EndpointWatcher
292
+ //
293
+
294
+ class EdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
295
+ public:
296
+ explicit EndpointWatcher(RefCountedPtr<EdsLb> eds_policy)
297
+ : eds_policy_(std::move(eds_policy)) {}
298
+
299
+ ~EndpointWatcher() { eds_policy_.reset(DEBUG_LOCATION, "EndpointWatcher"); }
300
+
301
+ void OnEndpointChanged(XdsApi::EdsUpdate update) override {
302
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
303
+ gpr_log(GPR_INFO, "[edslb %p] Received EDS update from xds client",
304
+ eds_policy_.get());
305
+ }
306
+ // Update the drop config.
307
+ const bool drop_config_changed =
308
+ eds_policy_->drop_config_ == nullptr ||
309
+ *eds_policy_->drop_config_ != *update.drop_config;
310
+ if (drop_config_changed) {
311
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
312
+ gpr_log(GPR_INFO, "[edslb %p] Updating drop config", eds_policy_.get());
313
+ }
314
+ eds_policy_->drop_config_ = std::move(update.drop_config);
315
+ eds_policy_->MaybeUpdateDropPickerLocked();
316
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
317
+ gpr_log(GPR_INFO, "[edslb %p] Drop config unchanged, ignoring",
318
+ eds_policy_.get());
319
+ }
320
+ // Update priority and locality info.
321
+ if (eds_policy_->child_policy_ == nullptr ||
322
+ eds_policy_->priority_list_update_ != update.priority_list_update) {
323
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
324
+ gpr_log(GPR_INFO, "[edslb %p] Updating priority list",
325
+ eds_policy_.get());
326
+ }
327
+ eds_policy_->UpdatePriorityList(std::move(update.priority_list_update));
328
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
329
+ gpr_log(GPR_INFO, "[edslb %p] Priority list unchanged, ignoring",
330
+ eds_policy_.get());
331
+ }
332
+ }
333
+
334
+ void OnError(grpc_error* error) override {
335
+ gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s",
336
+ eds_policy_.get(), grpc_error_string(error));
337
+ // Go into TRANSIENT_FAILURE if we have not yet created the child
338
+ // policy (i.e., we have not yet received data from xds). Otherwise,
339
+ // we keep running with the data we had previously.
340
+ if (eds_policy_->child_policy_ == nullptr) {
341
+ eds_policy_->channel_control_helper()->UpdateState(
342
+ GRPC_CHANNEL_TRANSIENT_FAILURE,
343
+ absl::make_unique<TransientFailurePicker>(error));
344
+ } else {
345
+ GRPC_ERROR_UNREF(error);
346
+ }
347
+ }
348
+
349
+ void OnResourceDoesNotExist() override {
350
+ gpr_log(
351
+ GPR_ERROR,
352
+ "[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
353
+ eds_policy_.get());
354
+ eds_policy_->channel_control_helper()->UpdateState(
355
+ GRPC_CHANNEL_TRANSIENT_FAILURE,
356
+ absl::make_unique<TransientFailurePicker>(
357
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
358
+ "EDS resource does not exist")));
359
+ eds_policy_->MaybeDestroyChildPolicyLocked();
360
+ }
361
+
362
+ private:
363
+ RefCountedPtr<EdsLb> eds_policy_;
364
+ };
365
+
366
+ //
367
+ // EdsLb public methods
368
+ //
369
+
370
+ EdsLb::EdsLb(Args args)
371
+ : LoadBalancingPolicy(std::move(args)),
372
+ xds_client_from_channel_(XdsClient::GetFromChannelArgs(*args.args)) {
373
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
374
+ gpr_log(GPR_INFO, "[edslb %p] created -- xds client from channel: %p", this,
375
+ xds_client_from_channel_.get());
376
+ }
377
+ // Record server name.
378
+ const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
379
+ const char* server_uri = grpc_channel_arg_get_string(arg);
380
+ GPR_ASSERT(server_uri != nullptr);
381
+ grpc_uri* uri = grpc_uri_parse(server_uri, true);
382
+ GPR_ASSERT(uri->path[0] != '\0');
383
+ server_name_ = uri->path[0] == '/' ? uri->path + 1 : uri->path;
384
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
385
+ gpr_log(GPR_INFO, "[edslb %p] server name from channel: %s", this,
386
+ server_name_.c_str());
387
+ }
388
+ grpc_uri_destroy(uri);
389
+ }
390
+
391
+ EdsLb::~EdsLb() {
392
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
393
+ gpr_log(GPR_INFO, "[edslb %p] destroying xds LB policy", this);
394
+ }
395
+ grpc_channel_args_destroy(args_);
396
+ }
397
+
398
+ void EdsLb::ShutdownLocked() {
399
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
400
+ gpr_log(GPR_INFO, "[edslb %p] shutting down", this);
401
+ }
402
+ shutting_down_ = true;
403
+ // Drop our ref to the child's picker, in case it's holding a ref to
404
+ // the child.
405
+ child_picker_.reset();
406
+ MaybeDestroyChildPolicyLocked();
407
+ drop_stats_.reset();
408
+ // Cancel the endpoint watch here instead of in our dtor if we are using the
409
+ // xds resolver, because the watcher holds a ref to us and we might not be
410
+ // destroying the XdsClient, leading to a situation where this LB policy is
411
+ // never destroyed.
412
+ if (xds_client_from_channel_ != nullptr) {
413
+ if (config_ != nullptr) {
414
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
415
+ gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
416
+ std::string(GetEdsResourceName()).c_str());
417
+ }
418
+ xds_client()->CancelEndpointDataWatch(GetEdsResourceName(),
419
+ endpoint_watcher_);
420
+ }
421
+ xds_client_from_channel_.reset();
422
+ }
423
+ xds_client_.reset();
424
+ }
425
+
426
+ void EdsLb::MaybeDestroyChildPolicyLocked() {
427
+ if (child_policy_ != nullptr) {
428
+ grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
429
+ interested_parties());
430
+ child_policy_.reset();
431
+ }
432
+ }
433
+
434
+ void EdsLb::UpdateLocked(UpdateArgs args) {
435
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
436
+ gpr_log(GPR_INFO, "[edslb %p] Received update", this);
437
+ }
438
+ const bool is_initial_update = args_ == nullptr;
439
+ // Update config.
440
+ auto old_config = std::move(config_);
441
+ config_ = std::move(args.config);
442
+ // Update args.
443
+ grpc_channel_args_destroy(args_);
444
+ args_ = args.args;
445
+ args.args = nullptr;
446
+ if (is_initial_update) {
447
+ // Initialize XdsClient.
448
+ if (xds_client_from_channel_ == nullptr) {
449
+ grpc_error* error = GRPC_ERROR_NONE;
450
+ xds_client_ = MakeOrphanable<XdsClient>(
451
+ work_serializer(), interested_parties(), GetEdsResourceName(),
452
+ nullptr /* service config watcher */, *args_, &error);
453
+ // TODO(roth): If we decide that we care about EDS-only mode, add
454
+ // proper error handling here.
455
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
456
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
457
+ gpr_log(GPR_INFO, "[edslb %p] Created xds client %p", this,
458
+ xds_client_.get());
459
+ }
460
+ }
461
+ }
462
+ // Update drop stats for load reporting if needed.
463
+ if (is_initial_update || config_->lrs_load_reporting_server_name() !=
464
+ old_config->lrs_load_reporting_server_name()) {
465
+ drop_stats_.reset();
466
+ if (config_->lrs_load_reporting_server_name().has_value()) {
467
+ const auto key = GetLrsClusterKey();
468
+ drop_stats_ = xds_client()->AddClusterDropStats(
469
+ config_->lrs_load_reporting_server_name().value(),
470
+ key.first /*cluster_name*/, key.second /*eds_service_name*/);
471
+ }
472
+ MaybeUpdateDropPickerLocked();
473
+ }
474
+ // Update child policy if needed.
475
+ // Note that this comes after updating drop_stats_, since we want that
476
+ // to be used by any new picker we create here.
477
+ if (child_policy_ != nullptr) UpdateChildPolicyLocked();
478
+ // Create endpoint watcher if needed.
479
+ if (is_initial_update) {
480
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
481
+ gpr_log(GPR_INFO, "[edslb %p] starting xds watch for %s", this,
482
+ std::string(GetEdsResourceName()).c_str());
483
+ }
484
+ auto watcher = absl::make_unique<EndpointWatcher>(
485
+ Ref(DEBUG_LOCATION, "EndpointWatcher"));
486
+ endpoint_watcher_ = watcher.get();
487
+ xds_client()->WatchEndpointData(GetEdsResourceName(), std::move(watcher));
488
+ }
489
+ }
490
+
491
+ void EdsLb::ResetBackoffLocked() {
492
+ // When the XdsClient is instantiated in the resolver instead of in this
493
+ // LB policy, this is done via the resolver, so we don't need to do it
494
+ // for xds_client_from_channel_ here.
495
+ if (xds_client_ != nullptr) xds_client_->ResetBackoff();
496
+ if (child_policy_ != nullptr) {
497
+ child_policy_->ResetBackoffLocked();
498
+ }
499
+ }
500
+
501
+ //
502
+ // child policy-related methods
503
+ //
504
+
505
+ void EdsLb::UpdatePriorityList(
506
+ XdsApi::PriorityListUpdate priority_list_update) {
507
+ // Build some maps from locality to child number and the reverse from
508
+ // the old data in priority_list_update_ and priority_child_numbers_.
509
+ std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
510
+ locality_child_map;
511
+ std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
512
+ for (uint32_t priority = 0; priority < priority_list_update_.size();
513
+ ++priority) {
514
+ auto* locality_map = priority_list_update_.Find(priority);
515
+ GPR_ASSERT(locality_map != nullptr);
516
+ size_t child_number = priority_child_numbers_[priority];
517
+ for (const auto& p : locality_map->localities) {
518
+ XdsLocalityName* locality_name = p.first.get();
519
+ locality_child_map[locality_name] = child_number;
520
+ child_locality_map[child_number].insert(locality_name);
521
+ }
522
+ }
523
+ // Construct new list of children.
524
+ std::vector<size_t> priority_child_numbers;
525
+ for (uint32_t priority = 0; priority < priority_list_update.size();
526
+ ++priority) {
527
+ auto* locality_map = priority_list_update.Find(priority);
528
+ GPR_ASSERT(locality_map != nullptr);
529
+ absl::optional<size_t> child_number;
530
+ // If one of the localities in this priority already existed, reuse its
531
+ // child number.
532
+ for (const auto& p : locality_map->localities) {
533
+ XdsLocalityName* locality_name = p.first.get();
534
+ if (!child_number.has_value()) {
535
+ auto it = locality_child_map.find(locality_name);
536
+ if (it != locality_child_map.end()) {
537
+ child_number = it->second;
538
+ locality_child_map.erase(it);
539
+ // Remove localities that *used* to be in this child number, so
540
+ // that we don't incorrectly reuse this child number for a
541
+ // subsequent priority.
542
+ for (XdsLocalityName* old_locality :
543
+ child_locality_map[*child_number]) {
544
+ locality_child_map.erase(old_locality);
545
+ }
546
+ }
547
+ } else {
548
+ // Remove all localities that are now in this child number, so
549
+ // that we don't accidentally reuse this child number for a
550
+ // subsequent priority.
551
+ locality_child_map.erase(locality_name);
552
+ }
553
+ }
554
+ // If we didn't find an existing child number, assign a new one.
555
+ if (!child_number.has_value()) {
556
+ for (child_number = 0;
557
+ child_locality_map.find(*child_number) != child_locality_map.end();
558
+ ++(*child_number))
559
+ ;
560
+ // Add entry so we know that the child number is in use.
561
+ // (Don't need to add the list of localities, since we won't use them.)
562
+ child_locality_map[*child_number];
563
+ }
564
+ priority_child_numbers.push_back(*child_number);
565
+ }
566
+ // Save update.
567
+ priority_list_update_ = std::move(priority_list_update);
568
+ priority_child_numbers_ = std::move(priority_child_numbers);
569
+ // Update child policy.
570
+ UpdateChildPolicyLocked();
571
+ }
572
+
573
+ ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
574
+ ServerAddressList addresses;
575
+ for (uint32_t priority = 0; priority < priority_list_update_.size();
576
+ ++priority) {
577
+ std::string priority_child_name =
578
+ absl::StrCat("child", priority_child_numbers_[priority]);
579
+ const auto* locality_map = priority_list_update_.Find(priority);
580
+ GPR_ASSERT(locality_map != nullptr);
581
+ for (const auto& p : locality_map->localities) {
582
+ const auto& locality_name = p.first;
583
+ const auto& locality = p.second;
584
+ std::vector<std::string> hierarchical_path = {
585
+ priority_child_name, locality_name->AsHumanReadableString()};
586
+ for (size_t i = 0; i < locality.serverlist.size(); ++i) {
587
+ const ServerAddress& address = locality.serverlist[i];
588
+ grpc_arg new_arg = MakeHierarchicalPathArg(hierarchical_path);
589
+ grpc_channel_args* args =
590
+ grpc_channel_args_copy_and_add(address.args(), &new_arg, 1);
591
+ addresses.emplace_back(address.address(), args);
592
+ }
593
+ }
594
+ }
595
+ return addresses;
596
+ }
597
+
598
+ RefCountedPtr<LoadBalancingPolicy::Config>
599
+ EdsLb::CreateChildPolicyConfigLocked() {
600
+ Json::Object priority_children;
601
+ Json::Array priority_priorities;
602
+ for (uint32_t priority = 0; priority < priority_list_update_.size();
603
+ ++priority) {
604
+ const auto* locality_map = priority_list_update_.Find(priority);
605
+ GPR_ASSERT(locality_map != nullptr);
606
+ Json::Object weighted_targets;
607
+ for (const auto& p : locality_map->localities) {
608
+ XdsLocalityName* locality_name = p.first.get();
609
+ const auto& locality = p.second;
610
+ // Construct JSON object containing locality name.
611
+ Json::Object locality_name_json;
612
+ if (!locality_name->region().empty()) {
613
+ locality_name_json["region"] = locality_name->region();
614
+ }
615
+ if (!locality_name->zone().empty()) {
616
+ locality_name_json["zone"] = locality_name->zone();
617
+ }
618
+ if (!locality_name->sub_zone().empty()) {
619
+ locality_name_json["subzone"] = locality_name->sub_zone();
620
+ }
621
+ // Construct endpoint-picking policy.
622
+ // Wrap it in the LRS policy if load reporting is enabled.
623
+ Json endpoint_picking_policy;
624
+ if (config_->lrs_load_reporting_server_name().has_value()) {
625
+ const auto key = GetLrsClusterKey();
626
+ Json::Object lrs_config = {
627
+ {"clusterName", std::string(key.first)},
628
+ {"locality", std::move(locality_name_json)},
629
+ {"lrsLoadReportingServerName",
630
+ config_->lrs_load_reporting_server_name().value()},
631
+ {"childPolicy", config_->endpoint_picking_policy()},
632
+ };
633
+ if (!key.second.empty()) {
634
+ lrs_config["edsServiceName"] = std::string(key.second);
635
+ }
636
+ endpoint_picking_policy = Json::Array{Json::Object{
637
+ {"lrs_experimental", std::move(lrs_config)},
638
+ }};
639
+ } else {
640
+ endpoint_picking_policy = config_->endpoint_picking_policy();
641
+ }
642
+ // Add weighted target entry.
643
+ weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
644
+ {"weight", locality.lb_weight},
645
+ {"childPolicy", std::move(endpoint_picking_policy)},
646
+ };
647
+ }
648
+ // Add priority entry.
649
+ const size_t child_number = priority_child_numbers_[priority];
650
+ std::string child_name = absl::StrCat("child", child_number);
651
+ priority_priorities.emplace_back(child_name);
652
+ Json locality_picking_config = config_->locality_picking_policy();
653
+ Json::Object& config =
654
+ *(*locality_picking_config.mutable_array())[0].mutable_object();
655
+ auto it = config.begin();
656
+ GPR_ASSERT(it != config.end());
657
+ (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
658
+ priority_children[child_name] = Json::Object{
659
+ {"config", std::move(locality_picking_config)},
660
+ };
661
+ }
662
+ Json json = Json::Array{Json::Object{
663
+ {"priority_experimental",
664
+ Json::Object{
665
+ {"children", std::move(priority_children)},
666
+ {"priorities", std::move(priority_priorities)},
667
+ }},
668
+ }};
669
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
670
+ std::string json_str = json.Dump(/*indent=*/1);
671
+ gpr_log(GPR_INFO, "[edslb %p] generated config for child policy: %s", this,
672
+ json_str.c_str());
673
+ }
674
+ grpc_error* error = GRPC_ERROR_NONE;
675
+ RefCountedPtr<LoadBalancingPolicy::Config> config =
676
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
677
+ if (error != GRPC_ERROR_NONE) {
678
+ // This should never happen, but if it does, we basically have no
679
+ // way to fix it, so we put the channel in TRANSIENT_FAILURE.
680
+ gpr_log(GPR_ERROR,
681
+ "[edslb %p] error parsing generated child policy config -- "
682
+ "will put channel in TRANSIENT_FAILURE: %s",
683
+ this, grpc_error_string(error));
684
+ error = grpc_error_set_int(
685
+ grpc_error_add_child(
686
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
687
+ "eds LB policy: error parsing generated child policy config"),
688
+ error),
689
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
690
+ channel_control_helper()->UpdateState(
691
+ GRPC_CHANNEL_TRANSIENT_FAILURE,
692
+ absl::make_unique<TransientFailurePicker>(error));
693
+ return nullptr;
694
+ }
695
+ return config;
696
+ }
697
+
698
+ void EdsLb::UpdateChildPolicyLocked() {
699
+ if (shutting_down_) return;
700
+ UpdateArgs update_args;
701
+ update_args.config = CreateChildPolicyConfigLocked();
702
+ if (update_args.config == nullptr) return;
703
+ update_args.addresses = CreateChildPolicyAddressesLocked();
704
+ update_args.args = CreateChildPolicyArgsLocked(args_);
705
+ if (child_policy_ == nullptr) {
706
+ child_policy_ = CreateChildPolicyLocked(update_args.args);
707
+ }
708
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
709
+ gpr_log(GPR_INFO, "[edslb %p] Updating child policy %p", this,
710
+ child_policy_.get());
711
+ }
712
+ child_policy_->UpdateLocked(std::move(update_args));
713
+ }
714
+
715
+ grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
716
+ const grpc_channel_args* args) {
717
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
718
+ // A channel arg indicating if the target is a backend inferred from an
719
+ // xds load balancer.
720
+ grpc_channel_arg_integer_create(
721
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_XDS_LOAD_BALANCER),
722
+ 1),
723
+ // Inhibit client-side health checking, since the balancer does
724
+ // this for us.
725
+ grpc_channel_arg_integer_create(
726
+ const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
727
+ };
728
+ absl::InlinedVector<const char*, 1> args_to_remove;
729
+ if (xds_client_from_channel_ == nullptr) {
730
+ args_to_add.emplace_back(xds_client_->MakeChannelArg());
731
+ } else if (!config_->lrs_load_reporting_server_name().has_value()) {
732
+ // Remove XdsClient from channel args, so that its presence doesn't
733
+ // prevent us from sharing subchannels between channels.
734
+ // If load reporting is enabled, this happens in the LRS policy instead.
735
+ args_to_remove.push_back(GRPC_ARG_XDS_CLIENT);
736
+ }
737
+ return grpc_channel_args_copy_and_add_and_remove(
738
+ args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
739
+ args_to_add.size());
740
+ }
741
+
742
+ OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
743
+ const grpc_channel_args* args) {
744
+ LoadBalancingPolicy::Args lb_policy_args;
745
+ lb_policy_args.work_serializer = work_serializer();
746
+ lb_policy_args.args = args;
747
+ lb_policy_args.channel_control_helper =
748
+ absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
749
+ OrphanablePtr<LoadBalancingPolicy> lb_policy =
750
+ LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
751
+ "priority_experimental", std::move(lb_policy_args));
752
+ if (GPR_UNLIKELY(lb_policy == nullptr)) {
753
+ gpr_log(GPR_ERROR, "[edslb %p] failure creating child policy", this);
754
+ return nullptr;
755
+ }
756
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
757
+ gpr_log(GPR_INFO, "[edslb %p]: Created new child policy %p", this,
758
+ lb_policy.get());
759
+ }
760
+ // Add our interested_parties pollset_set to that of the newly created
761
+ // child policy. This will make the child policy progress upon activity on
762
+ // this policy, which in turn is tied to the application's call.
763
+ grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
764
+ interested_parties());
765
+ return lb_policy;
766
+ }
767
+
768
+ void EdsLb::MaybeUpdateDropPickerLocked() {
769
+ // If we're dropping all calls, report READY, regardless of what (or
770
+ // whether) the child has reported.
771
+ if (drop_config_ != nullptr && drop_config_->drop_all()) {
772
+ channel_control_helper()->UpdateState(GRPC_CHANNEL_READY,
773
+ absl::make_unique<DropPicker>(this));
774
+ return;
775
+ }
776
+ // Update only if we have a child picker.
777
+ if (child_picker_ != nullptr) {
778
+ channel_control_helper()->UpdateState(child_state_,
779
+ absl::make_unique<DropPicker>(this));
780
+ }
781
+ }
782
+
783
+ //
784
+ // factory
785
+ //
786
+
787
+ class EdsLbFactory : public LoadBalancingPolicyFactory {
788
+ public:
789
+ OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
790
+ LoadBalancingPolicy::Args args) const override {
791
+ return MakeOrphanable<EdsChildHandler>(std::move(args), &grpc_lb_eds_trace);
792
+ }
793
+
794
+ const char* name() const override { return kEds; }
795
+
796
+ RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
797
+ const Json& json, grpc_error** error) const override {
798
+ GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
799
+ if (json.type() == Json::Type::JSON_NULL) {
800
+ // eds was mentioned as a policy in the deprecated loadBalancingPolicy
801
+ // field or in the client API.
802
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
803
+ "field:loadBalancingPolicy error:eds policy requires configuration. "
804
+ "Please use loadBalancingConfig field of service config instead.");
805
+ return nullptr;
806
+ }
807
+ std::vector<grpc_error*> error_list;
808
+ // EDS service name.
809
+ std::string eds_service_name;
810
+ auto it = json.object_value().find("edsServiceName");
811
+ if (it != json.object_value().end()) {
812
+ if (it->second.type() != Json::Type::STRING) {
813
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
814
+ "field:edsServiceName error:type should be string"));
815
+ } else {
816
+ eds_service_name = it->second.string_value();
817
+ }
818
+ }
819
+ // Cluster name.
820
+ std::string cluster_name;
821
+ it = json.object_value().find("clusterName");
822
+ if (it == json.object_value().end()) {
823
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
824
+ "field:clusterName error:required field missing"));
825
+ } else if (it->second.type() != Json::Type::STRING) {
826
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
827
+ "field:clusterName error:type should be string"));
828
+ } else {
829
+ cluster_name = it->second.string_value();
830
+ }
831
+ // LRS load reporting server name.
832
+ absl::optional<std::string> lrs_load_reporting_server_name;
833
+ it = json.object_value().find("lrsLoadReportingServerName");
834
+ if (it != json.object_value().end()) {
835
+ if (it->second.type() != Json::Type::STRING) {
836
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
837
+ "field:lrsLoadReportingServerName error:type should be string"));
838
+ } else {
839
+ lrs_load_reporting_server_name.emplace(it->second.string_value());
840
+ }
841
+ }
842
+ // Locality-picking policy.
843
+ Json locality_picking_policy;
844
+ it = json.object_value().find("localityPickingPolicy");
845
+ if (it == json.object_value().end()) {
846
+ locality_picking_policy = Json::Array{
847
+ Json::Object{
848
+ {"weighted_target_experimental",
849
+ Json::Object{
850
+ {"targets", Json::Object()},
851
+ }},
852
+ },
853
+ };
854
+ } else {
855
+ locality_picking_policy = it->second;
856
+ }
857
+ grpc_error* parse_error = GRPC_ERROR_NONE;
858
+ if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
859
+ locality_picking_policy, &parse_error) == nullptr) {
860
+ GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
861
+ error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
862
+ "localityPickingPolicy", &parse_error, 1));
863
+ GRPC_ERROR_UNREF(parse_error);
864
+ }
865
+ // Endpoint-picking policy. Called "childPolicy" for xds policy.
866
+ Json endpoint_picking_policy;
867
+ it = json.object_value().find("endpointPickingPolicy");
868
+ if (it == json.object_value().end()) {
869
+ endpoint_picking_policy = Json::Array{
870
+ Json::Object{
871
+ {"round_robin", Json::Object()},
872
+ },
873
+ };
874
+ } else {
875
+ endpoint_picking_policy = it->second;
876
+ }
877
+ parse_error = GRPC_ERROR_NONE;
878
+ if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
879
+ endpoint_picking_policy, &parse_error) == nullptr) {
880
+ GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
881
+ error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
882
+ "endpointPickingPolicy", &parse_error, 1));
883
+ GRPC_ERROR_UNREF(parse_error);
884
+ }
885
+ // Construct config.
886
+ if (error_list.empty()) {
887
+ return MakeRefCounted<EdsLbConfig>(
888
+ std::move(cluster_name), std::move(eds_service_name),
889
+ std::move(lrs_load_reporting_server_name),
890
+ std::move(locality_picking_policy),
891
+ std::move(endpoint_picking_policy));
892
+ } else {
893
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR(
894
+ "eds_experimental LB policy config", &error_list);
895
+ return nullptr;
896
+ }
897
+ }
898
+
899
+ private:
900
+ class EdsChildHandler : public ChildPolicyHandler {
901
+ public:
902
+ EdsChildHandler(Args args, TraceFlag* tracer)
903
+ : ChildPolicyHandler(std::move(args), tracer) {}
904
+
905
+ bool ConfigChangeRequiresNewPolicyInstance(
906
+ LoadBalancingPolicy::Config* old_config,
907
+ LoadBalancingPolicy::Config* new_config) const override {
908
+ GPR_ASSERT(old_config->name() == kEds);
909
+ GPR_ASSERT(new_config->name() == kEds);
910
+ EdsLbConfig* old_eds_config = static_cast<EdsLbConfig*>(old_config);
911
+ EdsLbConfig* new_eds_config = static_cast<EdsLbConfig*>(new_config);
912
+ return old_eds_config->cluster_name() != new_eds_config->cluster_name() ||
913
+ old_eds_config->eds_service_name() !=
914
+ new_eds_config->eds_service_name();
915
+ }
916
+
917
+ OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
918
+ const char* name, LoadBalancingPolicy::Args args) const override {
919
+ return MakeOrphanable<EdsLb>(std::move(args));
920
+ }
921
+ };
922
+ };
923
+
924
+ } // namespace
925
+
926
+ } // namespace grpc_core
927
+
928
+ //
929
+ // Plugin registration
930
+ //
931
+
932
+ void grpc_lb_policy_eds_init() {
933
+ grpc_core::LoadBalancingPolicyRegistry::Builder::
934
+ RegisterLoadBalancingPolicyFactory(
935
+ absl::make_unique<grpc_core::EdsLbFactory>());
936
+ }
937
+
938
+ void grpc_lb_policy_eds_shutdown() {}