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
@@ -30,12 +30,11 @@
30
30
 
31
31
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
32
32
  #include "src/core/ext/filters/client_channel/server_address.h"
33
+ #include "src/core/lib/address_utils/parse_address.h"
33
34
  #include "src/core/lib/channel/channel_args.h"
34
35
  #include "src/core/lib/gpr/string.h"
35
- #include "src/core/lib/iomgr/parse_address.h"
36
36
  #include "src/core/lib/iomgr/resolve_address.h"
37
37
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
38
- #include "src/core/lib/iomgr/work_serializer.h"
39
38
  #include "src/core/lib/slice/slice_internal.h"
40
39
  #include "src/core/lib/slice/slice_string_helpers.h"
41
40
 
@@ -53,13 +52,14 @@ class SockaddrResolver : public Resolver {
53
52
  void ShutdownLocked() override {}
54
53
 
55
54
  private:
55
+ std::unique_ptr<ResultHandler> result_handler_;
56
56
  ServerAddressList addresses_;
57
57
  const grpc_channel_args* channel_args_ = nullptr;
58
58
  };
59
59
 
60
60
  SockaddrResolver::SockaddrResolver(ServerAddressList addresses,
61
61
  ResolverArgs args)
62
- : Resolver(std::move(args.work_serializer), std::move(args.result_handler)),
62
+ : result_handler_(std::move(args.result_handler)),
63
63
  addresses_(std::move(addresses)),
64
64
  channel_args_(grpc_channel_args_copy(args.args)) {}
65
65
 
@@ -73,7 +73,7 @@ void SockaddrResolver::StartLocked() {
73
73
  // TODO(roth): Use std::move() once channel args is converted to C++.
74
74
  result.args = channel_args_;
75
75
  channel_args_ = nullptr;
76
- result_handler()->ReturnResult(std::move(result));
76
+ result_handler_->ReturnResult(std::move(result));
77
77
  }
78
78
 
79
79
  //
@@ -150,7 +150,7 @@ class UnixResolverFactory : public ResolverFactory {
150
150
  return CreateSockaddrResolver(std::move(args), grpc_parse_unix);
151
151
  }
152
152
 
