grpc 1.45.0 → 1.47.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 (859) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +69 -110
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  10. data/include/grpc/impl/codegen/port_platform.h +100 -36
  11. data/include/grpc/impl/codegen/slice.h +1 -1
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +297 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +125 -0
  14. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  15. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  17. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  18. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  19. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  20. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  21. data/src/core/ext/filters/client_channel/client_channel.cc +223 -113
  22. data/src/core/ext/filters/client_channel/client_channel.h +28 -6
  23. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  24. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  25. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  26. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  27. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  28. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  29. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  30. data/src/core/ext/filters/client_channel/connector.h +8 -2
  31. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  32. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  34. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  35. data/src/core/ext/filters/client_channel/health/health_check_client.cc +138 -582
  36. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +98 -112
  38. data/src/core/ext/filters/client_channel/http_proxy.h +20 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  50. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  55. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +277 -195
  56. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +158 -101
  57. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +46 -20
  59. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  60. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  61. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +117 -63
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +142 -63
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +37 -10
  66. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +300 -291
  67. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  68. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  69. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  70. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  71. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  72. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  73. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  75. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  76. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  77. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +226 -300
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  85. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  86. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -220
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  90. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  91. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +213 -0
  92. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +113 -0
  93. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  94. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +182 -79
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  97. data/src/core/ext/filters/client_channel/retry_filter.cc +60 -5
  98. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  99. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  100. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  101. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  102. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  103. data/src/core/ext/filters/client_channel/subchannel.cc +161 -165
  104. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  105. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  106. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  107. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  108. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  109. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +558 -0
  110. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +226 -0
  111. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  112. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +123 -366
  113. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  114. data/src/core/ext/filters/http/client/http_client_filter.cc +87 -458
  115. data/src/core/ext/filters/http/client/http_client_filter.h +27 -4
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -31
  117. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  118. data/src/core/ext/filters/http/http_filters_plugin.cc +16 -14
  119. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -361
  122. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  124. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  125. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  126. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  127. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  128. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  129. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +102 -135
  130. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -19
  132. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  133. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +205 -45
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  139. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  140. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  141. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  143. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  144. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  145. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  146. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  147. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  148. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  149. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  150. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +14 -3
  152. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  153. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  154. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  155. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +13 -15
  156. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  158. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  160. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  161. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  162. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  164. data/src/core/ext/transport/chttp2/transport/internal.h +28 -5
  165. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -6
  166. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  167. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  168. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  169. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  170. data/src/core/ext/transport/chttp2/transport/writing.cc +62 -15
  171. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  172. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  173. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  174. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  175. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  176. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  177. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  178. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  179. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  180. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  181. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  182. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  183. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  184. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  185. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  186. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  187. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  188. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  189. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  190. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  191. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  192. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  193. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  194. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  195. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  196. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  197. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  198. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  199. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  200. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  201. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  202. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  203. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  204. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  206. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  207. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  208. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  209. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  210. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  211. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  212. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  213. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  214. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  215. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  216. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  217. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  218. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  219. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  220. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  221. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  222. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  223. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  224. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  225. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  226. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  227. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  228. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  229. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  230. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  231. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  232. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  233. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  234. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  235. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  236. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  237. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  238. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  239. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  240. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  241. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  242. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  243. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  244. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  245. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  246. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  247. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  248. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  249. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  250. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  251. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  252. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  253. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  254. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  255. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  256. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  257. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  258. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  259. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  260. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  261. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  262. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  263. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  264. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  265. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  266. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  267. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  268. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  269. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  270. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  271. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  272. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  273. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  274. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  275. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  276. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  277. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  278. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  279. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  280. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  281. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  282. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  283. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  284. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  285. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  286. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  287. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  288. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  289. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  290. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  291. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  292. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  293. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  294. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  295. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  296. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  297. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  298. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  299. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  300. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  301. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  302. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  303. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  304. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  305. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  306. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  307. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  308. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  309. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  310. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  311. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  312. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  313. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  314. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  315. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  316. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  317. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  318. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  319. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  320. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  321. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  322. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  323. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  324. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  325. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  326. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  327. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  328. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  329. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  330. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  331. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  332. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  333. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  334. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  335. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  336. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  337. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  338. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  339. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  340. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  341. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  342. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  343. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  344. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  345. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  346. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  347. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  348. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  349. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  350. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  351. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  352. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  353. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  354. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  355. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  356. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  357. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  358. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  359. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  360. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  361. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  362. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  363. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  364. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  365. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  366. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  367. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  368. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  369. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  370. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  371. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  372. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  373. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  374. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  375. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  376. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  377. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  378. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  379. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  380. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  381. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  382. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  383. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  384. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  385. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  386. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  387. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  388. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  389. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  390. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  391. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  392. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  393. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  394. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  395. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  396. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  397. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  398. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  399. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  400. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  401. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  402. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  403. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  404. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  405. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  406. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  407. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  408. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  409. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  410. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  411. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  412. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  413. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  414. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  415. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  416. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  417. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  418. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  419. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  420. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  421. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  422. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  423. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  424. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  425. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  426. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  427. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  428. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  429. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  430. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  431. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  432. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  433. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  434. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  435. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  436. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  437. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  438. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  439. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  440. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  441. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  442. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  443. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  444. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  445. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  446. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  447. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  448. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  449. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  450. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  451. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  452. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  453. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  454. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  456. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  457. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  458. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  459. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  460. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  461. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  462. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  463. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  464. data/src/core/ext/xds/certificate_provider_store.cc +10 -0
  465. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  466. data/src/core/ext/xds/xds_api.cc +20 -0
  467. data/src/core/ext/xds/xds_bootstrap.cc +2 -2
  468. data/src/core/ext/xds/xds_bootstrap.h +2 -0
  469. data/src/core/ext/xds/xds_certificate_provider.cc +5 -0
  470. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  471. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  472. data/src/core/ext/xds/xds_client.cc +125 -109
  473. data/src/core/ext/xds/xds_client.h +13 -5
  474. data/src/core/ext/xds/xds_cluster.cc +106 -16
  475. data/src/core/ext/xds/xds_cluster.h +3 -0
  476. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  477. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  478. data/src/core/ext/xds/xds_common_types.cc +9 -9
  479. data/src/core/ext/xds/xds_common_types.h +3 -3
  480. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  481. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -4
  482. data/src/core/ext/xds/xds_listener.cc +20 -10
  483. data/src/core/ext/xds/xds_route_config.cc +162 -25
  484. data/src/core/ext/xds/xds_route_config.h +13 -10
  485. data/src/core/ext/xds/xds_server_config_fetcher.cc +19 -23
  486. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  487. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  488. data/src/core/lib/avl/avl.h +71 -6
  489. data/src/core/lib/channel/call_finalization.h +4 -0
  490. data/src/core/lib/channel/call_tracer.h +12 -3
  491. data/src/core/lib/channel/channel_args.cc +179 -81
  492. data/src/core/lib/channel/channel_args.h +242 -11
  493. data/src/core/lib/channel/channel_args_preconditioning.cc +5 -11
  494. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  495. data/src/core/lib/channel/channel_stack.cc +41 -3
  496. data/src/core/lib/channel/channel_stack.h +51 -8
  497. data/src/core/lib/channel/channel_stack_builder.cc +9 -84
  498. data/src/core/lib/channel/channel_stack_builder.h +35 -26
  499. data/src/core/lib/channel/channel_stack_builder_impl.cc +97 -0
  500. data/src/core/lib/channel/channel_stack_builder_impl.h +45 -0
  501. data/src/core/lib/channel/channel_trace.cc +8 -13
  502. data/src/core/lib/channel/channel_trace.h +6 -3
  503. data/src/core/lib/channel/channelz.cc +8 -13
  504. data/src/core/lib/channel/channelz.h +13 -4
  505. data/src/core/lib/channel/channelz_registry.cc +7 -14
  506. data/src/core/lib/channel/channelz_registry.h +10 -9
  507. data/src/core/lib/channel/connected_channel.cc +21 -31
  508. data/src/core/lib/channel/connected_channel.h +2 -0
  509. data/src/core/lib/channel/promise_based_filter.cc +848 -260
  510. data/src/core/lib/channel/promise_based_filter.h +215 -68
  511. data/src/core/lib/channel/status_util.cc +2 -0
  512. data/src/core/lib/channel/status_util.h +0 -3
  513. data/src/core/lib/compression/compression_internal.cc +46 -17
  514. data/src/core/lib/compression/compression_internal.h +1 -1
  515. data/src/core/lib/config/core_configuration.cc +3 -0
  516. data/src/core/lib/config/core_configuration.h +2 -1
  517. data/src/core/lib/debug/stats_data.cc +2 -6
  518. data/src/core/lib/debug/stats_data.h +18 -21
  519. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  520. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  521. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  522. data/src/core/lib/event_engine/event_engine.cc +12 -2
  523. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  524. data/src/core/lib/event_engine/handle_containers.h +67 -0
  525. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  526. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  527. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  528. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  529. data/src/core/lib/event_engine/slice.cc +102 -0
  530. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  531. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/event_engine/trace.cc} +3 -11
  532. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  533. data/src/core/lib/gpr/log.cc +5 -0
  534. data/src/core/lib/gpr/tls.h +4 -5
  535. data/src/core/lib/gprpp/bitset.h +17 -1
  536. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  537. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  538. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  539. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  540. data/src/core/lib/gprpp/examine_stack.h +0 -1
  541. data/src/core/lib/gprpp/fork.cc +3 -6
  542. data/src/core/lib/gprpp/global_config.h +2 -4
  543. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  544. data/src/core/lib/gprpp/global_config_env.h +3 -1
  545. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  546. data/src/core/lib/gprpp/host_port.cc +2 -0
  547. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  548. data/src/core/lib/gprpp/match.h +75 -0
  549. data/src/core/lib/gprpp/memory.h +1 -5
  550. data/src/core/lib/gprpp/orphanable.h +1 -4
  551. data/src/core/lib/gprpp/overload.h +59 -0
  552. data/src/core/lib/gprpp/ref_counted.h +3 -3
  553. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  554. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  555. data/src/core/lib/gprpp/stat.h +0 -2
  556. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  557. data/src/core/lib/gprpp/status_helper.cc +25 -5
  558. data/src/core/lib/gprpp/status_helper.h +4 -0
  559. data/src/core/lib/gprpp/sync.h +3 -1
  560. data/src/core/lib/gprpp/table.h +10 -0
  561. data/src/core/lib/gprpp/thd.h +2 -5
  562. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  563. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  564. data/src/core/lib/gprpp/time.cc +20 -0
  565. data/src/core/lib/gprpp/time.h +7 -2
  566. data/src/core/lib/gprpp/time_util.cc +4 -0
  567. data/src/core/lib/gprpp/time_util.h +1 -1
  568. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  569. data/src/core/lib/http/format_request.cc +30 -2
  570. data/src/core/lib/http/format_request.h +2 -0
  571. data/src/core/lib/http/httpcli.cc +88 -81
  572. data/src/core/lib/http/httpcli.h +39 -7
  573. data/src/core/lib/http/httpcli_security_connector.cc +6 -7
  574. data/src/core/lib/http/parser.cc +80 -9
  575. data/src/core/lib/http/parser.h +14 -1
  576. data/src/core/lib/iomgr/endpoint.cc +4 -4
  577. data/src/core/lib/iomgr/endpoint.h +6 -4
  578. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  579. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  580. data/src/core/lib/iomgr/ev_posix.cc +7 -11
  581. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  582. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  583. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  584. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  585. data/src/core/lib/iomgr/iomgr.cc +0 -1
  586. data/src/core/lib/iomgr/{event_engine/pollset.h → iomgr_fwd.h} +9 -9
  587. data/src/core/lib/iomgr/pollset_set.h +1 -2
  588. data/src/core/lib/iomgr/port.h +25 -8
  589. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  590. data/src/core/lib/iomgr/resolve_address.h +21 -14
  591. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  592. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  593. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  594. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  595. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  596. data/src/core/lib/iomgr/sockaddr.h +2 -3
  597. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  598. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  599. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  600. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  601. data/src/core/lib/iomgr/tcp_client_posix.cc +14 -7
  602. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  603. data/src/core/lib/iomgr/tcp_posix.cc +77 -37
  604. data/src/core/lib/iomgr/tcp_server_posix.cc +50 -27
  605. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  606. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  607. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  608. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  609. data/src/core/lib/json/json.h +1 -2
  610. data/src/core/lib/json/json_reader.cc +9 -1
  611. data/src/core/lib/json/json_util.cc +7 -0
  612. data/src/core/lib/json/json_util.h +13 -4
  613. data/src/core/lib/json/json_writer.cc +6 -1
  614. data/src/core/lib/promise/activity.cc +1 -1
  615. data/src/core/lib/promise/activity.h +6 -6
  616. data/src/core/lib/promise/arena_promise.h +11 -1
  617. data/src/core/lib/promise/call_push_pull.h +148 -0
  618. data/src/core/lib/promise/context.h +1 -1
  619. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  620. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  621. data/src/core/lib/promise/detail/status.h +2 -1
  622. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  623. data/src/core/lib/promise/latch.h +103 -0
  624. data/src/core/lib/promise/loop.h +1 -0
  625. data/src/core/lib/promise/race.h +0 -1
  626. data/src/core/lib/promise/seq.h +0 -2
  627. data/src/core/lib/promise/sleep.cc +2 -0
  628. data/src/core/lib/promise/sleep.h +10 -0
  629. data/src/core/lib/promise/try_seq.h +2 -2
  630. data/src/core/lib/resolver/resolver_factory.h +1 -2
  631. data/src/core/lib/resolver/server_address.cc +9 -3
  632. data/src/core/lib/resolver/server_address.h +4 -4
  633. data/src/core/lib/resource_quota/api.cc +19 -31
  634. data/src/core/lib/resource_quota/api.h +5 -2
  635. data/src/core/lib/resource_quota/arena.cc +0 -6
  636. data/src/core/lib/resource_quota/arena.h +1 -2
  637. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  638. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  639. data/src/core/lib/resource_quota/resource_quota.h +16 -0
  640. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  641. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  642. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  643. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -12
  644. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  645. data/src/core/lib/security/context/security_context.h +8 -1
  646. data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -5
  647. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  648. data/src/core/lib/security/credentials/call_creds_util.cc +5 -3
  649. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  650. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  651. data/src/core/lib/security/credentials/composite/composite_credentials.cc +19 -10
  652. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -9
  653. data/src/core/lib/security/credentials/credentials.h +29 -39
  654. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  655. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  656. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  657. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  658. data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -12
  659. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  660. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -13
  661. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +4 -4
  662. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -4
  663. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  664. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +28 -29
  665. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  666. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -3
  667. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  668. data/src/core/lib/security/credentials/local/local_credentials.cc +12 -6
  669. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  670. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +22 -10
  671. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  672. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -6
  673. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  674. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +12 -4
  675. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  676. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  677. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +47 -0
  678. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +34 -1
  679. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +66 -3
  680. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  681. data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -6
  682. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  683. data/src/core/lib/security/credentials/xds/xds_credentials.cc +57 -50
  684. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  685. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  686. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  687. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  688. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  689. data/src/core/lib/security/security_connector/security_connector.h +10 -1
  690. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -3
  691. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  692. data/src/core/lib/security/transport/auth_filters.h +7 -7
  693. data/src/core/lib/security/transport/client_auth_filter.cc +26 -20
  694. data/src/core/lib/security/transport/secure_endpoint.cc +213 -133
  695. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  696. data/src/core/lib/security/transport/security_handshaker.cc +11 -9
  697. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  698. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  699. data/src/core/lib/service_config/service_config.h +4 -8
  700. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  701. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  702. data/src/core/lib/service_config/service_config_impl.h +9 -2
  703. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  704. data/src/core/lib/service_config/service_config_parser.h +7 -0
  705. data/src/core/lib/slice/b64.cc +1 -1
  706. data/src/core/lib/slice/b64.h +2 -0
  707. data/src/core/lib/slice/percent_encoding.cc +4 -1
  708. data/src/core/lib/slice/percent_encoding.h +0 -6
  709. data/src/core/lib/slice/slice.cc +2 -1
  710. data/src/core/lib/slice/slice.h +10 -5
  711. data/src/core/lib/slice/slice_api.cc +1 -1
  712. data/src/core/lib/slice/slice_buffer.cc +50 -23
  713. data/src/core/lib/slice/slice_buffer.h +106 -0
  714. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_buffer_api.cc} +11 -12
  715. data/src/core/lib/slice/slice_internal.h +4 -3
  716. data/src/core/lib/slice/slice_refcount.h +2 -3
  717. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  718. data/src/core/lib/slice/slice_split.cc +3 -0
  719. data/src/core/lib/slice/slice_split.h +0 -4
  720. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  721. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  722. data/src/core/lib/surface/builtins.cc +7 -2
  723. data/src/core/lib/surface/byte_buffer.cc +7 -1
  724. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  725. data/src/core/lib/surface/call.cc +1052 -917
  726. data/src/core/lib/surface/call.h +16 -16
  727. data/src/core/lib/surface/call_details.cc +4 -4
  728. data/src/core/lib/surface/call_log_batch.cc +7 -1
  729. data/src/core/lib/surface/call_test_only.h +4 -1
  730. data/src/core/lib/surface/channel.cc +181 -243
  731. data/src/core/lib/surface/channel.h +94 -57
  732. data/src/core/lib/surface/channel_init.cc +2 -3
  733. data/src/core/lib/surface/channel_init.h +3 -5
  734. data/src/core/lib/surface/channel_ping.cc +8 -2
  735. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  736. data/src/core/lib/surface/channel_stack_type.h +0 -2
  737. data/src/core/lib/surface/completion_queue.cc +14 -6
  738. data/src/core/lib/surface/completion_queue.h +5 -1
  739. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  740. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  741. data/src/core/lib/surface/event_string.cc +1 -7
  742. data/src/core/lib/surface/event_string.h +1 -1
  743. data/src/core/lib/surface/init.cc +17 -45
  744. data/src/core/lib/surface/init.h +0 -8
  745. data/src/core/lib/surface/lame_client.cc +64 -110
  746. data/src/core/lib/surface/lame_client.h +40 -2
  747. data/src/core/lib/surface/metadata_array.cc +2 -0
  748. data/src/core/lib/surface/server.cc +72 -70
  749. data/src/core/lib/surface/server.h +40 -11
  750. data/src/core/lib/surface/validate_metadata.cc +2 -5
  751. data/src/core/lib/surface/validate_metadata.h +3 -0
  752. data/src/core/lib/surface/version.cc +2 -2
  753. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  754. data/src/core/lib/transport/bdp_estimator.h +2 -3
  755. data/src/core/lib/transport/byte_stream.cc +6 -3
  756. data/src/core/lib/transport/byte_stream.h +5 -1
  757. data/src/core/lib/transport/connectivity_state.cc +6 -4
  758. data/src/core/lib/transport/connectivity_state.h +2 -3
  759. data/src/core/lib/transport/error_utils.cc +4 -2
  760. data/src/core/lib/transport/error_utils.h +5 -1
  761. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  762. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  763. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  764. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  765. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  766. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  767. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  768. data/src/core/lib/transport/metadata_batch.cc +287 -0
  769. data/src/core/lib/transport/metadata_batch.h +142 -269
  770. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  771. data/src/core/lib/transport/parsed_metadata.h +10 -3
  772. data/src/core/lib/transport/status_conversion.cc +2 -0
  773. data/src/core/lib/transport/status_conversion.h +2 -2
  774. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  775. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  776. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  777. data/src/core/lib/transport/timeout_encoding.h +5 -1
  778. data/src/core/lib/transport/transport.cc +18 -17
  779. data/src/core/lib/transport/transport.h +48 -7
  780. data/src/core/lib/transport/transport_impl.h +14 -3
  781. data/src/core/lib/transport/transport_op_string.cc +9 -10
  782. data/src/core/lib/uri/uri_parser.cc +11 -3
  783. data/src/core/lib/uri/uri_parser.h +0 -2
  784. data/src/core/plugin_registry/grpc_plugin_registry.cc +13 -4
  785. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  786. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  787. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  788. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  789. data/src/core/tsi/ssl_transport_security.cc +75 -38
  790. data/src/core/tsi/ssl_transport_security.h +8 -2
  791. data/src/core/tsi/transport_security_interface.h +2 -0
  792. data/src/ruby/ext/grpc/extconf.rb +2 -2
  793. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  794. data/src/ruby/lib/grpc/grpc.rb +1 -1
  795. data/src/ruby/lib/grpc/version.rb +1 -1
  796. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  797. data/src/ruby/pb/test/client.rb +769 -0
  798. data/src/ruby/pb/test/server.rb +252 -0
  799. data/src/ruby/pb/test/xds_client.rb +415 -0
  800. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  801. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  802. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  803. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  804. data/third_party/upb/upb/decode.c +32 -16
  805. data/third_party/upb/upb/def.c +118 -55
  806. data/third_party/upb/upb/def.h +12 -3
  807. data/third_party/upb/upb/encode.c +14 -8
  808. data/third_party/upb/upb/json_encode.c +776 -0
  809. data/third_party/upb/upb/json_encode.h +62 -0
  810. data/third_party/upb/upb/msg.c +5 -7
  811. data/third_party/upb/upb/msg.h +1 -2
  812. data/third_party/upb/upb/msg_internal.h +49 -36
  813. data/third_party/upb/upb/port_def.inc +8 -0
  814. data/third_party/upb/upb/port_undef.inc +1 -0
  815. data/third_party/upb/upb/table.c +10 -6
  816. data/third_party/upb/upb/table_internal.h +2 -0
  817. data/third_party/upb/upb/upb.h +41 -11
  818. data/third_party/zlib/crc32.c +966 -292
  819. data/third_party/zlib/crc32.h +9441 -436
  820. data/third_party/zlib/deflate.c +78 -30
  821. data/third_party/zlib/deflate.h +12 -15
  822. data/third_party/zlib/gzguts.h +3 -2
  823. data/third_party/zlib/gzlib.c +5 -3
  824. data/third_party/zlib/gzread.c +5 -7
  825. data/third_party/zlib/gzwrite.c +25 -13
  826. data/third_party/zlib/infback.c +2 -1
  827. data/third_party/zlib/inffast.c +14 -14
  828. data/third_party/zlib/inflate.c +39 -8
  829. data/third_party/zlib/inflate.h +3 -2
  830. data/third_party/zlib/inftrees.c +3 -3
  831. data/third_party/zlib/trees.c +27 -48
  832. data/third_party/zlib/zlib.h +123 -100
  833. data/third_party/zlib/zutil.c +2 -2
  834. data/third_party/zlib/zutil.h +12 -9
  835. metadata +100 -72
  836. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  837. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
  838. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  839. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  840. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  841. data/src/core/lib/event_engine/sockaddr.h +0 -44
  842. data/src/core/lib/gprpp/capture.h +0 -76
  843. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  844. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  845. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  846. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  847. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  848. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  849. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  850. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  851. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  852. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  853. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  854. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  855. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  856. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  857. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  858. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  859. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -38,6 +38,7 @@
