grpc 1.35.0 → 1.38.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 (885) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +168 -131
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +15 -1
  9. data/include/grpc/grpc_security.h +16 -11
  10. data/include/grpc/grpc_security_constants.h +14 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  12. data/include/grpc/impl/codegen/port_platform.h +7 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +740 -3185
  17. data/src/core/ext/filters/client_channel/client_channel.h +488 -56
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  20. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  21. data/src/core/ext/filters/client_channel/config_selector.h +10 -2
  22. data/src/core/ext/filters/client_channel/connector.h +1 -1
  23. data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
  24. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +26 -23
  30. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
  31. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +49 -48
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -3
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  38. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +22 -18
  39. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +318 -193
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -47
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +316 -171
  49. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  51. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  53. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  54. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  55. data/src/core/ext/filters/client_channel/resolver.h +3 -14
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -60
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -74
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  65. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +33 -23
  66. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +38 -43
  67. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  68. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +379 -0
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +346 -178
  71. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  73. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  74. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  75. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  77. data/src/core/ext/filters/client_channel/server_address.cc +10 -1
  78. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  79. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  80. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  82. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  83. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  84. data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
  85. data/src/core/ext/filters/client_channel/subchannel.h +68 -99
  86. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  88. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  91. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  92. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  93. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  94. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  95. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +47 -42
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  103. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
  104. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  105. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
  106. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
  107. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
  108. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +507 -196
  109. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  110. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -4
  111. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
  112. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +64 -21
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  115. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  116. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  117. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
  120. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  121. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  122. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  124. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  125. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  126. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  127. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  128. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  129. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  130. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  131. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  133. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  134. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  135. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  136. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  137. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  138. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  139. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  140. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  141. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  144. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  145. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  146. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  147. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  148. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  149. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  150. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  162. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  164. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  165. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  166. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  167. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  168. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  169. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  170. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  171. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  172. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  173. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  174. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  175. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
  176. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  177. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  178. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  181. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  182. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  184. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  185. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
  186. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  189. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  190. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  191. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  192. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  193. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  194. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  195. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  196. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  197. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  198. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  199. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  200. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  208. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  209. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  210. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  211. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  212. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  213. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  214. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  215. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  216. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  217. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  218. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  219. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  220. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  221. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  222. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  223. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  224. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  225. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  226. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  227. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  228. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  229. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  230. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  231. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  232. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  233. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  234. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  235. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  237. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  238. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  239. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  240. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  241. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  242. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  247. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  248. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  250. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  251. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  252. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  253. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  254. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  255. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  256. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  257. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  258. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  259. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  260. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  261. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  262. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  263. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  264. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  265. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  266. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  267. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  268. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  269. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  270. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  272. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  273. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  274. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  275. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  276. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  277. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  278. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  279. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  280. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  281. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  284. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  286. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  287. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  288. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  289. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  290. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  291. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  292. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  293. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  294. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  295. data/src/core/ext/xds/xds_api.cc +2179 -688
  296. data/src/core/ext/xds/xds_api.h +326 -124
  297. data/src/core/ext/xds/xds_bootstrap.cc +115 -142
  298. data/src/core/ext/xds/xds_bootstrap.h +24 -17
  299. data/src/core/ext/xds/xds_certificate_provider.cc +184 -78
  300. data/src/core/ext/xds/xds_certificate_provider.h +84 -45
  301. data/src/core/ext/xds/xds_channel_args.h +5 -2
  302. data/src/core/ext/xds/xds_client.cc +462 -183
  303. data/src/core/ext/xds/xds_client.h +65 -22
  304. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  305. data/src/core/ext/xds/xds_client_stats.h +5 -4
  306. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  307. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  308. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  309. data/src/core/ext/xds/xds_http_filters.h +130 -0
  310. data/src/core/ext/xds/xds_server_config_fetcher.cc +444 -29
  311. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  312. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  313. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +108 -5
  314. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
  315. data/src/core/lib/channel/channel_stack.cc +22 -9
  316. data/src/core/lib/channel/channel_stack.h +17 -9
  317. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  318. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  319. data/src/core/lib/channel/channelz.cc +108 -12
  320. data/src/core/lib/channel/channelz.h +30 -1
  321. data/src/core/lib/channel/channelz_registry.cc +14 -0
  322. data/src/core/lib/channel/connected_channel.cc +4 -4
  323. data/src/core/lib/channel/handshaker.cc +9 -50
  324. data/src/core/lib/channel/handshaker.h +6 -23
  325. data/src/core/lib/channel/status_util.cc +12 -2
  326. data/src/core/lib/channel/status_util.h +5 -0
  327. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  328. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  329. data/src/core/lib/gpr/log.cc +6 -1
  330. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  331. data/src/core/lib/gpr/sync_windows.cc +2 -2
  332. data/src/core/lib/gprpp/atomic.h +3 -3
  333. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  334. data/src/core/lib/gprpp/mpscq.cc +2 -2
  335. data/src/core/lib/gprpp/ref_counted.h +29 -15
  336. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  337. data/src/core/lib/gprpp/status_helper.cc +407 -0
  338. data/src/core/lib/gprpp/status_helper.h +180 -0
  339. data/src/core/lib/gprpp/sync.h +129 -40
  340. data/src/core/lib/gprpp/thd.h +1 -1
  341. data/src/core/lib/gprpp/time_util.cc +77 -0
  342. data/src/core/lib/gprpp/time_util.h +42 -0
  343. data/src/core/lib/http/httpcli.cc +11 -11
  344. data/src/core/lib/http/httpcli_security_connector.cc +13 -9
  345. data/src/core/lib/http/parser.cc +16 -16
  346. data/src/core/lib/http/parser.h +4 -4
  347. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  348. data/src/core/lib/iomgr/buffer_list.h +5 -6
  349. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  350. data/src/core/lib/iomgr/call_combiner.h +12 -14
  351. data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
  352. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  353. data/src/core/lib/iomgr/closure.h +7 -6
  354. data/src/core/lib/iomgr/combiner.cc +14 -12
  355. data/src/core/lib/iomgr/combiner.h +2 -2
  356. data/src/core/lib/iomgr/endpoint.cc +1 -1
  357. data/src/core/lib/iomgr/endpoint.h +2 -2
  358. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  359. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  360. data/src/core/lib/iomgr/error.cc +167 -61
  361. data/src/core/lib/iomgr/error.h +218 -107
  362. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  363. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  364. data/src/core/lib/iomgr/error_internal.h +5 -1
  365. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  366. data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
  367. data/src/core/lib/iomgr/ev_epollex_linux.cc +52 -49
  368. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  369. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  370. data/src/core/lib/iomgr/ev_posix.h +9 -9
  371. data/src/core/lib/iomgr/exec_ctx.cc +10 -6
  372. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  373. data/src/core/lib/iomgr/executor.cc +8 -8
  374. data/src/core/lib/iomgr/executor.h +2 -2
  375. data/src/core/lib/iomgr/iomgr.cc +1 -1
  376. data/src/core/lib/iomgr/iomgr.h +1 -1
  377. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  378. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  379. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  380. data/src/core/lib/iomgr/iomgr_posix.cc +1 -2
  381. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -3
  382. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  383. data/src/core/lib/iomgr/load_file.cc +4 -4
  384. data/src/core/lib/iomgr/load_file.h +2 -2
  385. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  386. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  387. data/src/core/lib/iomgr/pollset.cc +5 -5
  388. data/src/core/lib/iomgr/pollset.h +9 -9
  389. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  390. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  391. data/src/core/lib/iomgr/port.h +1 -1
  392. data/src/core/lib/iomgr/python_util.h +1 -1
  393. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  394. data/src/core/lib/iomgr/resolve_address.h +6 -6
  395. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  396. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  397. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  398. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  399. data/src/core/lib/iomgr/resource_quota.cc +12 -11
  400. data/src/core/lib/iomgr/socket_utils_common_posix.cc +23 -20
  401. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  402. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  403. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  404. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -18
  405. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  406. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  407. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  408. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  409. data/src/core/lib/iomgr/tcp_posix.cc +41 -42
  410. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  411. data/src/core/lib/iomgr/tcp_server.h +12 -11
  412. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  413. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  414. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  415. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  416. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  417. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  418. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  419. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  420. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  421. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  422. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  423. data/src/core/lib/iomgr/timer_custom.h +1 -1
  424. data/src/core/lib/iomgr/timer_generic.cc +8 -8
  425. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  426. data/src/core/lib/iomgr/udp_server.cc +21 -20
  427. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  428. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  429. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  430. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  431. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  432. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  433. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  434. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  435. data/src/core/lib/iomgr/work_serializer.h +17 -1
  436. data/src/core/lib/json/json.h +1 -1
  437. data/src/core/lib/json/json_reader.cc +4 -4
  438. data/src/core/lib/matchers/matchers.cc +339 -0
  439. data/src/core/lib/matchers/matchers.h +160 -0
  440. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  441. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  442. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  443. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  444. data/src/core/lib/security/credentials/credentials.h +4 -3
  445. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -14
  446. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  447. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  448. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  449. data/src/core/lib/security/credentials/external/external_account_credentials.cc +17 -14
  450. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  451. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +6 -5
  452. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  453. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +9 -9
  454. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  455. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -3
  456. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  457. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +16 -15
  458. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  459. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  460. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  461. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -5
  462. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  463. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  464. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -8
  465. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  466. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  467. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  468. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  469. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  470. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  471. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  472. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  473. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  474. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  475. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  476. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  477. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  478. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  479. data/src/core/lib/security/credentials/xds/xds_credentials.cc +130 -61
  480. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  481. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  482. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  483. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  484. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  485. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  486. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  487. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  488. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  489. data/src/core/lib/security/security_connector/ssl_utils.cc +31 -8
  490. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  491. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +88 -74
  492. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  493. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  494. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  495. data/src/core/lib/security/transport/security_handshaker.cc +66 -37
  496. data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
  497. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  498. data/src/core/lib/security/transport/tsi_error.h +2 -1
  499. data/src/core/lib/security/util/json_util.cc +2 -2
  500. data/src/core/lib/security/util/json_util.h +1 -1
  501. data/src/core/lib/slice/slice_intern.cc +5 -6
  502. data/src/core/lib/surface/call.cc +46 -45
  503. data/src/core/lib/surface/call.h +2 -2
  504. data/src/core/lib/surface/channel.cc +6 -6
  505. data/src/core/lib/surface/channel.h +6 -5
  506. data/src/core/lib/surface/channel_ping.cc +1 -1
  507. data/src/core/lib/surface/completion_queue.cc +46 -47
  508. data/src/core/lib/surface/completion_queue.h +2 -1
  509. data/src/core/lib/surface/init.cc +13 -15
  510. data/src/core/lib/surface/lame_client.cc +43 -24
  511. data/src/core/lib/surface/lame_client.h +4 -3
  512. data/src/core/lib/surface/server.cc +71 -58
  513. data/src/core/lib/surface/server.h +91 -28
  514. data/src/core/lib/surface/validate_metadata.cc +7 -7
  515. data/src/core/lib/surface/validate_metadata.h +3 -2
  516. data/src/core/lib/surface/version.cc +4 -2
  517. data/src/core/lib/transport/byte_stream.cc +5 -5
  518. data/src/core/lib/transport/byte_stream.h +8 -8
  519. data/src/core/lib/transport/connectivity_state.cc +1 -1
  520. data/src/core/lib/transport/error_utils.cc +19 -8
  521. data/src/core/lib/transport/error_utils.h +11 -5
  522. data/src/core/lib/transport/metadata.cc +6 -2
  523. data/src/core/lib/transport/metadata_batch.cc +64 -37
  524. data/src/core/lib/transport/metadata_batch.h +33 -18
  525. data/src/core/lib/transport/transport.cc +4 -3
  526. data/src/core/lib/transport/transport.h +4 -4
  527. data/src/core/lib/transport/transport_op_string.cc +5 -5
  528. data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
  529. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  530. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -28
  531. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -27
  532. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  533. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  534. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  535. data/src/core/tsi/fake_transport_security.cc +11 -2
  536. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  537. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  538. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  539. data/src/core/tsi/ssl_transport_security.cc +32 -17
  540. data/src/core/tsi/ssl_transport_security.h +3 -7
  541. data/src/ruby/bin/math_services_pb.rb +1 -1
  542. data/src/ruby/ext/grpc/extconf.rb +9 -1
  543. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  544. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  545. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  546. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  547. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  548. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  549. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  550. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  551. data/src/ruby/ext/grpc/rb_server.c +13 -1
  552. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  553. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  554. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  555. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  556. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  557. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  558. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  559. data/src/ruby/lib/grpc/version.rb +1 -1
  560. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  561. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  562. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  563. data/src/ruby/spec/call_spec.rb +1 -1
  564. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  565. data/src/ruby/spec/channel_spec.rb +17 -6
  566. data/src/ruby/spec/client_auth_spec.rb +27 -1
  567. data/src/ruby/spec/errors_spec.rb +1 -1
  568. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  569. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  570. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  571. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  572. data/src/ruby/spec/server_spec.rb +22 -0
  573. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  574. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  575. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  576. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  577. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  578. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  579. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  580. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  581. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  582. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  583. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  584. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  585. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  586. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  587. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  588. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  589. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  590. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  591. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  592. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  593. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  594. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  595. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  596. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  597. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  598. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  599. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  600. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  601. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  602. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  603. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  604. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  605. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  606. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  607. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  608. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  609. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  610. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  611. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  612. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  613. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  614. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  615. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  616. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  617. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  618. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  619. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  620. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  621. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  622. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  623. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  624. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  625. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  626. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  627. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  628. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  629. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  630. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  631. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  632. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  633. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  634. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  635. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  636. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  637. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  638. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  639. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  640. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  641. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  642. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  643. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  644. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  645. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  646. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  647. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  648. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  649. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  650. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  651. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  652. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  653. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  654. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  655. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  656. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  657. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  658. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  659. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  660. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  661. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  662. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  663. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  664. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  665. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  666. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  667. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  668. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  669. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  670. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  671. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  672. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  673. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  674. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  675. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  676. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  677. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  678. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  679. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  680. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  681. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  682. data/third_party/boringssl-with-bazel/err_data.c +742 -724
  683. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  684. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  685. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  686. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  687. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +4 -11
  688. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  689. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  690. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  691. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -16
  692. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  694. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
  695. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
  696. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  697. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  698. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  699. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  700. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  701. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  702. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  703. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  704. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  705. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  706. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  707. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  708. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  709. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  710. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  711. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  712. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  713. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  714. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  715. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  716. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  717. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  718. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  719. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +10 -2
  720. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  721. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  722. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  723. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  724. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  725. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  726. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  727. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  728. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  729. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  730. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  731. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  732. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  733. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  734. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  735. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  737. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  738. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  739. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  740. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  741. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
  742. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  743. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  744. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +161 -9
  745. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  746. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  747. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  748. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +121 -71
  749. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +71 -41
  750. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  752. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  753. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  754. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  755. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  756. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  757. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  758. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
  759. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  760. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  761. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  762. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  763. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  764. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  766. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
  767. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  768. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +6 -2
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  781. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  782. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  783. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  784. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  785. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
  786. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  787. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  794. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  795. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  796. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +737 -551
  797. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  798. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -5
  799. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  800. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  801. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +15 -4
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  804. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  805. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  807. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  808. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  809. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +13 -40
  810. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  811. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  812. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  813. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  814. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  815. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  816. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +239 -37
  817. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -8
  818. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +702 -219
  819. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +141 -36
  820. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  821. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  822. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  823. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +47 -15
  824. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  825. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +159 -13
  826. data/third_party/boringssl-with-bazel/src/ssl/internal.h +253 -58
  827. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  828. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  829. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  830. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  831. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  832. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +90 -25
  833. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  834. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  835. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  836. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +450 -104
  837. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  838. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  839. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  840. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +232 -85
  841. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  842. data/third_party/xxhash/xxhash.h +5443 -0
  843. metadata +174 -95
  844. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  845. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  846. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  847. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  848. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  849. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  850. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  851. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  852. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  853. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  854. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  855. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  856. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  857. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  858. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  859. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  860. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  861. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  862. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  863. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  864. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  865. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  866. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  867. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  868. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  869. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  870. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  871. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  872. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  873. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  874. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  875. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  876. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  877. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  878. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  879. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  880. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  881. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  882. data/third_party/upb/upb/json_decode.c +0 -1443
  883. data/third_party/upb/upb/json_decode.h +0 -23
  884. data/third_party/upb/upb/json_encode.c +0 -713
  885. data/third_party/upb/upb/json_encode.h +0 -36