153
- std::string GetDefaultAuthority(const URI& uri) const override {
153
+ std::string GetDefaultAuthority(const URI& /*uri*/) const override {
154
154
  return "localhost";
155
155
  }
156
156
 
@@ -22,13 +22,19 @@
22
22
  #include "absl/strings/str_join.h"
23
23
  #include "absl/strings/str_split.h"
24
24
  #include "re2/re2.h"
25
+ #define XXH_INLINE_ALL
26
+ #include "xxhash.h"
25
27
 
26
28
  #include "src/core/ext/filters/client_channel/config_selector.h"
29
+ #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
27
30
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
31
+ #include "src/core/ext/xds/xds_channel_args.h"
28
32
  #include "src/core/ext/xds/xds_client.h"
33
+ #include "src/core/ext/xds/xds_http_filters.h"
29
34
  #include "src/core/lib/channel/channel_args.h"
30
35
  #include "src/core/lib/iomgr/closure.h"
31
36
  #include "src/core/lib/iomgr/exec_ctx.h"
37
+ #include "src/core/lib/surface/lame_client.h"
32
38
  #include "src/core/lib/transport/timeout_encoding.h"
33
39
 
34
40
  namespace grpc_core {
@@ -46,8 +52,8 @@ namespace {
46
52
  class XdsResolver : public Resolver {
47
53
  public:
48
54
  explicit XdsResolver(ResolverArgs args)
49
- : Resolver(std::move(args.work_serializer),
50
- std::move(args.result_handler)),
55
+ : work_serializer_(std::move(args.work_serializer)),
56
+ result_handler_(std::move(args.result_handler)),
51
57
  server_name_(absl::StripPrefix(args.uri.path(), "/")),
52
58
  args_(grpc_channel_args_copy(args.args)),
53
59
  interested_parties_(args.pollset_set) {
@@ -68,19 +74,23 @@ class XdsResolver : public Resolver {
68
74
 
69
75
  void ShutdownLocked() override;
70
76
 
77
+ void ResetBackoffLocked() override {
78
+ if (xds_client_ != nullptr) xds_client_->ResetBackoff();
79
+ }
80
+
71
81
  private:
72
82
  class Notifier {
73
83
  public:
74
84
  Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::LdsUpdate update);
75
85
  Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::RdsUpdate update);
76
- Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error* error);
86
+ Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error_handle error);
77
87
  explicit Notifier(RefCountedPtr<XdsResolver> resolver);
78
88
 
79
89
  private:
80
90
  enum Type { kLdsUpdate, kRdsUpdate, kError, kDoesNotExist };
81
91
 
82
- static void RunInExecCtx(void* arg, grpc_error* error);
83
- void RunInWorkSerializer(grpc_error* error);
92
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
93
+ void RunInWorkSerializer(grpc_error_handle error);
84
94
 
85
95
  RefCountedPtr<XdsResolver> resolver_;
86
96
  grpc_closure closure_;
@@ -95,7 +105,9 @@ class XdsResolver : public Resolver {
95
105
  void OnListenerChanged(XdsApi::LdsUpdate listener) override {
96
106
  new Notifier(resolver_, std::move(listener));
97
107
  }
98
- void OnError(grpc_error* error) override { new Notifier(resolver_, error); }
108
+ void OnError(grpc_error_handle error) override {
109
+ new Notifier(resolver_, error);
110
+ }
99
111
  void OnResourceDoesNotExist() override { new Notifier(resolver_); }
100
112
 
101
113
  private:
@@ -109,7 +121,9 @@ class XdsResolver : public Resolver {
109
121
  void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
110
122
  new Notifier(resolver_, std::move(route_config));
111
123
  }
112
- void OnError(grpc_error* error) override { new Notifier(resolver_, error); }
124
+ void OnError(grpc_error_handle error) override {
125
+ new Notifier(resolver_, error);
126
+ }
113
127
  void OnResourceDoesNotExist() override { new Notifier(resolver_); }
114
128
 
115
129
  private:
@@ -117,7 +131,7 @@ class XdsResolver : public Resolver {
117
131
  };
118
132
 
119
133
  class ClusterState
120
- : public RefCounted<ClusterState, PolymorphicRefCount, false> {
134
+ : public RefCounted<ClusterState, PolymorphicRefCount, kUnrefNoDelete> {
121
135
  public:
122
136
  using ClusterStateMap =
123
137
  std::map<std::string, std::unique_ptr<ClusterState>>;
@@ -136,8 +150,7 @@ class XdsResolver : public Resolver {
136
150
  class XdsConfigSelector : public ConfigSelector {
137
151
  public:
138
152
  XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
139
- const std::vector<XdsApi::Route>& routes,
140
- grpc_error* error);
153
+ grpc_error_handle* error);
141
154
  ~XdsConfigSelector() override;
142
155
 
143
156
  const char* name() const override { return "XdsConfigSelector"; }
@@ -151,47 +164,72 @@ class XdsResolver : public Resolver {
151
164
 
152
165
  CallConfig GetCallConfig(GetCallConfigArgs args) override;
153
166
 
167
+ std::vector<const grpc_channel_filter*> GetFilters() override {
168
+ return filters_;
169
+ }
170
+
171
+ grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) override;
172
+
154
173
  private:
155
174
  struct Route {
175
+ struct ClusterWeightState {
176
+ uint32_t range_end;
177
+ absl::string_view cluster;
178
+ RefCountedPtr<ServiceConfig> method_config;
179
+
180
+ bool operator==(const ClusterWeightState& other) const;
181
+ };
182
+
156
183
  XdsApi::Route route;
157
- absl::InlinedVector<std::pair<uint32_t, absl::string_view>, 2>
158
- weighted_cluster_state;
159
184
  RefCountedPtr<ServiceConfig> method_config;
160
- bool operator==(const Route& other) const {
161
- return route == other.route &&
162
- weighted_cluster_state == other.weighted_cluster_state;
163
- }
185
+ absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
186
+
187
+ bool operator==(const Route& other) const;
164
188
  };
165
189
  using RouteTable = std::vector<Route>;
166
190
 
167
191
  void MaybeAddCluster(const std::string& name);
168
- grpc_error* CreateMethodConfig(RefCountedPtr<ServiceConfig>* method_config,
169
- const XdsApi::Route& route);
192
+ grpc_error_handle CreateMethodConfig(
193
+ const XdsApi::Route& route,
194
+ const XdsApi::Route::ClusterWeight* cluster_weight,
195
+ RefCountedPtr<ServiceConfig>* method_config);
170
196
 
171
197
  RefCountedPtr<XdsResolver> resolver_;
172
198
  RouteTable route_table_;
173
199
  std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
200
+ std::vector<const grpc_channel_filter*> filters_;
201
+ grpc_error_handle filter_error_ = GRPC_ERROR_NONE;
174
202
  };
175
203
 
176
204
  void OnListenerUpdate(XdsApi::LdsUpdate listener);
177
205
  void OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update);
178
- void OnError(grpc_error* error);
206
+ void OnError(grpc_error_handle error);
179
207
  void OnResourceDoesNotExist();
180
208
 
181
- grpc_error* CreateServiceConfig(RefCountedPtr<ServiceConfig>* service_config);
209
+ grpc_error_handle CreateServiceConfig(
210
+ RefCountedPtr<ServiceConfig>* service_config);
182
211
  void GenerateResult();
183
212
  void MaybeRemoveUnusedClusters();
184
213
 
214
+ std::shared_ptr<WorkSerializer> work_serializer_;
215
+ std::unique_ptr<ResultHandler> result_handler_;
185
216
  std::string server_name_;
186
217
  const grpc_channel_args* args_;
187
218
  grpc_pollset_set* interested_parties_;
219
+
188
220
  RefCountedPtr<XdsClient> xds_client_;
221
+
189
222
  XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
223
+ // This will not contain the RouteConfiguration, even if it comes with the
224
+ // LDS response; instead, the relevant VirtualHost from the
225
+ // RouteConfiguration will be saved in current_virtual_host_.
226
+ XdsApi::LdsUpdate current_listener_;
227
+
190
228
  std::string route_config_name_;
191
229
  XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
230
+ XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
231
+
192
232
  ClusterState::ClusterStateMap cluster_state_map_;
193
- std::vector<XdsApi::Route> current_update_;
194
- XdsApi::Duration http_max_stream_duration_;
195
233
  };
196
234
 
197
235
  //
@@ -210,13 +248,13 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
210
248
  XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
211
249
  XdsApi::RdsUpdate update)
212
250
  : resolver_(std::move(resolver)), type_(kRdsUpdate) {
213
- update_.rds_update = std::move(update);
251
+ update_.http_connection_manager.rds_update = std::move(update);
214
252
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
215
253
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
216
254
  }
217
255
 
218
256
  XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
219
- grpc_error* error)
257
+ grpc_error_handle error)
220
258
  : resolver_(std::move(resolver)), type_(kError) {
221
259
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
222
260
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -228,14 +266,14 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
228
266
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
229
267
  }