38
38
  #include "src/core/ext/xds/xds_channel_args.h"
39
39
  #include "src/core/ext/xds/xds_client_stats.h"
40
40
  #include "src/core/ext/xds/xds_cluster.h"
41
+ #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
41
42
  #include "src/core/ext/xds/xds_endpoint.h"
42
43
  #include "src/core/ext/xds/xds_http_filters.h"
43
44
  #include "src/core/ext/xds/xds_listener.h"
@@ -83,43 +84,6 @@ char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
83
84
 
84
85
  } // namespace
85
86
 
86
- class XdsClient::Notifier {
87
- public:
88
- // Helper template function to invoke `OnError()` on a list of watchers \a
89
- // watchers_list within \a work_serializer. Works with all 4 resource types.
90
- template <class T>
91
- static void ScheduleNotifyWatchersOnErrorInWorkSerializer(
92
- XdsClient* xds_client, const T& watchers_list, grpc_error_handle error,
93
- const DebugLocation& location) {
94
- xds_client->work_serializer_.Schedule(
95
- [watchers_list, error]()
96
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
97
- for (const auto& p : watchers_list) {
98
- p.first->OnError(GRPC_ERROR_REF(error));
99
- }
100
- GRPC_ERROR_UNREF(error);
101
- },
102
- location);
103
- }
104
-
105
- // Helper template function to invoke `OnResourceDoesNotExist()` on a list of
106
- // watchers \a watchers_list within \a work_serializer. Works with all 4
107
- // resource types.
108
- template <class T>
109
- static void ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
110
- XdsClient* xds_client, const T& watchers_list,
111
- const DebugLocation& location) {
112
- xds_client->work_serializer_.Schedule(
113
- [watchers_list]()
114
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
115
- for (const auto& p : watchers_list) {
116
- p.first->OnResourceDoesNotExist();
117
- }
118
- },
119
- location);
120
- }
121
- };
122
-
123
87
  //