@@ -0,0 +1,23 @@
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
+ namespace grpc_core {
20
+
21
+ const char* kRequestRingHashAttribute = "request_ring_hash";
22
+
23
+ } // namespace grpc_core
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_RING_HASH_RING_HASH_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_RING_HASH_RING_HASH_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ namespace grpc_core {
23
+ extern const char* kRequestRingHashAttribute;
24
+
25
+ } // namespace grpc_core
26
+
27
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_RING_HASH_RING_HASH_H
@@ -34,11 +34,11 @@
34
34
  #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
35
35
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
36
36
  #include "src/core/ext/filters/client_channel/subchannel.h"
37
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
37
38
  #include "src/core/lib/channel/channel_args.h"
38
39
  #include "src/core/lib/debug/trace.h"
39
40
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
40
41
  #include "src/core/lib/gprpp/sync.h"
41
- #include "src/core/lib/iomgr/sockaddr_utils.h"
42
42
  #include "src/core/lib/transport/connectivity_state.h"
43
43
  #include "src/core/lib/transport/error_utils.h"
44
44
  #include "src/core/lib/transport/static_metadata.h"
@@ -331,7 +331,7 @@ void RoundRobin::RoundRobinSubchannelList::
331
331
  absl::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
332
332
  } else if (num_transient_failure_ == num_subchannels()) {
333
333
  /* 3) TRANSIENT_FAILURE */
334
- grpc_error* error =
334
+ grpc_error_handle error =
335
335
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
336
336
  "connections to all backends failing"),