230
268
 
231
- void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error* error) {
269
+ void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
232
270
  Notifier* self = static_cast<Notifier*>(arg);
233
271
  GRPC_ERROR_REF(error);
234
- self->resolver_->work_serializer()->Run(
272
+ self->resolver_->work_serializer_->Run(
235
273
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
236
274
  }
237
275
 
238
- void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
276
+ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error_handle error) {
239
277
  if (resolver_->xds_client_ == nullptr) {
240
278
  GRPC_ERROR_UNREF(error);
241
279
  delete this;
@@ -246,7 +284,8 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
246
284
  resolver_->OnListenerUpdate(std::move(update_));
247
285
  break;
248
286
  case kRdsUpdate:
249
- resolver_->OnRouteConfigUpdate(std::move(*update_.rds_update));
287
+ resolver_->OnRouteConfigUpdate(
288
+ std::move(*update_.http_connection_manager.rds_update));
250
289
  break;
251
290
  case kError:
252
291
  resolver_->OnError(error);
@@ -258,13 +297,35 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
258
297
  delete this;
259
298
  }
260
299
 
300
+ //
301
+ // XdsResolver::XdsConfigSelector::Route
302
+ //
303
+
304
+ bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
305
+ if (sc1 == nullptr) return sc2 == nullptr;
306
+ if (sc2 == nullptr) return false;
307
+ return sc1->json_string() == sc2->json_string();
308
+ }
309
+
310
+ bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
311
+ const ClusterWeightState& other) const {
312
+ return range_end == other.range_end && cluster == other.cluster &&
313
+ MethodConfigsEqual(method_config.get(), other.method_config.get());
314
+ }
315
+
316
+ bool XdsResolver::XdsConfigSelector::Route::operator==(
317
+ const Route& other) const {
318
+ return route == other.route &&
319
+ weighted_cluster_state == other.weighted_cluster_state &&
320
+ MethodConfigsEqual(method_config.get(), other.method_config.get());
321
+ }
322
+
261
323
  //
262
324
  // XdsResolver::XdsConfigSelector
263
325
  //
264
326
 
265
327
  XdsResolver::XdsConfigSelector::XdsConfigSelector(
266
- RefCountedPtr<XdsResolver> resolver,
267
- const std::vector<XdsApi::Route>& routes, grpc_error* error)
328
+ RefCountedPtr<XdsResolver> resolver, grpc_error_handle* error)
268
329
  : resolver_(std::move(resolver)) {
269
330
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
270
331
  gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
@@ -279,8 +340,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
279
340
  // weighted_cluster_state field points to the memory in the route field, so
280
341
  // moving the entry in a reallocation will cause the string_view to point to
281
342
  // invalid data.
282
- route_table_.reserve(routes.size());
283
- for (auto& route : routes) {
343
+ route_table_.reserve(resolver_->current_virtual_host_.routes.size());
344
+ for (auto& route : resolver_->current_virtual_host_.routes) {
284
345
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
285
346
  gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
286
347
  resolver_.get(), this, route.ToString().c_str());
@@ -292,27 +353,95 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
292
353
  // one.
293
354
  if (!route.max_stream_duration.has_value()) {
294
355
  route_entry.route.max_stream_duration =
295
- resolver_->http_max_stream_duration_;
356
+ resolver_->current_listener_.http_connection_manager
357
+ .http_max_stream_duration;
296
358
  }
297
- error = CreateMethodConfig(&route_entry.method_config, route_entry.route);
298
359
  if (route.weighted_clusters.empty()) {
360
+ *error = CreateMethodConfig(route_entry.route, nullptr,
361
+ &route_entry.method_config);
299
362
  MaybeAddCluster(route.cluster_name);
300
363
  } else {
301
364
  uint32_t end = 0;
302
365
  for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
303
- MaybeAddCluster(weighted_cluster.name);
366
+ Route::ClusterWeightState cluster_weight_state;
367
+ *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
368
+ &cluster_weight_state.method_config);
369
+ if (*error != GRPC_ERROR_NONE) return;
304
370
  end += weighted_cluster.weight;
305
- route_entry.weighted_cluster_state.emplace_back(end,
306
- weighted_cluster.name);
371
+ cluster_weight_state.range_end = end;
372
+ cluster_weight_state.cluster = weighted_cluster.name;
373
+ route_entry.weighted_cluster_state.push_back(
374
+ std::move(cluster_weight_state));
375
+ MaybeAddCluster(weighted_cluster.name);
307
376
  }
308
377
  }