124
88
  // Internal class declarations
125
89
  //
@@ -177,7 +141,8 @@ class XdsClient::ChannelState::AdsCallState
177
141
  XdsClient* xds_client() const { return chand()->xds_client(); }
178
142
  bool seen_response() const { return seen_response_; }
179
143
 
180
- void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name)
144
+ void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
145
+ bool delay_send)
181
146
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
182
147
  void UnsubscribeLocked(const XdsResourceType* type,
183
148
  const XdsResourceName& name, bool delay_unsubscription)
@@ -233,9 +198,20 @@ class XdsClient::ChannelState::AdsCallState
233
198
  Unref(DEBUG_LOCATION, "Orphan");
234
199
  }
235
200
 
236
- void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
237
- if (timer_started_) return;
238
- timer_started_ = true;
201
+ void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
202
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
203
+ if (!timer_start_needed_) return;
204
+ timer_start_needed_ = false;
205
+ // Check if we already have a cached version of this resource
206
+ // (i.e., if this is the initial request for the resource after an
207
+ // ADS stream restart). If so, we don't start the timer, because
208
+ // (a) we already have the resource and (b) the server may
209
+ // optimize by not resending the resource that we already have.
210
+ auto& authority_state =
211
+ ads_calld->xds_client()->authority_state_map_[name_.authority];
212
+ ResourceState& state = authority_state.resource_map[type_][name_.key];
213
+ if (state.resource != nullptr) return;
214
+ // Start timer.
239
215
  ads_calld_ = std::move(ads_calld);