337
337
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
@@ -449,7 +449,7 @@ void RoundRobin::UpdateLocked(UpdateArgs args) {
449
449
  if (latest_pending_subchannel_list_->num_subchannels() == 0) {
450
450
  // If the new list is empty, immediately promote the new list to the
451
451
  // current list and transition to TRANSIENT_FAILURE.
452
- grpc_error* error =
452
+ grpc_error_handle error =
453
453
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
454
454
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
455
455
  channel_control_helper()->UpdateState(
@@ -487,7 +487,7 @@ class RoundRobinFactory : public LoadBalancingPolicyFactory {
487
487
  const char* name() const override { return kRoundRobin; }
488
488
 
489
489
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
490
- const Json& /*json*/, grpc_error** /*error*/) const override {
490
+ const Json& /*json*/, grpc_error_handle* /*error*/) const override {
491
491
  return MakeRefCounted<RoundRobinConfig>();
492
492
  }
493
493
  };
@@ -33,13 +33,13 @@
33
33
  // that implementation should be hidden from the LB policy API.
34
34
  #include "src/core/ext/filters/client_channel/subchannel.h"
35
35
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
36
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
36
37
  #include "src/core/lib/channel/channel_args.h"
37
38
  #include "src/core/lib/debug/trace.h"
38
39
  #include "src/core/lib/gprpp/orphanable.h"
39
40
  #include "src/core/lib/gprpp/ref_counted.h"
40
41
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
41
42
  #include "src/core/lib/iomgr/closure.h"
42
- #include "src/core/lib/iomgr/sockaddr_utils.h"
43
43
  #include "src/core/lib/transport/connectivity_state.h"
44
44
 
45
45
  // Code for maintaining a list of subchannels within an LB policy.
@@ -165,8 +165,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
165
165
  grpc_connectivity_state state, const absl::Status& status,
166
166
  std::unique_ptr<SubchannelPicker> picker);
167
167
 
168
- static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
169
- void OnDelayedRemovalTimerLocked(grpc_error* error);
168
+ static void OnDelayedRemovalTimer(void* arg, grpc_error_handle error);
169
+ void OnDelayedRemovalTimerLocked(grpc_error_handle error);
170
170
 
171
171
  // The owning LB policy.
172
172
  RefCountedPtr<WeightedTargetLb> weighted_target_policy_;
@@ -387,7 +387,7 @@ void WeightedTargetLb::UpdateStateLocked() {
387
387
  absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
388
388
  break;
389
389
  default:
390
- grpc_error* error = grpc_error_set_int(
390
+ grpc_error_handle error = grpc_error_set_int(
391
391
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
392
392
  "weighted_target: all children report state TRANSIENT_FAILURE"),
393
393
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
@@ -564,8 +564,8 @@ void WeightedTargetLb::WeightedChild::DeactivateLocked() {
564
564
  &on_delayed_removal_timer_);
565
565
  }
566
566
 
567
- void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(void* arg,
568
- grpc_error* error) {
567
+ void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(
568
+ void* arg, grpc_error_handle error) {
569
569
  WeightedChild* self = static_cast<WeightedChild*>(arg);
570
570
  GRPC_ERROR_REF(error); // ref owned by lambda
571
571
  self->weighted_target_policy_->work_serializer()->Run(
@@ -574,7 +574,7 @@ void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(void* arg,
574
574
  }
575
575
 
576
576
  void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimerLocked(
577
- grpc_error* error) {
577
+ grpc_error_handle error) {
578
578
  if (error == GRPC_ERROR_NONE && delayed_removal_timer_callback_pending_ &&
579
579
  !shutdown_ && weight_ == 0) {
580
580
  delayed_removal_timer_callback_pending_ = false;
@@ -631,7 +631,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
631
631
  const char* name() const override { return kWeightedTarget; }
632
632
 
633
633
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
634
- const Json& json, grpc_error** error) const override {
634
+ const Json& json, grpc_error_handle* error) const override {
635
635
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
636
636
  if (json.type() == Json::Type::JSON_NULL) {
637
637
  // weighted_target was mentioned as a policy in the deprecated
@@ -642,7 +642,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
642
642
  "config instead.");
643
643
  return nullptr;
644
644
  }
645
- std::vector<grpc_error*> error_list;
645
+ std::vector<grpc_error_handle> error_list;
646
646
  // Weight map.
647
647
  WeightedTargetLbConfig::TargetMap target_map;
648
648
  auto it = json.object_value().find("targets");
@@ -655,14 +655,14 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
655
655
  } else {
656
656
  for (const auto& p : it->second.object_value()) {
657
657
  WeightedTargetLbConfig::ChildConfig child_config;
658
- std::vector<grpc_error*> child_errors =
658
+ std::vector<grpc_error_handle> child_errors =
659
659
  ParseChildConfig(p.second, &child_config);
660
660
  if (!child_errors.empty()) {
661
661
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
662
662
  // string is not static in this case.
663
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
663
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
664
664
  absl::StrCat("field:targets key:", p.first).c_str());
665
- for (grpc_error* child_error : child_errors) {
665
+ for (grpc_error_handle child_error : child_errors) {
666
666
  error = grpc_error_add_child(error, child_error);
667
667
  }
668
668
  error_list.push_back(error);
@@ -680,9 +680,9 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
680
680
  }
681
681
 
682
682
  private:
683
- static std::vector<grpc_error*> ParseChildConfig(
683
+ static std::vector<grpc_error_handle> ParseChildConfig(
684
684
  const Json& json, WeightedTargetLbConfig::ChildConfig* child_config) {
685
- std::vector<grpc_error*> error_list;
685
+ std::vector<grpc_error_handle> error_list;
686
686
  if (json.type() != Json::Type::OBJECT) {
687
687
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
688
688
  "value should be of type object"));
@@ -711,13 +711,13 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
711
711
  // Child policy.
712
712
  it = json.object_value().find("childPolicy");
713
713
  if (it != json.object_value().end()) {
714
- grpc_error* parse_error = GRPC_ERROR_NONE;
714
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
715
715
  child_config->config =
716
716
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second,
717
717
  &parse_error);
718
718
  if (child_config->config == nullptr) {
719
719
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
720
- std::vector<grpc_error*> child_errors;
720
+ std::vector<grpc_error_handle> child_errors;
721
721
  child_errors.push_back(parse_error);
722
722
  error_list.push_back(
723
723
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -63,40 +63,55 @@ class CdsLb : public LoadBalancingPolicy {
63
63
 
64
64
  void UpdateLocked(UpdateArgs args) override;
65
65
  void ResetBackoffLocked() override;
66
+ void ExitIdleLocked() override;
66
67
 
67
68
  private:
68
69
  // Watcher for getting cluster data from XdsClient.
69
70
  class ClusterWatcher : public XdsClient::ClusterWatcherInterface {
70
71
  public:
71
- explicit ClusterWatcher(RefCountedPtr<CdsLb> parent)
72
- : parent_(std::move(parent)) {}
72
+ ClusterWatcher(RefCountedPtr<CdsLb> parent, std::string name)
73
+ : parent_(std::move(parent)), name_(std::move(name)) {}
73
74
 
74
75
  void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
75
- new Notifier(parent_, std::move(cluster_data));
76
+ new Notifier(parent_, name_, std::move(cluster_data));
76
77
  }
77
- void OnError(grpc_error* error) override { new Notifier(parent_, error); }
78
- void OnResourceDoesNotExist() override { new Notifier(parent_); }
78
+ void OnError(grpc_error_handle error) override {
79
+ new Notifier(parent_, name_, error);
80
+ }
81
+ void OnResourceDoesNotExist() override { new Notifier(parent_, name_); }
79
82
 
80
83
  private:
81
84
  class Notifier {
82
85
  public:
83
- Notifier(RefCountedPtr<CdsLb> parent, XdsApi::CdsUpdate update);
84
- Notifier(RefCountedPtr<CdsLb> parent, grpc_error* error);
85
- explicit Notifier(RefCountedPtr<CdsLb> parent);
86
+ Notifier(RefCountedPtr<CdsLb> parent, std::string name,
87
+ XdsApi::CdsUpdate update);
88
+ Notifier(RefCountedPtr<CdsLb> parent, std::string name,
89
+ grpc_error_handle error);
90
+ explicit Notifier(RefCountedPtr<CdsLb> parent, std::string name);
86
91
 
87
92
  private:
88
93
  enum Type { kUpdate, kError, kDoesNotExist };
89
94
 
90
- static void RunInExecCtx(void* arg, grpc_error* error);
91
- void RunInWorkSerializer(grpc_error* error);
95
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
96
+ void RunInWorkSerializer(grpc_error_handle error);
92
97
 
93
98
  RefCountedPtr<CdsLb> parent_;
99
+ std::string name_;
94
100
  grpc_closure closure_;
95
101
  XdsApi::CdsUpdate update_;
96
102
  Type type_;
97
103
  };
98
104
 
99
105
  RefCountedPtr<CdsLb> parent_;
106
+ std::string name_;
107
+ };
108
+
109
+ struct WatcherState {
110
+ // Pointer to watcher, to be used when cancelling.
111
+ // Not owned, so do not dereference.
112
+ ClusterWatcher* watcher = nullptr;
113
+ // Most recent update obtained from this watcher.
114
+ absl::optional<XdsApi::CdsUpdate> update;
100
115
  };
101
116
 
102
117
  // Delegating helper to be passed to child policy.
@@ -119,12 +134,20 @@ class CdsLb : public LoadBalancingPolicy {
119
134
 
120
135
  void ShutdownLocked() override;
121
136
 
122
- void OnClusterChanged(XdsApi::CdsUpdate cluster_data);
123
- void OnError(grpc_error* error);
124
- void OnResourceDoesNotExist();
137
+ bool GenerateDiscoveryMechanismForCluster(
138
+ const std::string& name, Json::Array* discovery_mechanisms,
139
+ std::set<std::string>* clusters_needed);
140
+ void OnClusterChanged(const std::string& name,
141
+ XdsApi::CdsUpdate cluster_data);
142
+ void OnError(const std::string& name, grpc_error_handle error);
143
+ void OnResourceDoesNotExist(const std::string& name);
125
144
 
126
- grpc_error* UpdateXdsCertificateProvider(
127
- const XdsApi::CdsUpdate& cluster_data);
145
+ grpc_error_handle UpdateXdsCertificateProvider(
146
+ const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data);
147
+
148
+ void CancelClusterDataWatch(absl::string_view cluster_name,
149
+ XdsClient::ClusterWatcherInterface* watcher,
150
+ bool delay_unsubscription = false);
128
151
 
129
152
  void MaybeDestroyChildPolicyLocked();
130
153
 
@@ -135,9 +158,10 @@ class CdsLb : public LoadBalancingPolicy {
135
158
 
136
159
  // The xds client.
137
160
  RefCountedPtr<XdsClient> xds_client_;
138
- // A pointer to the cluster watcher, to be used when cancelling the watch.
139
- // Note that this is not owned, so this pointer must never be derefernced.
140
- ClusterWatcher* cluster_watcher_ = nullptr;
161
+
162
+ // Maps from cluster name to the state for that cluster.
163
+ // The root of the tree is config_->cluster().
164
+ std::map<std::string, WatcherState> watchers_;
141
165
 
142
166
  RefCountedPtr<grpc_tls_certificate_provider> root_certificate_provider_;
143
167
  RefCountedPtr<grpc_tls_certificate_provider> identity_certificate_provider_;
@@ -155,43 +179,50 @@ class CdsLb : public LoadBalancingPolicy {
155
179
  //
156
180
 
157
181
  CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
182
+ std::string name,
158
183
  XdsApi::CdsUpdate update)
159
- : parent_(std::move(parent)), update_(std::move(update)), type_(kUpdate) {
184
+ : parent_(std::move(parent)),
185
+ name_(std::move(name)),
186
+ update_(std::move(update)),
187
+ type_(kUpdate) {
160
188
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
161
189
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
162
190
  }
163
191
 
164
192
  CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
165
- grpc_error* error)
166
- : parent_(std::move(parent)), type_(kError) {
193
+ std::string name,
194
+ grpc_error_handle error)
195
+ : parent_(std::move(parent)), name_(std::move(name)), type_(kError) {
167
196
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
168
197
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
169
198
  }
170
199
 
171
- CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent)
172
- : parent_(std::move(parent)), type_(kDoesNotExist) {
200
+ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
201
+ std::string name)
202
+ : parent_(std::move(parent)), name_(std::move(name)), type_(kDoesNotExist) {
173
203
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
174
204
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
175
205
  }
176
206
 
177
207
  void CdsLb::ClusterWatcher::Notifier::RunInExecCtx(void* arg,
178
- grpc_error* error) {
208
+ grpc_error_handle error) {
179
209
  Notifier* self = static_cast<Notifier*>(arg);
180
210
  GRPC_ERROR_REF(error);
181
211
  self->parent_->work_serializer()->Run(
182
212
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
183
213
  }
184
214
 
185
- void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
215
+ void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(
216
+ grpc_error_handle error) {
186
217
  switch (type_) {
187
218
  case kUpdate:
188
- parent_->OnClusterChanged(std::move(update_));
219
+ parent_->OnClusterChanged(name_, std::move(update_));
189
220
  break;
190
221
  case kError:
191
- parent_->OnError(error);
222
+ parent_->OnError(name_, error);
192
223
  break;
193
224
  case kDoesNotExist:
194
- parent_->OnResourceDoesNotExist();
225
+ parent_->OnResourceDoesNotExist(name_);
195
226
  break;
196
227
  };
197
228
  delete this;
@@ -261,13 +292,15 @@ void CdsLb::ShutdownLocked() {
261
292
  shutting_down_ = true;
262
293
  MaybeDestroyChildPolicyLocked();
263
294
  if (xds_client_ != nullptr) {
264
- if (cluster_watcher_ != nullptr) {
295
+ for (auto& watcher : watchers_) {
265
296
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
266
297
  gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
267
- config_->cluster().c_str());
298
+ watcher.first.c_str());
268
299
  }
269
- xds_client_->CancelClusterDataWatch(config_->cluster(), cluster_watcher_);
300
+ CancelClusterDataWatch(watcher.first, watcher.second.watcher,
301
+ /*delay_unsubscription=*/false);
270
302
  }
303
+ watchers_.clear();
271
304
  xds_client_.reset(DEBUG_LOCATION, "CdsLb");
272
305
  }
273
306
  grpc_channel_args_destroy(args_);
@@ -286,6 +319,10 @@ void CdsLb::ResetBackoffLocked() {
286
319
  if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
287
320
  }
288
321
 
322
+ void CdsLb::ExitIdleLocked() {
323
+ if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
324
+ }
325
+
289
326
  void CdsLb::UpdateLocked(UpdateArgs args) {
290
327
  // Update config.
291
328
  auto old_config = std::move(config_);
@@ -301,119 +338,214 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
301
338
  // If cluster name changed, cancel watcher and restart.
302
339
  if (old_config == nullptr || old_config->cluster() != config_->cluster()) {
303
340
  if (old_config != nullptr) {
304
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
305
- gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
306
- old_config->cluster().c_str());
341
+ for (auto& watcher : watchers_) {
342
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
343
+ gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
344
+ watcher.first.c_str());
345
+ }
346
+ CancelClusterDataWatch(watcher.first, watcher.second.watcher,
347
+ /*delay_unsubscription=*/true);
307
348
  }
308
- xds_client_->CancelClusterDataWatch(old_config->cluster(),
309
- cluster_watcher_,
310
- /*delay_unsubscription=*/true);
349
+ watchers_.clear();
311
350
  }
312
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
313
- gpr_log(GPR_INFO, "[cdslb %p] starting watch for cluster %s", this,
314
- config_->cluster().c_str());
315
- }
316
- auto watcher = absl::make_unique<ClusterWatcher>(Ref());
317
- cluster_watcher_ = watcher.get();
351
+ auto watcher = absl::make_unique<ClusterWatcher>(Ref(), config_->cluster());
352
+ watchers_[config_->cluster()].watcher = watcher.get();
318
353
  xds_client_->WatchClusterData(config_->cluster(), std::move(watcher));
319
354
  }
320
355
  }
321
356
 
322
- void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
323
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
324
- gpr_log(GPR_INFO, "[cdslb %p] received CDS update from xds client %p: %s",
325
- this, xds_client_.get(), cluster_data.ToString().c_str());
357
+ // This method will attempt to generate one or multiple entries of discovery
358
+ // mechanism recursively:
359
+ // For cluster types EDS or LOGICAL_DNS, one discovery mechanism entry may be
360
+ // generated cluster name, type and other data from the CdsUpdate inserted into
361
+ // the entry and the entry appended to the array of entries.
362
+ // Note, discovery mechanism entry can be generated if an CdsUpdate is
363
+ // available; otherwise, just return false. For cluster type AGGREGATE,
364
+ // recursively call the method for each child cluster.
365
+ bool CdsLb::GenerateDiscoveryMechanismForCluster(
366
+ const std::string& name, Json::Array* discovery_mechanisms,
367
+ std::set<std::string>* clusters_needed) {
368
+ clusters_needed->insert(name);
369
+ auto& state = watchers_[name];
370
+ // Create a new watcher if needed.
371
+ if (state.watcher == nullptr) {
372
+ auto watcher = absl::make_unique<ClusterWatcher>(Ref(), name);
373
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
374
+ gpr_log(GPR_INFO, "[cdslb %p] starting watch for cluster %s", this,
375
+ name.c_str());
376
+ }
377
+ state.watcher = watcher.get();
378
+ xds_client_->WatchClusterData(name, std::move(watcher));
379
+ return false;
326
380
  }
327
- grpc_error* error = GRPC_ERROR_NONE;
328
- error = UpdateXdsCertificateProvider(cluster_data);
329
- if (error != GRPC_ERROR_NONE) {
330
- return OnError(error);
381
+ // Don't have the update we need yet.
382
+ if (!state.update.has_value()) return false;
383
+ // For AGGREGATE clusters, recursively expand to child clusters.
384
+ if (state.update->cluster_type == XdsApi::CdsUpdate::ClusterType::AGGREGATE) {
385
+ bool missing_cluster = false;
386
+ for (const std::string& child_name :
387
+ state.update->prioritized_cluster_names) {
388
+ if (!GenerateDiscoveryMechanismForCluster(
389
+ child_name, discovery_mechanisms, clusters_needed)) {
390
+ missing_cluster = true;
391
+ }
392
+ }
393
+ return !missing_cluster;
394
+ }
395
+ std::string type;
396
+ switch (state.update->cluster_type) {
397
+ case XdsApi::CdsUpdate::ClusterType::EDS:
398
+ type = "EDS";
399
+ break;
400
+ case XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS:
401
+ type = "LOGICAL_DNS";
402
+ break;
403
+ default:
404
+ GPR_ASSERT(0);
405
+ break;
331
406
  }
332
- // Construct config for child policy.
333
- Json::Object discovery_mechanism = {
334
- {"clusterName", config_->cluster()},
335
- {"max_concurrent_requests", cluster_data.max_concurrent_requests},
336
- {"type", "EDS"},
407
+ Json::Object mechanism = {
408
+ {"clusterName", name},
409
+ {"max_concurrent_requests", state.update->max_concurrent_requests},
410
+ {"type", std::move(type)},
337
411
  };
338
- if (!cluster_data.eds_service_name.empty()) {
339
- discovery_mechanism["edsServiceName"] = cluster_data.eds_service_name;
412
+ if (!state.update->eds_service_name.empty()) {
413
+ mechanism["edsServiceName"] = state.update->eds_service_name;
340
414
  }
341
- if (cluster_data.lrs_load_reporting_server_name.has_value()) {
342
- discovery_mechanism["lrsLoadReportingServerName"] =
343
- cluster_data.lrs_load_reporting_server_name.value();
415
+ if (state.update->lrs_load_reporting_server_name.has_value()) {
416
+ mechanism["lrsLoadReportingServerName"] =
417
+ state.update->lrs_load_reporting_server_name.value();
344
418
  }
345
- Json::Object child_config = {
346
- {"discoveryMechanisms",
347
- Json::Array{
348
- discovery_mechanism,
349
- }},
350
- {"localityPickingPolicy",
351
- Json::Array{
352
- Json::Object{
353
- {"weighted_target_experimental",
354
- Json::Object{
355
- {"targets", Json::Object()},
356
- }},
357
- },
358
- }},
359
- {"endpointPickingPolicy",
360
- Json::Array{
361
- Json::Object{
362
- {"round_robin", Json::Object()},
363
- },
364
- }},
365
- };
366
- Json json = Json::Array{
367
- Json::Object{
368
- {"xds_cluster_resolver_experimental", std::move(child_config)},
369
- },
370
- };
419
+ discovery_mechanisms->emplace_back(std::move(mechanism));
420
+ return true;
421
+ }
422
+
423
+ void CdsLb::OnClusterChanged(const std::string& name,
424
+ XdsApi::CdsUpdate cluster_data) {
371
425
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
372
- std::string json_str = json.Dump(/*indent=*/1);
373
- gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s", this,
374
- json_str.c_str());
426
+ gpr_log(
427
+ GPR_INFO,
428
+ "[cdslb %p] received CDS update for cluster %s from xds client %p: %s",
429
+ this, name.c_str(), xds_client_.get(), cluster_data.ToString().c_str());
375
430
  }
376
- RefCountedPtr<LoadBalancingPolicy::Config> config =
377
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
431
+ // Store the update in the map if we are still interested in watching this
432
+ // cluster (i.e., it is not cancelled already).
433
+ // If we've already deleted this entry, then this is an update notification
434
+ // that was scheduled before the deletion, so we can just ignore it.
435
+ auto it = watchers_.find(name);
436
+ if (it == watchers_.end()) return;
437
+ it->second.update = cluster_data;
438
+ // Take care of integration with new certificate code.
439
+ grpc_error_handle error = GRPC_ERROR_NONE;
440
+ error = UpdateXdsCertificateProvider(name, it->second.update.value());
378
441
  if (error != GRPC_ERROR_NONE) {
379
- OnError(error);
380
- return;
442
+ return OnError(name, error);
381
443
  }
382
- // Create child policy if not already present.
383
- if (child_policy_ == nullptr) {
384
- LoadBalancingPolicy::Args args;
385
- args.work_serializer = work_serializer();
386
- args.args = args_;
387
- args.channel_control_helper = absl::make_unique<Helper>(Ref());
388
- child_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
389
- config->name(), std::move(args));
390
- if (child_policy_ == nullptr) {
391
- OnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
392
- "failed to create child policy"));
393
- return;
444
+ // Scan the map starting from the root cluster to generate the list of
445
+ // discovery mechanisms. If we don't have some of the data we need (i.e., we
446
+ // just started up and not all watchers have returned data yet), then don't
447
+ // update the child policy at all.
448
+ Json::Array discovery_mechanisms;
449
+ std::set<std::string> clusters_needed;
450
+ if (GenerateDiscoveryMechanismForCluster(
451
+ config_->cluster(), &discovery_mechanisms, &clusters_needed)) {
452
+ // Construct config for child policy.
453
+ Json::Object xds_lb_policy;
454
+ if (cluster_data.lb_policy == "RING_HASH") {
455
+ std::string hash_function;
456
+ switch (cluster_data.hash_function) {
457
+ case XdsApi::CdsUpdate::HashFunction::XX_HASH:
458
+ hash_function = "XX_HASH";
459
+ break;
460
+ case XdsApi::CdsUpdate::HashFunction::MURMUR_HASH_2:
461
+ hash_function = "MURMUR_HASH_2";
462
+ break;
463
+ default:
464
+ GPR_ASSERT(0);
465
+ break;
466
+ }
467
+ xds_lb_policy["RING_HASH"] = Json::Object{
468
+ {"min_ring_size", cluster_data.min_ring_size},
469
+ {"max_ring_size", cluster_data.max_ring_size},
470
+ {"hash_function", hash_function},
471
+ };
472
+ } else {
473
+ xds_lb_policy["ROUND_ROBIN"] = Json::Object();
394
474
  }
395
- grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
396
- interested_parties());
475
+ Json::Object child_config = {
476
+ {"xdsLbPolicy",
477
+ Json::Array{
478
+ xds_lb_policy,
479
+ }},
480
+ {"discoveryMechanisms", std::move(discovery_mechanisms)},
481
+ };
482
+ Json json = Json::Array{
483
+ Json::Object{
484
+ {"xds_cluster_resolver_experimental", std::move(child_config)},
485
+ },
486
+ };
397
487
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
398
- gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)", this,
399
- config->name(), child_policy_.get());
488
+ std::string json_str = json.Dump(/*indent=*/1);
489
+ gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
490
+ this, json_str.c_str());
400
491
  }
492
+ RefCountedPtr<LoadBalancingPolicy::Config> config =
493
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
494
+ if (error != GRPC_ERROR_NONE) {
495
+ OnError(name, error);
496
+ return;
497
+ }
498
+ // Create child policy if not already present.
499
+ if (child_policy_ == nullptr) {
500
+ LoadBalancingPolicy::Args args;
501
+ args.work_serializer = work_serializer();
502
+ args.args = args_;
503
+ args.channel_control_helper = absl::make_unique<Helper>(Ref());
504
+ child_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
505
+ config->name(), std::move(args));
506
+ if (child_policy_ == nullptr) {
507
+ OnError(name, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
508
+ "failed to create child policy"));
509
+ return;
510
+ }
511
+ grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
512
+ interested_parties());
513
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
514
+ gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)", this,
515
+ config->name(), child_policy_.get());
516
+ }
517
+ }
518
+ // Update child policy.
519
+ UpdateArgs args;
520
+ args.config = std::move(config);
521
+ if (xds_certificate_provider_ != nullptr) {
522
+ grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
523
+ args.args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
524
+ } else {
525
+ args.args = grpc_channel_args_copy(args_);
526
+ }
527
+ child_policy_->UpdateLocked(std::move(args));
401
528
  }