309
378
  }
379
+ // Populate filter list.
380
+ bool found_router = false;
381
+ for (const auto& http_filter :
382
+ resolver_->current_listener_.http_connection_manager.http_filters) {
383
+ // Stop at the router filter. It's a no-op for us, and we ignore
384
+ // anything that may come after it, for compatibility with Envoy.
385
+ if (http_filter.config.config_proto_type_name ==
386
+ kXdsHttpRouterFilterConfigName) {
387
+ found_router = true;
388
+ break;
389
+ }
390
+ // Find filter. This is guaranteed to succeed, because it's checked
391
+ // at config validation time in the XdsApi code.
392
+ const XdsHttpFilterImpl* filter_impl =
393
+ XdsHttpFilterRegistry::GetFilterForType(
394
+ http_filter.config.config_proto_type_name);
395
+ GPR_ASSERT(filter_impl != nullptr);
396
+ // Add C-core filter to list.
397
+ filters_.push_back(filter_impl->channel_filter());
398
+ }
399
+ // For compatibility with Envoy, if the router filter is not
400
+ // configured, we fail all RPCs.
401
+ if (!found_router) {
402
+ filter_error_ =
403
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
404
+ "no xDS HTTP router filter configured"),
405
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
406
+ filters_.push_back(&grpc_lame_filter);
407
+ }
310
408
  }
311
409
 
312
- grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
313
- RefCountedPtr<ServiceConfig>* method_config, const XdsApi::Route& route) {
314
- grpc_error* error = GRPC_ERROR_NONE;
410
+ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
411
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
412
+ gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
413
+ resolver_.get(), this);
414
+ }
415
+ clusters_.clear();
416
+ resolver_->MaybeRemoveUnusedClusters();
417
+ GRPC_ERROR_UNREF(filter_error_);
418
+ }
419
+
420
+ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
421
+ const std::string& instance_name,
422
+ const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
423
+ const XdsApi::Route::ClusterWeight* cluster_weight) {
424
+ // Check ClusterWeight, if any.
425
+ if (cluster_weight != nullptr) {
426
+ auto it = cluster_weight->typed_per_filter_config.find(instance_name);
427
+ if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
428
+ }
429
+ // Check Route.
430
+ auto it = route.typed_per_filter_config.find(instance_name);
431
+ if (it != route.typed_per_filter_config.end()) return &it->second;
432
+ // Check VirtualHost.
433
+ it = vhost.typed_per_filter_config.find(instance_name);
434
+ if (it != vhost.typed_per_filter_config.end()) return &it->second;
435
+ // Not found.
436
+ return nullptr;
437
+ }
438
+
439
+ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
440
+ const XdsApi::Route& route,
441
+ const XdsApi::Route::ClusterWeight* cluster_weight,
442
+ RefCountedPtr<ServiceConfig>* method_config) {
315
443
  std::vector<std::string> fields;
444
+ // Set timeout.
316
445
  if (route.max_stream_duration.has_value() &&
317
446
  (route.max_stream_duration->seconds != 0 ||
318
447
  route.max_stream_duration->nanos != 0)) {
@@ -320,6 +449,51 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
320
449
  route.max_stream_duration->seconds,
321
450
  route.max_stream_duration->nanos));
322
451
  }