240
216
  Ref(DEBUG_LOCATION, "timer").release();
241
217
  timer_pending_ = true;
@@ -246,6 +222,18 @@ class XdsClient::ChannelState::AdsCallState
246
222
  }
247
223
 
248
224
  void MaybeCancelTimer() {
225
+ // If the timer hasn't been started yet, make sure we don't start
226
+ // it later. This can happen if the last watch for an LDS or CDS
227
+ // resource is cancelled and then restarted, both while an ADS
228
+ // request for a different resource type is being sent (causing
229
+ // the unsubscription and then resubscription requests to be
230
+ // queued), and then we get a response for the LDS or CDS resource.
231
+ // In that case, we would call MaybeCancelTimer() when we receive the
232
+ // response and then MaybeStartTimer() when we finally send the new
233
+ // LDS or CDS request, thus causing the timer to fire when it shouldn't.
234
+ // For details, see https://github.com/grpc/grpc/issues/29583.
235
+ // TODO(roth): Find a way to write a test for this case.
236
+ timer_start_needed_ = false;
249
237
  if (timer_pending_) {
250
238
  grpc_timer_cancel(&timer_);
251
239
  timer_pending_ = false;
@@ -268,27 +256,23 @@ class XdsClient::ChannelState::AdsCallState
268
256
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
269
257
  if (error == GRPC_ERROR_NONE && timer_pending_) {
270
258
  timer_pending_ = false;
271
- grpc_error_handle watcher_error =
272
- GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
273
- "timeout obtaining resource {type=%s name=%s} from xds server",
274
- type_->type_url(),
275
- XdsClient::ConstructFullXdsResourceName(
276
- name_.authority, type_->type_url(), name_.key)));
277
- watcher_error = grpc_error_set_int(
278
- watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
279
259
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
280
- gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
260
+ gpr_log(GPR_INFO,
261
+ "[xds_client %p] xds server %s: timeout obtaining resource "
262
+ "{type=%s name=%s} from xds server",
281
263
  ads_calld_->xds_client(),
282
264
  ads_calld_->chand()->server_.server_uri.c_str(),
283
- grpc_error_std_string(watcher_error).c_str());
265
+ std::string(type_->type_url()).c_str(),
266
+ XdsClient::ConstructFullXdsResourceName(
267
+ name_.authority, type_->type_url(), name_.key)
268
+ .c_str());
284
269
  }