402
- // Update child policy.
403
- UpdateArgs args;
404
- args.config = std::move(config);
405
- if (xds_certificate_provider_ != nullptr) {
406
- grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
407
- args.args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
408
- } else {
409
- args.args = grpc_channel_args_copy(args_);
529
+ // Remove entries in watchers_ for any clusters not in clusters_needed
530
+ for (auto it = watchers_.begin(); it != watchers_.end();) {
531
+ const std::string& cluster_name = it->first;
532
+ if (clusters_needed.find(cluster_name) != clusters_needed.end()) {
533
+ ++it;
534
+ continue;
535
+ }
536
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
537
+ gpr_log(GPR_INFO, "[cdslb %p] cancelling watch for cluster %s", this,
538
+ cluster_name.c_str());
539
+ }
540
+ CancelClusterDataWatch(cluster_name, it->second.watcher,
541
+ /*delay_unsubscription=*/false);
542
+ it = watchers_.erase(it);
410
543
  }
411
- child_policy_->UpdateLocked(std::move(args));
412
544
  }
413
545
 
414
- void CdsLb::OnError(grpc_error* error) {
546
+ void CdsLb::OnError(const std::string& name, grpc_error_handle error) {
415
547
  gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
416
- this, config_->cluster().c_str(), grpc_error_string(error));
548
+ this, name.c_str(), grpc_error_std_string(error).c_str());
417
549
  // Go into TRANSIENT_FAILURE if we have not yet created the child