452
+ // Handle xDS HTTP filters.
453
+ std::map<std::string, std::vector<std::string>> per_filter_configs;
454
+ grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
455
+ for (const auto& http_filter :
456
+ resolver_->current_listener_.http_connection_manager.http_filters) {
457
+ // Stop at the router filter. It's a no-op for us, and we ignore
458
+ // anything that may come after it, for compatibility with Envoy.
459
+ if (http_filter.config.config_proto_type_name ==
460
+ kXdsHttpRouterFilterConfigName) {
461
+ break;
462
+ }
463
+ // Find filter. This is guaranteed to succeed, because it's checked
464
+ // at config validation time in the XdsApi code.
465
+ const XdsHttpFilterImpl* filter_impl =
466
+ XdsHttpFilterRegistry::GetFilterForType(
467
+ http_filter.config.config_proto_type_name);
468
+ GPR_ASSERT(filter_impl != nullptr);
469
+ // Allow filter to add channel args that may affect service config
470
+ // parsing.
471
+ args = filter_impl->ModifyChannelArgs(args);
472
+ // Find config override, if any.
473
+ const XdsHttpFilterImpl::FilterConfig* config_override =
474
+ FindFilterConfigOverride(http_filter.name,
475
+ resolver_->current_virtual_host_, route,
476
+ cluster_weight);
477
+ // Generate service config for filter.
478
+ auto method_config_field =
479
+ filter_impl->GenerateServiceConfig(http_filter.config, config_override);
480
+ if (!method_config_field.ok()) {
481
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
482
+ absl::StrCat("failed to generate method config for HTTP filter ",
483
+ http_filter.name, ": ",
484
+ method_config_field.status().ToString())
485
+ .c_str());
486
+ }
487
+ per_filter_configs[method_config_field->service_config_field_name]
488
+ .push_back(method_config_field->element);
489
+ }
490
+ for (const auto& p : per_filter_configs) {
491
+ fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
492
+ absl::StrJoin(p.second, ",\n"),
493
+ "\n ]"));
494
+ }
495
+ // Construct service config.
496
+ grpc_error_handle error = GRPC_ERROR_NONE;
323
497
  if (!fields.empty()) {
324
498
  std::string json = absl::StrCat(
325
499
  "{\n"
@@ -331,19 +505,20 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
331
505
  absl::StrJoin(fields, ",\n"),
332
506
  "\n } ]\n"
333
507
  "}");
334
- *method_config =
335
- ServiceConfig::Create(resolver_->args_, json.c_str(), &error);
508
+ *method_config = ServiceConfig::Create(args, json.c_str(), &error);
336
509
  }
510
+ grpc_channel_args_destroy(args);
337
511
  return error;
338
512
  }
339
513
 
340
- XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
341
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
342
- gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
343
- resolver_.get(), this);
344
- }
345
- clusters_.clear();
346
- resolver_->MaybeRemoveUnusedClusters();
514
+ grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
515
+ grpc_channel_args* args) {
516
+ if (filter_error_ == GRPC_ERROR_NONE) return args;
517
+ grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
518
+ grpc_channel_args* new_args =
519
+ grpc_channel_args_copy_and_add(args, &error_arg, 1);
520
+ grpc_channel_args_destroy(args);
521
+ return new_args;
347
522
  }
348
523
 
349
524
  void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
@@ -359,108 +534,50 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
359
534
  }
360
535
  }
361
536
 