285
270
  auto& authority_state =
286
271
  ads_calld_->xds_client()->authority_state_map_[name_.authority];
287
272
  ResourceState& state = authority_state.resource_map[type_][name_.key];
288
273
  state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
289
- Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
290
- ads_calld_->xds_client(), state.watchers, watcher_error,
291
- DEBUG_LOCATION);
274
+ ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
275
+ state.watchers);
292
276
  }
293
277
  GRPC_ERROR_UNREF(error);
294
278
  }
@@ -297,7 +281,7 @@ class XdsClient::ChannelState::AdsCallState
297
281
  const XdsResourceName name_;
298
282
 
299
283
  RefCountedPtr<AdsCallState> ads_calld_;
300
- bool timer_started_ = false;
284
+ bool timer_start_needed_ = true;
301
285
  bool timer_pending_ = false;
302
286
  grpc_timer timer_;
303
287
  grpc_closure timer_callback_;
@@ -333,7 +317,8 @@ class XdsClient::ChannelState::AdsCallState
333
317
 
334
318
  // Constructs a list of resource names of a given type for an ADS
335
319
  // request. Also starts the timer for each resource if needed.
336
- std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
320
+ std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type)
321
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
337
322
 
338
323
  // The owning RetryableCall<>.
339
324
  RefCountedPtr<RetryableCall<AdsCallState>> parent_;
@@ -495,7 +480,7 @@ class XdsClient::ChannelState::StateWatcher
495
480
  parent_->xds_client(), parent_->server_.server_uri.c_str(),
496
481
  status.ToString().c_str());
497
482
  parent_->xds_client_->NotifyOnErrorLocked(
498
- GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
483
+ absl::UnavailableError(absl::StrCat(
499
484
  "xds channel in TRANSIENT_FAILURE, connectivity error: ",
500
485
  status.ToString())));
501
486
  }
@@ -594,7 +579,7 @@ namespace {
594
579
  bool IsLameChannel(grpc_channel* channel) {
595
580
  grpc_channel_element* elem =
596
581
  grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
597
- return elem->filter == &grpc_lame_filter;
582
+ return elem->filter == &LameClientFilter::kFilter;
598
583
  }
599
584
 
600
585
  } // namespace
@@ -602,10 +587,11 @@ bool IsLameChannel(grpc_channel* channel) {
602
587
  void XdsClient::ChannelState::StartConnectivityWatchLocked() {
603
588
  if (IsLameChannel(channel_)) {
604
589
  xds_client()->NotifyOnErrorLocked(
605
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds client has a lame channel"));
590
+ absl::UnavailableError("xds client has a lame channel"));
606
591
  return;
607
592
  }
608
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
593
+ ClientChannel* client_channel =
594
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
609
595
  GPR_ASSERT(client_channel != nullptr);
610
596
  watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
611
597
  client_channel->AddConnectivityWatcher(
@@ -617,7 +603,8 @@ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
617
603
  if (IsLameChannel(channel_)) {
618
604
  return;
619
605
  }
620
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
606
+ ClientChannel* client_channel =
607
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
621
608
  GPR_ASSERT(client_channel != nullptr);
622
609
  client_channel->RemoveConnectivityWatcher(watcher_);
623
610
  }
@@ -637,7 +624,7 @@ void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
637
624
  // because when the call is restarted it will resend all necessary requests.
638
625
  if (ads_calld() == nullptr) return;
639
626
  // Subscribe to this resource if the ADS call is active.
640
- ads_calld()->SubscribeLocked(type, name);
627
+ ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
641
628
  }
642
629
 
643
630
  void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
@@ -685,17 +672,11 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
685
672
 
686
673
  template <typename T>
687
674
  void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
688
- const bool seen_response = calld_->seen_response();
675
+ // If we saw a response on the current stream, reset backoff.
676
+ if (calld_->seen_response()) backoff_.Reset();
689
677
  calld_.reset();
690
- if (seen_response) {
691
- // If we lost connection to the xds server, reset backoff and restart the
692
- // call immediately.
693
- backoff_.Reset();
694
- StartNewCallLocked();
695
- } else {
696
- // If we failed to connect to the xds server, retry later.
697
- StartRetryTimerLocked();
698
- }
678
+ // Start retry timer.
679
+ StartRetryTimerLocked();
699
680
  }
700
681
 
701
682
  template <typename T>
@@ -833,7 +814,7 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
833
814
  }
834
815
  // Check the resource name.
835
816
  auto resource_name =
836
- XdsClient::ParseXdsResourceName(result->name, result_.type);
817
+ xds_client()->ParseXdsResourceName(result->name, result_.type);
837
818
  if (!resource_name.ok()) {
838
819
  result_.errors.emplace_back(absl::StrCat(
839
820
  "resource index ", idx, ": Cannot parse xDS resource name \"",
@@ -880,13 +861,10 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
880
861
  result_.errors.emplace_back(absl::StrCat(
881
862
  "resource index ", idx, ": ", result->name,
882
863
  ": validation error: ", result->resource.status().ToString()));
883
- Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
884
- xds_client(), resource_state.watchers,
885
- grpc_error_set_int(
886
- GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
887
- "invalid resource: ", result->resource.status().ToString())),
888
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
889
- DEBUG_LOCATION);
864
+ xds_client()->NotifyWatchersOnErrorLocked(
865
+ resource_state.watchers,
866
+ absl::UnavailableError(absl::StrCat(
867
+ "invalid resource: ", result->resource.status().ToString())));
890
868
  UpdateResourceMetadataNacked(result_.version,
891
869
  result->resource.status().ToString(),
892
870
  update_time_, &resource_state.meta);
@@ -988,10 +966,13 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
988
966
  const XdsResourceType* type = t.first;
989
967
  for (const auto& r : t.second) {
990
968
  const XdsResourceKey& resource_key = r.first;
991
- SubscribeLocked(type, {authority, resource_key});
969
+ SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
992
970
  }
993
971
  }