418
550
  // policy (i.e., we have not yet received data from xds). Otherwise,
419
551
  // we keep running with the data we had previously.
@@ -426,12 +558,12 @@ void CdsLb::OnError(grpc_error* error) {
426
558
  }
427
559
  }
428
560
 
429
- void CdsLb::OnResourceDoesNotExist() {
561
+ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
430
562
  gpr_log(GPR_ERROR,
431
563
  "[cdslb %p] CDS resource for %s does not exist -- reporting "
432
564
  "TRANSIENT_FAILURE",
433
- this, config_->cluster().c_str());
434
- grpc_error* error =
565
+ this, name.c_str());
566
+ grpc_error_handle error =
435
567
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
436
568
  absl::StrCat("CDS resource \"", config_->cluster(),
437
569
  "\" does not exist")
@@ -443,8 +575,8 @@ void CdsLb::OnResourceDoesNotExist() {
443
575
  MaybeDestroyChildPolicyLocked();
444
576
  }
445
577
 
446
- grpc_error* CdsLb::UpdateXdsCertificateProvider(
447
- const XdsApi::CdsUpdate& cluster_data) {
578
+ grpc_error_handle CdsLb::UpdateXdsCertificateProvider(
579
+ const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data) {
448
580
  // Early out if channel is not configured to use xds security.
449
581
  grpc_channel_credentials* channel_credentials =
450
582
  grpc_channel_credentials_find_in_args(args_);
@@ -453,28 +585,28 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
453
585
  xds_certificate_provider_ = nullptr;
454
586
  return GRPC_ERROR_NONE;
455
587
  }
588
+ if (xds_certificate_provider_ == nullptr) {
589
+ xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>();
590
+ }
591
+ // Configure root cert.
456
592
  absl::string_view root_provider_instance_name =
457
593
  cluster_data.common_tls_context.combined_validation_context
458
594
  .validation_context_certificate_provider_instance.instance_name;
459
595
  absl::string_view root_provider_cert_name =
460
596
  cluster_data.common_tls_context.combined_validation_context
461
597
  .validation_context_certificate_provider_instance.certificate_name;
462
- absl::string_view identity_provider_instance_name =
463
- cluster_data.common_tls_context
464
- .tls_certificate_certificate_provider_instance.instance_name;
465
- absl::string_view identity_provider_cert_name =
466
- cluster_data.common_tls_context
467
- .tls_certificate_certificate_provider_instance.certificate_name;
468
598
  RefCountedPtr<XdsCertificateProvider> new_root_provider;
469
599
  if (!root_provider_instance_name.empty()) {
470
600
  new_root_provider =
471
601
  xds_client_->certificate_provider_store()
472
602
  .CreateOrGetCertificateProvider(root_provider_instance_name);
473
603
  if (new_root_provider == nullptr) {
474
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
475
- absl::StrCat("Certificate provider instance name: \"",
476
- root_provider_instance_name, "\" not recognized.")
477
- .c_str());
604
+ return grpc_error_set_int(
605
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
606
+ absl::StrCat("Certificate provider instance name: \"",
607
+ root_provider_instance_name, "\" not recognized.")
608
+ .c_str()),
609
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
478
610
  }
479
611
  }