362
- bool PathMatch(const absl::string_view& path,
363
- const XdsApi::Route::Matchers::PathMatcher& path_matcher) {
364
- switch (path_matcher.type) {
365
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX:
366
- return path_matcher.case_sensitive
367
- ? absl::StartsWith(path, path_matcher.string_matcher)
368
- : absl::StartsWithIgnoreCase(path,
369
- path_matcher.string_matcher);
370
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH:
371
- return path_matcher.case_sensitive
372
- ? path == path_matcher.string_matcher
373
- : absl::EqualsIgnoreCase(path, path_matcher.string_matcher);
374
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX:
375
- // Note: Case-sensitive option will already have been set appropriately
376
- // in path_matcher.regex_matcher when it was constructed, so no
377
- // need to check it here.
378
- return RE2::FullMatch(path.data(), *path_matcher.regex_matcher);
379
- default:
380
- return false;
381
- }
382
- }
383
-
384
- absl::optional<absl::string_view> GetMetadataValue(
385
- const std::string& target_key, grpc_metadata_batch* initial_metadata,
537
+ absl::optional<absl::string_view> GetHeaderValue(
538
+ grpc_metadata_batch* initial_metadata, absl::string_view header_name,
386
539
  std::string* concatenated_value) {
387
- // Find all values for the specified key.
388
- GPR_DEBUG_ASSERT(initial_metadata != nullptr);
389
- absl::InlinedVector<absl::string_view, 1> values;
390
- for (grpc_linked_mdelem* md = initial_metadata->list.head; md != nullptr;
391
- md = md->next) {
392
- absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
393
- absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
394
- if (target_key == key) values.push_back(value);
395
- }
396
- // If none found, no match.
397
- if (values.empty()) return absl::nullopt;
398
- // If exactly one found, return it as-is.
399
- if (values.size() == 1) return values.front();
400
- // If more than one found, concatenate the values, using
401
- // *concatenated_values as a temporary holding place for the
402
- // concatenated string.
403
- *concatenated_value = absl::StrJoin(values, ",");
404
- return *concatenated_value;
405
- }
406
-
407
- bool HeaderMatchHelper(
408
- const XdsApi::Route::Matchers::HeaderMatcher& header_matcher,
409
- grpc_metadata_batch* initial_metadata) {
410
- std::string concatenated_value;
411
- absl::optional<absl::string_view> value;
412
540
  // Note: If we ever allow binary headers here, we still need to
413
541
  // special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
414
542
  // they are not visible to the LB policy in grpc-go.
415
- if (absl::EndsWith(header_matcher.name, "-bin") ||
416
- header_matcher.name == "grpc-previous-rpc-attempts") {
417
- value = absl::nullopt;
418
- } else if (header_matcher.name == "content-type") {
419
- value = "application/grpc";
420
- } else {
421
- value = GetMetadataValue(header_matcher.name, initial_metadata,
422
- &concatenated_value);
543
+ if (absl::EndsWith(header_name, "-bin")) {
544
+ return absl::nullopt;
545
+ } else if (header_name == "content-type") {
546
+ return "application/grpc";
423
547
  }
424
- if (!value.has_value()) {
425
- if (header_matcher.type ==
426
- XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PRESENT) {
427
- return !header_matcher.present_match;
428
- } else {
429
- // For all other header matcher types, we need the header value to
430
- // exist to consider matches.
548
+ return grpc_metadata_batch_get_value(initial_metadata, header_name,
549
+ concatenated_value);
550
+ }
551
+
552
+ bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
553
+ grpc_metadata_batch* initial_metadata) {
554
+ for (const auto& header_matcher : header_matchers) {
555
+ std::string concatenated_value;
556
+ if (!header_matcher.Match(GetHeaderValue(
557
+ initial_metadata, header_matcher.name(), &concatenated_value))) {
431
558
  return false;
432
559
  }
433
560
  }
434
- switch (header_matcher.type) {
435
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT:
436
- return value.value() == header_matcher.string_matcher;
437
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX:
438
- return RE2::FullMatch(value.value().data(), *header_matcher.regex_match);
439
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE:
440
- int64_t int_value;
441
- if (!absl::SimpleAtoi(value.value(), &int_value)) {
442
- return false;
443
- }
444
- return int_value >= header_matcher.range_start &&
445
- int_value < header_matcher.range_end;
446
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX:
447
- return absl::StartsWith(value.value(), header_matcher.string_matcher);
448
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX:
449
- return absl::EndsWith(value.value(), header_matcher.string_matcher);
450
- default:
451
- return false;
452
- }
561
+ return true;
453
562
  }
454
563
 
455
- bool HeadersMatch(
456
- const std::vector<XdsApi::Route::Matchers::HeaderMatcher>& header_matchers,
564
+ absl::optional<uint64_t> HeaderHashHelper(
565
+ const XdsApi::Route::HashPolicy& policy,
457
566
  grpc_metadata_batch* initial_metadata) {
458
- for (const auto& header_matcher : header_matchers) {
459
- bool match = HeaderMatchHelper(header_matcher, initial_metadata);
460
- if (header_matcher.invert_match) match = !match;
461
- if (!match) return false;
567
+ GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
568
+ std::string value_buffer;
569
+ absl::optional<absl::string_view> header_value =
570
+ GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
571
+ if (policy.regex != nullptr) {
572
+ // If GetHeaderValue() did not already store the value in
573
+ // value_buffer, copy it there now, so we can modify it.
574
+ if (header_value->data() != value_buffer.data()) {
575
+ value_buffer = std::string(*header_value);
576
+ }
577
+ RE2::GlobalReplace(&value_buffer, *policy.regex, policy.regex_substitution);
578
+ header_value = value_buffer;
462
579
  }
463
- return true;
580
+ return XXH64(header_value->data(), header_value->size(), 0);
464
581
  }
465
582
 
466
583
  bool UnderFraction(const uint32_t fraction_per_million) {
@@ -473,8 +590,8 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
473
590
  GetCallConfigArgs args) {
474
591
  for (const auto& entry : route_table_) {
475
592
  // Path matching.
476
- if (!PathMatch(StringViewFromSlice(*args.path),
477
- entry.route.matchers.path_matcher)) {
593
+ if (!entry.route.matchers.path_matcher.Match(
594
+ StringViewFromSlice(*args.path))) {
478
595
  continue;
479
596
  }
480
597
  // Header Matching.
@@ -489,13 +606,15 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
489
606
  }
490
607
  // Found a route match
491
608
  absl::string_view cluster_name;
609
+ RefCountedPtr<ServiceConfig> method_config;
492
610
  if (entry.route.weighted_clusters.empty()) {
493
611
  cluster_name = entry.route.cluster_name;
612
+ method_config = entry.method_config;
494
613
  } else {
495
614
  const uint32_t key =
496
615
  rand() %
497
616
  entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
498
- .first;
617
+ .range_end;
499
618
  // Find the index in weighted clusters corresponding to key.
500
619
  size_t mid = 0;
501
620
  size_t start_index = 0;
@@ -503,9 +622,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
503
622
  size_t index = 0;
504
623
  while (end_index > start_index) {
505
624
  mid = (start_index + end_index) / 2;
506
- if (entry.weighted_cluster_state[mid].first > key) {
625
+ if (entry.weighted_cluster_state[mid].range_end > key) {
507
626
  end_index = mid;
508
- } else if (entry.weighted_cluster_state[mid].first < key) {
627
+ } else if (entry.weighted_cluster_state[mid].range_end < key) {
509
628
  start_index = mid + 1;
510
629
  } else {
511
630
  index = mid + 1;
@@ -513,21 +632,56 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
513
632
  }
514
633
  }
515
634
  if (index == 0) index = start_index;
516
- GPR_ASSERT(entry.weighted_cluster_state[index].first > key);
517
- cluster_name = entry.weighted_cluster_state[index].second;
635
+ GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
636
+ cluster_name = entry.weighted_cluster_state[index].cluster;
637
+ method_config = entry.weighted_cluster_state[index].method_config;
518
638
  }
519
639
  auto it = clusters_.find(cluster_name);
520
640
  GPR_ASSERT(it != clusters_.end());
521
641
  XdsResolver* resolver =
522
642
  static_cast<XdsResolver*>(resolver_->Ref().release());
523
643
  ClusterState* cluster_state = it->second->Ref().release();
644
+ // Generate a hash
645
+ absl::optional<uint64_t> hash;
646
+ for (const auto& hash_policy : entry.route.hash_policies) {
647
+ absl::optional<uint64_t> new_hash;
648
+ switch (hash_policy.type) {
649
+ case XdsApi::Route::HashPolicy::HEADER:
650
+ new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
651
+ break;
652
+ case XdsApi::Route::HashPolicy::CHANNEL_ID:
653
+ new_hash =
654
+ static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver));
655
+ break;
656
+ default:
657
+ GPR_ASSERT(0);
658
+ }
659
+ if (new_hash.has_value()) {
660
+ // Rotating the old value prevents duplicate hash rules from cancelling
661
+ // each other out and preserves all of the entropy
662
+ const uint64_t old_value =
663
+ hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
664
+ hash = old_value ^ new_hash.value();
665
+ }
666
+ // If the policy is a terminal policy and a hash has been generated,
667
+ // ignore the rest of the hash policies.
668
+ if (hash_policy.terminal && hash.has_value()) {
669
+ break;
670
+ }
671
+ }
672
+ if (!hash.has_value()) {
673
+ // If there is no hash, we just choose a random value as a default.
674
+ hash = rand();
675
+ }
524
676
  CallConfig call_config;
525
- if (entry.method_config != nullptr) {
526
- call_config.service_config = entry.method_config;
677
+ if (method_config != nullptr) {
527
678
  call_config.method_configs =
528
- entry.method_config->GetMethodParsedConfigVector(grpc_empty_slice());
679
+ method_config->GetMethodParsedConfigVector(grpc_empty_slice());
680
+ call_config.service_config = std::move(method_config);
529
681
  }
530
682
  call_config.call_attributes[kXdsClusterAttribute] = it->first;
683
+ call_config.call_attributes[kRequestRingHashAttribute] =
684
+ absl::StrFormat("%" PRIu64, hash.value());
531
685
  call_config.on_call_committed = [resolver, cluster_state]() {
532
686
  cluster_state->Unref();
533
687
  ExecCtx::Run(
@@ -541,9 +695,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
541
695
  // the data plane mutex.
542
696
  DEBUG_LOCATION,
543
697
  GRPC_CLOSURE_CREATE(
544
- [](void* arg, grpc_error* /*error*/) {
698
+ [](void* arg, grpc_error_handle /*error*/) {
545
699
  auto* resolver = static_cast<XdsResolver*>(arg);
546
- resolver->work_serializer()->Run(
700
+ resolver->work_serializer_->Run(
547
701
  [resolver]() {
548
702
  resolver->MaybeRemoveUnusedClusters();
549
703
  resolver->Unref();
@@ -563,14 +717,14 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
563
717
  //
564
718
 
565
719
  void XdsResolver::StartLocked() {
566
- grpc_error* error = GRPC_ERROR_NONE;
567
- xds_client_ = XdsClient::GetOrCreate(&error);
720
+ grpc_error_handle error = GRPC_ERROR_NONE;
721
+ xds_client_ = XdsClient::GetOrCreate(args_, &error);
568
722
  if (error != GRPC_ERROR_NONE) {
569
723
  gpr_log(GPR_ERROR,
570
724
  "Failed to create xds client -- channel will remain in "
571
725
  "TRANSIENT_FAILURE: %s",
572
- grpc_error_string(error));
573
- result_handler()->ReturnError(error);
726
+ grpc_error_std_string(error).c_str());
727
+ result_handler_->ReturnError(error);
574
728
  return;
575
729
  }
576
730
  grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
@@ -615,24 +769,34 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
615
769
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
616
770
  gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
617
771
  }
618
- if (listener.route_config_name != route_config_name_) {
772
+ if (listener.http_connection_manager.route_config_name !=
773
+ route_config_name_) {
619
774
  if (route_config_watcher_ != nullptr) {
620
775
  xds_client_->CancelRouteConfigDataWatch(
621
776
  route_config_name_, route_config_watcher_,
622
- /*delay_unsubscription=*/!listener.route_config_name.empty());
777
+ /*delay_unsubscription=*/
778
+ !listener.http_connection_manager.route_config_name.empty());
623
779
  route_config_watcher_ = nullptr;
624
780
  }
625
- route_config_name_ = std::move(listener.route_config_name);
781
+ route_config_name_ =
782
+ std::move(listener.http_connection_manager.route_config_name);
626
783
  if (!route_config_name_.empty()) {
784
+ current_virtual_host_.routes.clear();
627
785
  auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
628
786
  route_config_watcher_ = watcher.get();
629
787
  xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
630
788
  }
631
789
  }
632
- http_max_stream_duration_ = listener.http_max_stream_duration;
790
+ current_listener_ = std::move(listener);
633
791
  if (route_config_name_.empty()) {
634
- GPR_ASSERT(listener.rds_update.has_value());
635
- OnRouteConfigUpdate(std::move(*listener.rds_update));
792
+ GPR_ASSERT(
793
+ current_listener_.http_connection_manager.rds_update.has_value());
794
+ OnRouteConfigUpdate(
795
+ std::move(*current_listener_.http_connection_manager.rds_update));
796
+ } else {
797
+ // HCM may contain newer filter config. We need to propagate the update as
798
+ // config selector to the channel
799
+ GenerateResult();
636
800
  }
637
801
  }
638
802
 
@@ -650,19 +814,20 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
650
814
  .c_str()));
651
815
  return;
652
816
  }
653
- // Save the list of routes in the resolver.
654
- current_update_ = std::move(vhost->routes);
817
+ // Save the virtual host in the resolver.
818
+ current_virtual_host_ = std::move(*vhost);
655
819
  // Send a new result to the channel.
656
820
  GenerateResult();
657
821
  }
658
822
 
659
- void XdsResolver::OnError(grpc_error* error) {
823
+ void XdsResolver::OnError(grpc_error_handle error) {
660
824
  gpr_log(GPR_ERROR, "[xds_resolver %p] received error from XdsClient: %s",
661
- this, grpc_error_string(error));
825
+ this, grpc_error_std_string(error).c_str());
662
826
  Result result;
663
- result.args = grpc_channel_args_copy(args_);
827
+ grpc_arg new_arg = xds_client_->MakeChannelArg();
828
+ result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
664
829
  result.service_config_error = error;
665
- result_handler()->ReturnResult(std::move(result));
830
+ result_handler_->ReturnResult(std::move(result));
666
831
  }
667
832
 
668
833
  void XdsResolver::OnResourceDoesNotExist() {
@@ -670,16 +835,16 @@ void XdsResolver::OnResourceDoesNotExist() {
670
835
  "[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
671
836
  "update and returning empty service config",
672
837
  this);
673
- current_update_.clear();
838
+ current_virtual_host_.routes.clear();
674
839
  Result result;
675
840
  result.service_config =
676
841
  ServiceConfig::Create(args_, "{}", &result.service_config_error);
677
842
  GPR_ASSERT(result.service_config != nullptr);
678
843
  result.args = grpc_channel_args_copy(args_);
679
- result_handler()->ReturnResult(std::move(result));
844
+ result_handler_->ReturnResult(std::move(result));
680
845
  }
681
846
 
682
- grpc_error* XdsResolver::CreateServiceConfig(
847
+ grpc_error_handle XdsResolver::CreateServiceConfig(
683
848
  RefCountedPtr<ServiceConfig>* service_config) {
684
849
  std::vector<std::string> clusters;
685
850
  for (const auto& cluster : cluster_state_map_) {
@@ -706,18 +871,17 @@ grpc_error* XdsResolver::CreateServiceConfig(
706
871
  " ]\n"
707
872
  "}");
708
873
  std::string json = absl::StrJoin(config_parts, "");
709
- grpc_error* error = GRPC_ERROR_NONE;
874
+ grpc_error_handle error = GRPC_ERROR_NONE;
710
875
  *service_config = ServiceConfig::Create(args_, json.c_str(), &error);
711
876
  return error;
712
877
  }
713
878
 
714
879
  void XdsResolver::GenerateResult() {
715
- if (current_update_.empty()) return;
880
+ if (current_virtual_host_.routes.empty()) return;
716
881
  // First create XdsConfigSelector, which may add new entries to the cluster
717
882
  // state map, and then CreateServiceConfig for LB policies.
718
- grpc_error* error = GRPC_ERROR_NONE;
719
- auto config_selector =
720
- MakeRefCounted<XdsConfigSelector>(Ref(), current_update_, error);
883
+ grpc_error_handle error = GRPC_ERROR_NONE;
884
+ auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
721
885
  if (error != GRPC_ERROR_NONE) {
722
886
  OnError(error);
723
887
  return;
@@ -732,9 +896,13 @@ void XdsResolver::GenerateResult() {
732
896
  gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s", this,
733
897
  result.service_config->json_string().c_str());
734
898
  }
735
- grpc_arg new_arg = config_selector->MakeChannelArg();
736
- result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
737
- result_handler()->ReturnResult(std::move(result));
899
+ grpc_arg new_args[] = {
900
+ xds_client_->MakeChannelArg(),
901
+ config_selector->MakeChannelArg(),
902
+ };
903
+ result.args =
904
+ grpc_channel_args_copy_and_add(args_, new_args, GPR_ARRAY_SIZE(new_args));
905
+ result_handler_->ReturnResult(std::move(result));
738
906
  }
739
907
 
740
908
  void XdsResolver::MaybeRemoveUnusedClusters() {