994
972
  }
973
+ for (const auto& p : state_map_) {
974
+ SendMessageLocked(p.first);
975
+ }
995
976
  // Op: recv initial metadata.
996
977
  op = ops;
997
978
  op->op = GRPC_OP_RECV_INITIAL_METADATA;
@@ -1106,11 +1087,11 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
1106
1087
  }
1107
1088
 
1108
1089
  void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
1109
- const XdsResourceType* type, const XdsResourceName& name) {
1090
+ const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
1110
1091
  auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
1111
1092
  if (state == nullptr) {
1112
1093
  state = MakeOrphanable<ResourceTimer>(type, name);
1113
- SendMessageLocked(type);
1094
+ if (!delay_send) SendMessageLocked(type);
1114
1095
  }
1115
1096
  }
1116
1097
 
@@ -1204,6 +1185,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1204
1185
  xds_client(), chand()->server_.server_uri.c_str(),
1205
1186
  status.ToString().c_str());
1206
1187
  } else {
1188
+ seen_response_ = true;
1207
1189
  AdsResponseParser::Result result = parser.TakeResult();
1208
1190
  // Update nonce.
1209
1191
  auto& state = state_map_[result.type];
@@ -1250,16 +1232,14 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1250
1232
  // instead.
1251
1233
  if (resource_state.resource == nullptr) continue;
1252
1234
  resource_state.resource.reset();
1253
- Notifier::
1254
- ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
1255
- xds_client(), resource_state.watchers, DEBUG_LOCATION);
1235
+ xds_client()->NotifyWatchersOnResourceDoesNotExist(
1236
+ resource_state.watchers);
1256
1237
  }
1257
1238
  }
1258
1239
  }
1259
1240
  }
1260
1241
  // If we had valid resources, update the version.
1261
1242
  if (result.have_valid_resources) {
1262
- seen_response_ = true;
1263
1243
  chand()->resource_type_version_map_[result.type] =
1264
1244
  std::move(result.version);
1265
1245
  // Start load reporting if needed.
@@ -1317,13 +1297,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1317
1297
  // Try to restart the call.
1318
1298
  parent_->OnCallFinishedLocked();
1319
1299
  // Send error to all watchers.
1320
- xds_client()->NotifyOnErrorLocked(
1321
- GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
1322
- "xDS call failed: xDS server: %s, ADS call status code=%d, "
1323
- "details='%s', error='%s'",
1324
- chand()->server_.server_uri, status_code_,
1325
- StringViewFromSlice(status_details_),
1326
- grpc_error_std_string(error))));
1300
+ xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
1301
+ "xDS call failed: xDS server: %s, ADS call status code=%d, "
1302
+ "details='%s', error='%s'",
1303
+ chand()->server_.server_uri, status_code_,
1304
+ StringViewFromSlice(status_details_), grpc_error_std_string(error))));
1327
1305
  }
1328
1306
  GRPC_ERROR_UNREF(error);
1329
1307
  }
@@ -1836,6 +1814,7 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
1836
1814
  bootstrap_(std::move(bootstrap)),
1837
1815
  args_(ModifyChannelArgs(args)),
1838
1816
  request_timeout_(GetRequestTimeout(args)),
1817
+ xds_federation_enabled_(XdsFederationEnabled()),
1839
1818
  interested_parties_(grpc_pollset_set_create()),
1840
1819
  certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
1841
1820
  bootstrap_->certificate_providers())),