480
612
  if (root_certificate_provider_ != new_root_provider) {
@@ -491,16 +623,31 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
491
623
  }
492
624
  root_certificate_provider_ = std::move(new_root_provider);
493
625
  }
626
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(
627
+ cluster_name, root_provider_cert_name,
628
+ root_certificate_provider_ == nullptr
629
+ ? nullptr
630
+ : root_certificate_provider_->distributor());
631
+ // Configure identity cert.
632
+ absl::string_view identity_provider_instance_name =
633
+ cluster_data.common_tls_context
634
+ .tls_certificate_certificate_provider_instance.instance_name;
635
+ absl::string_view identity_provider_cert_name =
636
+ cluster_data.common_tls_context
637
+ .tls_certificate_certificate_provider_instance.certificate_name;
494
638
  RefCountedPtr<XdsCertificateProvider> new_identity_provider;
495
639
  if (!identity_provider_instance_name.empty()) {
496
640
  new_identity_provider =
497
641
  xds_client_->certificate_provider_store()
498
642
  .CreateOrGetCertificateProvider(identity_provider_instance_name);
499
643
  if (new_identity_provider == nullptr) {
500
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
501
- absl::StrCat("Certificate provider instance name: \"",
502
- identity_provider_instance_name, "\" not recognized.")
503
- .c_str());
644
+ return grpc_error_set_int(
645
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
646
+ absl::StrCat("Certificate provider instance name: \"",
647
+ identity_provider_instance_name,
648
+ "\" not recognized.")
649
+ .c_str()),
650
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
504
651
  }
505
652
  }
506
653
  if (identity_certificate_provider_ != new_identity_provider) {
@@ -517,56 +664,34 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
517
664
  }
518
665
  identity_certificate_provider_ = std::move(new_identity_provider);
519
666
  }
520
- const std::vector<XdsApi::StringMatcher>& match_subject_alt_names =
667
+ xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
668
+ cluster_name, identity_provider_cert_name,
669
+ identity_certificate_provider_ == nullptr
670
+ ? nullptr
671
+ : identity_certificate_provider_->distributor());
672
+ // Configure SAN matchers.
673
+ const std::vector<StringMatcher>& match_subject_alt_names =
521
674
  cluster_data.common_tls_context.combined_validation_context
522
675
  .default_validation_context.match_subject_alt_names;
523
- if (!root_provider_instance_name.empty() &&
524
- !identity_provider_instance_name.empty()) {
525
- // Using mTLS configuration
526
- if (xds_certificate_provider_ != nullptr &&
527
- xds_certificate_provider_->ProvidesRootCerts() &&
528
- xds_certificate_provider_->ProvidesIdentityCerts()) {
529
- xds_certificate_provider_->UpdateRootCertNameAndDistributor(
530
- root_provider_cert_name, root_certificate_provider_->distributor());
531
- xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
532
- identity_provider_cert_name,
533
- identity_certificate_provider_->distributor());
534
- xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
535
- match_subject_alt_names);
536
- } else {
537
- // Existing xDS certificate provider does not have mTLS configuration.
538
- // Create new certificate provider so that new subchannel connectors are
539
- // created.
540
- xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
541
- root_provider_cert_name, root_certificate_provider_->distributor(),
542
- identity_provider_cert_name,
543
- identity_certificate_provider_->distributor(),
544
- match_subject_alt_names);
545
- }
546
- } else if (!root_provider_instance_name.empty()) {
547
- // Using TLS configuration
548
- if (xds_certificate_provider_ != nullptr &&
549
- xds_certificate_provider_->ProvidesRootCerts() &&
550
- !xds_certificate_provider_->ProvidesIdentityCerts()) {
551
- xds_certificate_provider_->UpdateRootCertNameAndDistributor(
552
- root_provider_cert_name, root_certificate_provider_->distributor());
553
- xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
554
- match_subject_alt_names);
555
- } else {
556
- // Existing xDS certificate provider does not have TLS configuration.
557
- // Create new certificate provider so that new subchannel connectors are
558
- // created.
559
- xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
560
- root_provider_cert_name, root_certificate_provider_->distributor(),
561
- "", nullptr, match_subject_alt_names);
562
- }
563
- } else {
564
- // No configuration provided.
565
- xds_certificate_provider_ = nullptr;
566
- }
676
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
677
+ cluster_name, match_subject_alt_names);
567
678
  return GRPC_ERROR_NONE;