@@ -1895,7 +1874,7 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1895
1874
  RefCountedPtr<ResourceWatcherInterface> watcher) {
1896
1875
  ResourceWatcherInterface* w = watcher.get();
1897
1876
  // Lambda for handling failure cases.
1898
- auto fail = [&](grpc_error_handle error) mutable {
1877
+ auto fail = [&](absl::Status status) mutable {
1899
1878
  {
1900
1879
  MutexLock lock(&mu_);
1901
1880
  MaybeRegisterResourceTypeLocked(type);
@@ -1904,14 +1883,14 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1904
1883
  work_serializer_.Run(
1905
1884
  // TODO(yashykt): When we move to C++14, capture watcher using
1906
1885
  // std::move()
1907
- [watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1908
- watcher->OnError(error);
1886
+ [watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1887
+ watcher->OnError(status);
1909
1888
  },
1910
1889
  DEBUG_LOCATION);
1911
1890
  };
1912
1891
  auto resource_name = ParseXdsResourceName(name, type);
1913
1892
  if (!resource_name.ok()) {
1914
- fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
1893
+ fail(absl::UnavailableError(absl::StrFormat(
1915
1894
  "Unable to parse resource name for listener %s", name)));
1916
1895
  return;
1917
1896
  }
@@ -1921,7 +1900,7 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1921
1900
  if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
1922
1901
  auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
1923
1902
  if (authority == nullptr) {
1924
- fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(
1903
+ fail(absl::UnavailableError(
1925
1904
  absl::StrCat("authority \"", authority_name,
1926
1905
  "\" not present in bootstrap config")));
1927
1906
  return;
@@ -1972,12 +1951,11 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
1972
1951
  bool delay_unsubscription) {
1973
1952
  auto resource_name = ParseXdsResourceName(name, type);
1974
1953
  MutexLock lock(&mu_);
1975
- if (!resource_name.ok()) {
1976
- invalid_watchers_.erase(watcher);
1977
- return;
1978
- }
1979
- if (shutting_down_) return;
1954
+ // We cannot be sure whether the watcher is in invalid_watchers_ or in
1955
+ // authority_state_map_, so we check both, just to be safe.
1956
+ invalid_watchers_.erase(watcher);
1980
1957
  // Find authority.
1958
+ if (!resource_name.ok()) return;
1981
1959
  auto authority_it = authority_state_map_.find(resource_name->authority);
1982
1960
  if (authority_it == authority_state_map_.end()) return;
1983
1961
  AuthorityState& authority_state = authority_it->second;
@@ -2030,7 +2008,7 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
2030
2008
  absl::string_view name, const XdsResourceType* type) {
2031
2009
  // Old-style names use the empty string for authority.
2032
2010
  // authority is prefixed with "old:" to indicate that it's an old-style name.
2033
- if (!absl::StartsWith(name, "xdstp:")) {
2011
+ if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
2034
2012
  return XdsResourceName{"old:", {std::string(name), {}}};
2035
2013
  }
2036
2014
  // New style name. Parse URI.
@@ -2202,7 +2180,13 @@ void XdsClient::ResetBackoff() {
2202
2180
  }
2203
2181
  }
2204
2182
 
2205
- void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
2183
+ void XdsClient::NotifyOnErrorLocked(absl::Status status) {
2184
+ const auto* node = bootstrap_->node();
2185
+ if (node != nullptr) {
2186
+ status = absl::Status(
2187
+ status.code(), absl::StrCat(status.message(),
2188
+ " (node ID:", bootstrap_->node()->id, ")"));
2189
+ }
2206
2190
  std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
2207
2191
  for (const auto& a : authority_state_map_) { // authority
2208
2192
  for (const auto& t : a.second.resource_map) { // type
@@ -2216,11 +2200,41 @@ void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
2216
2200
  work_serializer_.Schedule(
2217
2201
  // TODO(yashykt): When we move to C++14, capture watchers using
2218
2202
  // std::move()
2219
- [watchers, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
2203
+ [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
2220
2204
  for (const auto& watcher : watchers) {
2221
- watcher->OnError(GRPC_ERROR_REF(error));
2205
+ watcher->OnError(status);
2206
+ }
2207
+ },
2208
+ DEBUG_LOCATION);
2209
+ }
2210
+
2211
+ void XdsClient::NotifyWatchersOnErrorLocked(
2212
+ const std::map<ResourceWatcherInterface*,
2213
+ RefCountedPtr<ResourceWatcherInterface>>& watchers,
2214
+ absl::Status status) {
2215
+ const auto* node = bootstrap_->node();
2216
+ if (node != nullptr) {
2217
+ status = absl::Status(
2218
+ status.code(), absl::StrCat(status.message(),
2219
+ " (node ID:", bootstrap_->node()->id, ")"));
2220
+ }
2221
+ work_serializer_.Schedule(
2222
+ [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
2223
+ for (const auto& p : watchers) {
2224
+ p.first->OnError(status);
2225
+ }
2226
+ },
2227
+ DEBUG_LOCATION);
2228
+ }
2229
+
2230
+ void XdsClient::NotifyWatchersOnResourceDoesNotExist(
2231
+ const std::map<ResourceWatcherInterface*,
2232
+ RefCountedPtr<ResourceWatcherInterface>>& watchers) {
2233
+ work_serializer_.Schedule(
2234
+ [watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
2235
+ for (const auto& p : watchers) {
2236
+ p.first->OnResourceDoesNotExist();
2222
2237
  }
2223
- GRPC_ERROR_UNREF(error);
2224
2238
  },
2225
2239
  DEBUG_LOCATION);
2226
2240
  }
@@ -2338,6 +2352,7 @@ std::string XdsClient::DumpClientConfigBinary() {
2338
2352
  void XdsClientGlobalInit() {
2339
2353
  g_mu = new Mutex;
2340
2354
  XdsHttpFilterRegistry::Init();
2355
+ XdsClusterSpecifierPluginRegistry::Init();
2341
2356
  }
2342
2357
 
2343
2358
  // TODO(roth): Find a better way to clear the fallback config that does
@@ -2348,6 +2363,7 @@ void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
2348
2363
  delete g_mu;
2349
2364
  g_mu = nullptr;
2350
2365
  XdsHttpFilterRegistry::Shutdown();
2366
+ XdsClusterSpecifierPluginRegistry::Shutdown();
2351
2367
  }
2352
2368
 
2353
2369
  namespace {
@@ -55,7 +55,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
55
55
  virtual void OnGenericResourceChanged(
56
56
  const XdsResourceType::ResourceData* resource)
57
57
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
58
- virtual void OnError(grpc_error_handle error)
58
+ virtual void OnError(absl::Status status)
59
59
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
60
60
  virtual void OnResourceDoesNotExist()
61
61
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
@@ -266,11 +266,18 @@ class XdsClient : public DualRefCounted<XdsClient> {
266
266
  LoadReportMap load_report_map;
267
267
  };
268
268
 
269
- class Notifier;
270
-
271
269
  // Sends an error notification to all watchers.
272
- void NotifyOnErrorLocked(grpc_error_handle error)
270
+ void NotifyOnErrorLocked(absl::Status status)
273
271
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
272
+ // Sends an error notification to a specific set of watchers.
273
+ void NotifyWatchersOnErrorLocked(
274
+ const std::map<ResourceWatcherInterface*,
275
+ RefCountedPtr<ResourceWatcherInterface>>& watchers,
276
+ absl::Status status);
277
+ // Sends a resource-does-not-exist notification to a specific set of watchers.
278
+ void NotifyWatchersOnResourceDoesNotExist(
279
+ const std::map<ResourceWatcherInterface*,
280
+ RefCountedPtr<ResourceWatcherInterface>>& watchers);
274
281
 
275
282
  void MaybeRegisterResourceTypeLocked(const XdsResourceType* resource_type)
276
283
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
@@ -279,7 +286,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
279
286
  const XdsResourceType* GetResourceTypeLocked(absl::string_view resource_type)
280
287
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
281
288
 
282
- static absl::StatusOr<XdsResourceName> ParseXdsResourceName(
289
+ absl::StatusOr<XdsResourceName> ParseXdsResourceName(
283
290
  absl::string_view name, const XdsResourceType* type);
284
291
  static std::string ConstructFullXdsResourceName(
285
292
  absl::string_view authority, absl::string_view resource_type,
@@ -295,6 +302,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
295
302
  std::unique_ptr<XdsBootstrap> bootstrap_;
296
303
  grpc_channel_args* args_;
297
304
  const Duration request_timeout_;
305
+ const bool xds_federation_enabled_;
298
306
  grpc_pollset_set* interested_parties_;
299
307
  OrphanablePtr<CertificateProviderStore> certificate_provider_store_;
300
308
  XdsApi api_;
@@ -25,6 +25,7 @@
25
25
  #include "envoy/config/cluster/v3/circuit_breaker.upb.h"
26
26
  #include "envoy/config/cluster/v3/cluster.upb.h"
27
27
  #include "envoy/config/cluster/v3/cluster.upbdefs.h"
28
+ #include "envoy/config/cluster/v3/outlier_detection.upb.h"
28
29
  #include "envoy/config/core/v3/address.upb.h"
29
30
  #include "envoy/config/core/v3/base.upb.h"
30
31
  #include "envoy/config/core/v3/config_source.upb.h"
@@ -36,6 +37,8 @@
36
37
 
37
38
  #include <grpc/support/alloc.h>
38
39
 
40
+ #include "src/core/ext/xds/xds_common_types.h"
41
+ #include "src/core/ext/xds/xds_route_config.h"
39
42
  #include "src/core/lib/gpr/env.h"
40
43
  #include "src/core/lib/gpr/string.h"
41
44
  #include "src/core/lib/gprpp/host_port.h"
@@ -203,19 +206,6 @@ grpc_error_handle CdsLogicalDnsParse(
203
206
  return GRPC_ERROR_NONE;
204
207
  }
205
208
 
206
- // TODO(donnadionne): Check to see if cluster types aggregate_cluster and
207
- // logical_dns are enabled, this will be
208
- // removed once the cluster types are fully integration-tested and enabled by
209
- // default.
210
- bool XdsAggregateAndLogicalDnsClusterEnabled() {
211
- char* value = gpr_getenv(
212
- "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER");
213
- bool parsed_value;
214
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
215
- gpr_free(value);
216
- return parse_succeeded && parsed_value;
217
- }
218
-
219
209
  grpc_error_handle CdsResourceParse(
220
210
  const XdsEncodingContext& context,
221
211
  const envoy_config_cluster_v3_Cluster* cluster, bool /*is_v2*/,
@@ -247,9 +237,6 @@ grpc_error_handle CdsResourceParse(
247
237
  if (service_name.size != 0) {
248
238
  cds_update->eds_service_name = UpbStringToStdString(service_name);
249
239
  }
250
- } else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
251
- errors.push_back(
252
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
253
240
  } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
254
241
  envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
255
242
  cds_update->cluster_type = XdsClusterResource::ClusterType::LOGICAL_DNS;
@@ -398,6 +385,109 @@ grpc_error_handle CdsResourceParse(
398
385
  }
399
386
  }
400
387
  }
388
+ // As long as outlier detection field is present in the cluster update,
389
+ // we will end up with a outlier detection in the cluster resource which will
390
+ // lead to the creation of outlier detection in discovery mechanism. Values
391
+ // for outlier detection will be based on fields received and
392
+ // default values.
393
+ if (XdsOutlierDetectionEnabled() &&
394
+ envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
395
+ OutlierDetectionConfig outlier_detection_update;
396
+ const envoy_config_cluster_v3_OutlierDetection* outlier_detection =
397
+ envoy_config_cluster_v3_Cluster_outlier_detection(cluster);
398
+ const google_protobuf_Duration* duration =
399
+ envoy_config_cluster_v3_OutlierDetection_interval(outlier_detection);
400
+ if (duration != nullptr) {
401
+ outlier_detection_update.interval = ParseDuration(duration);
402
+ }
403
+ duration = envoy_config_cluster_v3_OutlierDetection_base_ejection_time(
404
+ outlier_detection);
405
+ if (duration != nullptr) {
406
+ outlier_detection_update.base_ejection_time = ParseDuration(duration);
407
+ }
408
+ duration = envoy_config_cluster_v3_OutlierDetection_max_ejection_time(
409
+ outlier_detection);
410
+ if (duration != nullptr) {
411
+ outlier_detection_update.max_ejection_time = ParseDuration(duration);
412
+ }
413
+ const google_protobuf_UInt32Value* max_ejection_percent =
414
+ envoy_config_cluster_v3_OutlierDetection_max_ejection_percent(
415
+ outlier_detection);
416
+ if (max_ejection_percent != nullptr) {
417
+ outlier_detection_update.max_ejection_percent =
418
+ google_protobuf_UInt32Value_value(max_ejection_percent);
419
+ }
420
+ const google_protobuf_UInt32Value* enforcing_success_rate =
421
+ envoy_config_cluster_v3_OutlierDetection_enforcing_success_rate(
422
+ outlier_detection);
423
+ if (enforcing_success_rate != nullptr) {
424
+ uint32_t enforcement_percentage =
425
+ google_protobuf_UInt32Value_value(enforcing_success_rate);
426
+ if (enforcement_percentage != 0) {
427
+ OutlierDetectionConfig::SuccessRateEjection success_rate_ejection;
428
+ success_rate_ejection.enforcement_percentage = enforcement_percentage;
429
+ const google_protobuf_UInt32Value* minimum_hosts =
430
+ envoy_config_cluster_v3_OutlierDetection_success_rate_minimum_hosts(
431
+ outlier_detection);
432
+ if (minimum_hosts != nullptr) {
433
+ success_rate_ejection.minimum_hosts =
434
+ google_protobuf_UInt32Value_value(minimum_hosts);
435
+ }
436
+ const google_protobuf_UInt32Value* request_volume =
437
+ envoy_config_cluster_v3_OutlierDetection_success_rate_request_volume(
438
+ outlier_detection);
439
+ if (request_volume != nullptr) {
440
+ success_rate_ejection.request_volume =
441
+ google_protobuf_UInt32Value_value(request_volume);
442
+ }
443
+ const google_protobuf_UInt32Value* stdev_factor =
444
+ envoy_config_cluster_v3_OutlierDetection_success_rate_stdev_factor(
445
+ outlier_detection);
446
+ if (stdev_factor != nullptr) {
447
+ success_rate_ejection.stdev_factor =
448
+ google_protobuf_UInt32Value_value(stdev_factor);
449
+ }
450
+ outlier_detection_update.success_rate_ejection = success_rate_ejection;
451
+ }
452
+ }
453
+ const google_protobuf_UInt32Value* enforcing_failure_percentage =
454
+ envoy_config_cluster_v3_OutlierDetection_enforcing_failure_percentage(
455
+ outlier_detection);
456
+ if (enforcing_failure_percentage != nullptr) {
457
+ uint32_t enforcement_percentage =
458
+ google_protobuf_UInt32Value_value(enforcing_failure_percentage);
459
+ if (enforcement_percentage != 0) {
460
+ OutlierDetectionConfig::FailurePercentageEjection
461
+ failure_percentage_ejection;
462
+ failure_percentage_ejection.enforcement_percentage =
463
+ enforcement_percentage;
464
+ const google_protobuf_UInt32Value* minimum_hosts =
465
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_minimum_hosts(
466
+ outlier_detection);
467
+ if (minimum_hosts != nullptr) {
468
+ failure_percentage_ejection.minimum_hosts =
469
+ google_protobuf_UInt32Value_value(minimum_hosts);
470
+ }
471
+ const google_protobuf_UInt32Value* request_volume =
472
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_request_volume(
473
+ outlier_detection);
474
+ if (request_volume != nullptr) {
475
+ failure_percentage_ejection.request_volume =
476
+ google_protobuf_UInt32Value_value(request_volume);
477
+ }
478
+ const google_protobuf_UInt32Value* threshold =
479
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_threshold(
480
+ outlier_detection);
481
+ if (threshold != nullptr) {
482
+ failure_percentage_ejection.threshold =
483
+ google_protobuf_UInt32Value_value(threshold);
484
+ }
485
+ outlier_detection_update.failure_percentage_ejection =
486
+ failure_percentage_ejection;
487
+ }
488
+ }
489
+ cds_update->outlier_detection = outlier_detection_update;
490
+ }
401
491
  return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS resource", &errors);
402
492
  }
403
493