568
679
  }
569
680
 
681
+ void CdsLb::CancelClusterDataWatch(absl::string_view cluster_name,
682
+ XdsClient::ClusterWatcherInterface* watcher,
683
+ bool delay_unsubscription) {
684
+ if (xds_certificate_provider_ != nullptr) {
685
+ std::string name(cluster_name);
686
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(name, "",
687
+ nullptr);
688
+ xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(name, "",
689
+ nullptr);
690
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(name, {});
691
+ }
692
+ xds_client_->CancelClusterDataWatch(cluster_name, watcher,
693
+ delay_unsubscription);
694
+ }
570
695
  //
571
696
  // factory
572
697
  //
@@ -575,13 +700,12 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
575
700
  public:
576
701
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
577
702
  LoadBalancingPolicy::Args args) const override {
578
- grpc_error* error = GRPC_ERROR_NONE;
579
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
580
- if (error != GRPC_ERROR_NONE) {
703
+ RefCountedPtr<XdsClient> xds_client =
704
+ XdsClient::GetFromChannelArgs(*args.args);
705
+ if (xds_client == nullptr) {
581
706
  gpr_log(GPR_ERROR,
582
- "cannot get XdsClient to instantiate cds LB policy: %s",
583
- grpc_error_string(error));
584
- GRPC_ERROR_UNREF(error);
707
+ "XdsClient not present in channel args -- cannot instantiate "
708
+ "cds LB policy");
585
709
  return nullptr;
586
710
  }
587
711
  return MakeOrphanable<CdsLb>(std::move(xds_client), std::move(args));
@@ -590,7 +714,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
590
714
  const char* name() const override { return kCds; }
591
715
 
592
716
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
593
- const Json& json, grpc_error** error) const override {
717
+ const Json& json, grpc_error_handle* error) const override {
594
718
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
595
719
  if (json.type() == Json::Type::JSON_NULL) {
596
720
  // xds was mentioned as a policy in the deprecated loadBalancingPolicy
@@ -600,7 +724,8 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
600
724
  "Please use loadBalancingConfig field of service config instead.");
601
725
  return nullptr;
602
726
  }
603
- std::vector<grpc_error*> error_list;
727
+ std::vector<grpc_error_handle> error_list;
728
+ // cluster name.
604
729
  std::string cluster;
605
730
  auto it = json.object_value().find("cluster");
606
731
  if (it == json.object_value().end()) {