grpc 1.46.2-x86_64-linux → 1.48.0.pre1-x86_64-linux

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 (816) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +138 -128
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +62 -18
  5. data/include/grpc/event_engine/memory_allocator.h +0 -15
  6. data/include/grpc/event_engine/port.h +1 -1
  7. data/include/grpc/event_engine/slice.h +286 -0
  8. data/include/grpc/event_engine/slice_buffer.h +118 -0
  9. data/include/grpc/grpc.h +3 -3
  10. data/include/grpc/grpc_security.h +11 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  13. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  14. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  15. data/include/grpc/impl/codegen/port_platform.h +106 -39
  16. data/include/grpc/impl/codegen/slice.h +1 -1
  17. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  18. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
  19. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
  20. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  21. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  22. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  23. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  24. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  25. data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
  26. data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
  27. data/src/core/ext/filters/client_channel/client_channel.h +43 -8
  28. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  30. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  31. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  32. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  33. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  34. data/src/core/ext/filters/client_channel/config_selector.h +8 -6
  35. data/src/core/ext/filters/client_channel/connector.h +9 -3
  36. data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
  37. data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  43. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
  61. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
  62. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
  63. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
  64. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
  73. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  74. data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
  75. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  76. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
  77. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  78. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  79. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  83. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  91. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  92. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  93. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
  94. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
  95. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  96. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
  97. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
  98. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  99. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
  100. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
  101. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  102. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
  103. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  104. data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
  105. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  106. data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
  107. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  108. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  109. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  110. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
  111. data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
  112. data/src/core/ext/filters/client_channel/subchannel.h +80 -36
  113. data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
  114. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  115. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  116. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  117. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
  118. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
  119. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
  120. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  121. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
  122. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  123. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  124. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  125. data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
  126. data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
  127. data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
  128. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  129. data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
  130. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
  135. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
  137. data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
  138. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
  139. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  140. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  141. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  142. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  143. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  144. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  145. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  146. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
  147. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  148. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
  149. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  150. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
  155. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  156. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  157. data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
  158. data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
  159. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  173. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  174. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  176. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
  177. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  178. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
  179. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  180. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  181. data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
  182. data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
  183. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  184. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  185. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  187. data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
  188. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  189. data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
  190. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  191. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  192. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  193. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  194. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  195. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  196. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  197. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  198. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  199. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  200. data/src/core/ext/xds/certificate_provider_store.cc +6 -2
  201. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  202. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  203. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  204. data/src/core/ext/xds/upb_utils.h +1 -2
  205. data/src/core/ext/xds/xds_api.cc +16 -18
  206. data/src/core/ext/xds/xds_api.h +12 -5
  207. data/src/core/ext/xds/xds_bootstrap.cc +39 -26
  208. data/src/core/ext/xds/xds_bootstrap.h +11 -11
  209. data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
  210. data/src/core/ext/xds/xds_certificate_provider.h +17 -2
  211. data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
  212. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  213. data/src/core/ext/xds/xds_client.cc +121 -46
  214. data/src/core/ext/xds/xds_client.h +19 -4
  215. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  216. data/src/core/ext/xds/xds_client_stats.h +4 -3
  217. data/src/core/ext/xds/xds_cluster.cc +126 -25
  218. data/src/core/ext/xds/xds_cluster.h +12 -1
  219. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  220. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  221. data/src/core/ext/xds/xds_common_types.cc +36 -22
  222. data/src/core/ext/xds/xds_common_types.h +12 -4
  223. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  224. data/src/core/ext/xds/xds_endpoint.h +13 -5
  225. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
  226. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  227. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  228. data/src/core/ext/xds/xds_http_filters.h +3 -3
  229. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  230. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  231. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  232. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  233. data/src/core/ext/xds/xds_listener.cc +70 -42
  234. data/src/core/ext/xds/xds_listener.h +10 -1
  235. data/src/core/ext/xds/xds_resource_type.h +3 -3
  236. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  237. data/src/core/ext/xds/xds_route_config.cc +56 -28
  238. data/src/core/ext/xds/xds_route_config.h +11 -2
  239. data/src/core/ext/xds/xds_routing.cc +16 -0
  240. data/src/core/ext/xds/xds_routing.h +7 -2
  241. data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
  242. data/src/core/lib/address_utils/parse_address.cc +5 -8
  243. data/src/core/lib/address_utils/parse_address.h +3 -2
  244. data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
  245. data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
  246. data/src/core/lib/avl/avl.h +6 -4
  247. data/src/core/lib/backoff/backoff.cc +1 -1
  248. data/src/core/lib/backoff/backoff.h +1 -1
  249. data/src/core/lib/channel/call_finalization.h +4 -0
  250. data/src/core/lib/channel/call_tracer.h +11 -5
  251. data/src/core/lib/channel/channel_args.cc +41 -22
  252. data/src/core/lib/channel/channel_args.h +34 -3
  253. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  254. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  255. data/src/core/lib/channel/channel_fwd.h +26 -0
  256. data/src/core/lib/channel/channel_stack.cc +45 -7
  257. data/src/core/lib/channel/channel_stack.h +45 -9
  258. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  259. data/src/core/lib/channel/channel_stack_builder.h +17 -32
  260. data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
  261. data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
  262. data/src/core/lib/channel/channel_trace.cc +8 -13
  263. data/src/core/lib/channel/channel_trace.h +6 -3
  264. data/src/core/lib/channel/channelz.cc +10 -14
  265. data/src/core/lib/channel/channelz.h +15 -7
  266. data/src/core/lib/channel/channelz_registry.cc +11 -19
  267. data/src/core/lib/channel/channelz_registry.h +10 -9
  268. data/src/core/lib/channel/connected_channel.cc +22 -31
  269. data/src/core/lib/channel/connected_channel.h +2 -0
  270. data/src/core/lib/channel/promise_based_filter.cc +451 -190
  271. data/src/core/lib/channel/promise_based_filter.h +162 -27
  272. data/src/core/lib/channel/status_util.cc +2 -0
  273. data/src/core/lib/channel/status_util.h +0 -3
  274. data/src/core/lib/compression/compression.cc +6 -1
  275. data/src/core/lib/compression/compression_internal.cc +48 -16
  276. data/src/core/lib/compression/compression_internal.h +4 -3
  277. data/src/core/lib/compression/message_compress.cc +3 -1
  278. data/src/core/lib/compression/message_compress.h +2 -3
  279. data/src/core/lib/config/core_configuration.cc +3 -0
  280. data/src/core/lib/config/core_configuration.h +2 -1
  281. data/src/core/lib/debug/stats.cc +9 -9
  282. data/src/core/lib/debug/stats.h +2 -1
  283. data/src/core/lib/debug/stats_data.cc +2 -1
  284. data/src/core/lib/debug/stats_data.h +0 -4
  285. data/src/core/lib/debug/trace.h +13 -12
  286. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  287. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  288. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  289. data/src/core/lib/event_engine/event_engine.cc +29 -14
  290. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  291. data/src/core/lib/event_engine/handle_containers.h +67 -0
  292. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
  293. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
  294. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  295. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  296. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  297. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  298. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  299. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  300. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  301. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  302. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  303. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  304. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  305. data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
  306. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  307. data/src/core/lib/event_engine/slice.cc +102 -0
  308. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  309. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  310. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  311. data/src/core/lib/gpr/log.cc +5 -0
  312. data/src/core/lib/gpr/time_posix.cc +6 -9
  313. data/src/core/lib/gpr/time_windows.cc +10 -7
  314. data/src/core/lib/gpr/tls.h +3 -5
  315. data/src/core/lib/gprpp/bitset.h +5 -1
  316. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  317. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  318. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  319. data/src/core/lib/gprpp/examine_stack.h +0 -1
  320. data/src/core/lib/gprpp/fork.cc +3 -6
  321. data/src/core/lib/gprpp/global_config.h +2 -4
  322. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  323. data/src/core/lib/gprpp/global_config_env.h +3 -1
  324. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  325. data/src/core/lib/gprpp/host_port.cc +2 -0
  326. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  327. data/src/core/lib/gprpp/match.h +2 -0
  328. data/src/core/lib/gprpp/memory.h +1 -5
  329. data/src/core/lib/gprpp/orphanable.h +1 -4
  330. data/src/core/lib/gprpp/ref_counted.h +1 -3
  331. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  332. data/src/core/lib/gprpp/stat.h +0 -2
  333. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  334. data/src/core/lib/gprpp/status_helper.cc +50 -32
  335. data/src/core/lib/gprpp/status_helper.h +4 -0
  336. data/src/core/lib/gprpp/sync.h +3 -1
  337. data/src/core/lib/gprpp/table.h +10 -0
  338. data/src/core/lib/gprpp/thd.h +2 -5
  339. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  340. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  341. data/src/core/lib/gprpp/time.cc +16 -0
  342. data/src/core/lib/gprpp/time.h +10 -1
  343. data/src/core/lib/gprpp/time_util.cc +4 -0
  344. data/src/core/lib/gprpp/time_util.h +1 -1
  345. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  346. data/src/core/lib/http/format_request.cc +34 -4
  347. data/src/core/lib/http/format_request.h +3 -1
  348. data/src/core/lib/http/httpcli.cc +106 -93
  349. data/src/core/lib/http/httpcli.h +58 -10
  350. data/src/core/lib/http/httpcli_security_connector.cc +19 -8
  351. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  352. data/src/core/lib/http/parser.cc +6 -7
  353. data/src/core/lib/http/parser.h +3 -0
  354. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  355. data/src/core/lib/iomgr/endpoint.cc +4 -4
  356. data/src/core/lib/iomgr/endpoint.h +7 -5
  357. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
  358. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  359. data/src/core/lib/iomgr/error.cc +11 -9
  360. data/src/core/lib/iomgr/error.h +9 -5
  361. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  362. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  363. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  364. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  365. data/src/core/lib/iomgr/ev_posix.cc +55 -96
  366. data/src/core/lib/iomgr/ev_posix.h +5 -3
  367. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  368. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  369. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  370. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  371. data/src/core/lib/iomgr/iomgr.cc +7 -1
  372. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  373. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  374. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  375. data/src/core/lib/iomgr/load_file.cc +1 -1
  376. data/src/core/lib/iomgr/pollset_set.h +1 -2
  377. data/src/core/lib/iomgr/port.h +25 -6
  378. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  379. data/src/core/lib/iomgr/resolve_address.h +21 -14
  380. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  381. data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
  382. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  383. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
  384. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  385. data/src/core/lib/iomgr/sockaddr.h +2 -3
  386. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  387. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  388. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  389. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  390. data/src/core/lib/iomgr/tcp_client.h +24 -13
  391. data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
  393. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  394. data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
  395. data/src/core/lib/iomgr/tcp_posix.cc +96 -52
  396. data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
  397. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
  398. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
  399. data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
  400. data/src/core/lib/iomgr/tcp_windows.cc +12 -9
  401. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  402. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  403. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  404. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  405. data/src/core/lib/iomgr/work_serializer.h +2 -3
  406. data/src/core/lib/json/json.h +1 -2
  407. data/src/core/lib/json/json_reader.cc +9 -1
  408. data/src/core/lib/json/json_util.cc +7 -0
  409. data/src/core/lib/json/json_util.h +10 -1
  410. data/src/core/lib/json/json_writer.cc +6 -1
  411. data/src/core/lib/matchers/matchers.cc +6 -3
  412. data/src/core/lib/matchers/matchers.h +2 -0
  413. data/src/core/lib/promise/activity.cc +1 -2
  414. data/src/core/lib/promise/activity.h +13 -19
  415. data/src/core/lib/promise/arena_promise.h +11 -1
  416. data/src/core/lib/promise/call_push_pull.h +4 -0
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  419. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  420. data/src/core/lib/promise/latch.h +0 -1
  421. data/src/core/lib/promise/loop.h +2 -0
  422. data/src/core/lib/promise/promise.h +1 -0
  423. data/src/core/lib/promise/race.h +0 -1
  424. data/src/core/lib/promise/seq.h +0 -2
  425. data/src/core/lib/promise/sleep.cc +38 -31
  426. data/src/core/lib/promise/sleep.h +32 -22
  427. data/src/core/lib/promise/try_seq.h +2 -2
  428. data/src/core/lib/resolver/resolver.cc +5 -0
  429. data/src/core/lib/resolver/resolver.h +3 -0
  430. data/src/core/lib/resolver/resolver_factory.h +6 -4
  431. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  432. data/src/core/lib/resolver/resolver_registry.h +12 -1
  433. data/src/core/lib/resolver/server_address.cc +17 -3
  434. data/src/core/lib/resolver/server_address.h +13 -6
  435. data/src/core/lib/resource_quota/api.cc +14 -1
  436. data/src/core/lib/resource_quota/api.h +4 -1
  437. data/src/core/lib/resource_quota/arena.cc +0 -6
  438. data/src/core/lib/resource_quota/arena.h +1 -2
  439. data/src/core/lib/resource_quota/memory_quota.cc +62 -62
  440. data/src/core/lib/resource_quota/memory_quota.h +35 -30
  441. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  442. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  443. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  444. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  445. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  446. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  447. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  448. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  449. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  450. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
  451. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  452. data/src/core/lib/security/authorization/matchers.cc +9 -1
  453. data/src/core/lib/security/authorization/matchers.h +7 -0
  454. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  455. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  456. data/src/core/lib/security/context/security_context.cc +5 -2
  457. data/src/core/lib/security/context/security_context.h +14 -2
  458. data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
  459. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
  460. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  461. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  462. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  463. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  464. data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
  465. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  466. data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
  467. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
  468. data/src/core/lib/security/credentials/credentials.cc +4 -8
  469. data/src/core/lib/security/credentials/credentials.h +27 -18
  470. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
  471. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
  472. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  473. data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
  474. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  475. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  476. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  477. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
  478. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  479. data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
  480. data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
  481. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  482. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
  483. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
  484. data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
  485. data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
  486. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
  487. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
  488. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  489. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  490. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
  491. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
  492. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  493. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  494. data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
  495. data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
  496. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
  497. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
  498. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
  499. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
  500. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
  501. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
  502. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  503. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  509. data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
  510. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
  511. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  512. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  513. data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
  514. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  515. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  516. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  517. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
  518. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  519. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  520. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  521. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  522. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  523. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  524. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  525. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  526. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  527. data/src/core/lib/security/security_connector/security_connector.h +19 -7
  528. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
  529. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  530. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  531. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  532. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  533. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  534. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  535. data/src/core/lib/security/transport/auth_filters.h +7 -0
  536. data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
  537. data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
  538. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  539. data/src/core/lib/security/transport/security_handshaker.cc +49 -16
  540. data/src/core/lib/security/transport/security_handshaker.h +5 -1
  541. data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
  542. data/src/core/lib/security/util/json_util.cc +3 -2
  543. data/src/core/lib/security/util/json_util.h +0 -2
  544. data/src/core/lib/service_config/service_config.h +4 -8
  545. data/src/core/lib/service_config/service_config_call_data.h +6 -2
  546. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  547. data/src/core/lib/service_config/service_config_impl.h +9 -4
  548. data/src/core/lib/service_config/service_config_parser.cc +8 -2
  549. data/src/core/lib/service_config/service_config_parser.h +7 -0
  550. data/src/core/lib/slice/b64.cc +1 -1
  551. data/src/core/lib/slice/b64.h +2 -0
  552. data/src/core/lib/slice/percent_encoding.cc +4 -1
  553. data/src/core/lib/slice/percent_encoding.h +0 -6
  554. data/src/core/lib/slice/slice.cc +2 -1
  555. data/src/core/lib/slice/slice.h +10 -5
  556. data/src/core/lib/slice/slice_api.cc +1 -1
  557. data/src/core/lib/slice/slice_buffer.cc +79 -23
  558. data/src/core/lib/slice/slice_buffer.h +137 -0
  559. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  560. data/src/core/lib/slice/slice_internal.h +4 -3
  561. data/src/core/lib/slice/slice_refcount.h +2 -3
  562. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  563. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  564. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  565. data/src/core/lib/surface/builtins.cc +7 -2
  566. data/src/core/lib/surface/byte_buffer.cc +7 -1
  567. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  568. data/src/core/lib/surface/call.cc +90 -137
  569. data/src/core/lib/surface/call.h +21 -3
  570. data/src/core/lib/surface/call_details.cc +4 -4
  571. data/src/core/lib/surface/call_log_batch.cc +7 -1
  572. data/src/core/lib/surface/call_test_only.h +4 -1
  573. data/src/core/lib/surface/channel.cc +179 -242
  574. data/src/core/lib/surface/channel.h +97 -58
  575. data/src/core/lib/surface/channel_init.h +2 -0
  576. data/src/core/lib/surface/channel_ping.cc +8 -2
  577. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  578. data/src/core/lib/surface/channel_stack_type.h +0 -2
  579. data/src/core/lib/surface/completion_queue.cc +29 -20
  580. data/src/core/lib/surface/completion_queue.h +7 -2
  581. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  582. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  583. data/src/core/lib/surface/event_string.cc +1 -7
  584. data/src/core/lib/surface/event_string.h +1 -1
  585. data/src/core/lib/surface/init.cc +17 -46
  586. data/src/core/lib/surface/init.h +0 -8
  587. data/src/core/lib/surface/lame_client.cc +63 -109
  588. data/src/core/lib/surface/lame_client.h +41 -3
  589. data/src/core/lib/surface/metadata_array.cc +2 -0
  590. data/src/core/lib/surface/server.cc +83 -64
  591. data/src/core/lib/surface/server.h +42 -9
  592. data/src/core/lib/surface/validate_metadata.cc +3 -6
  593. data/src/core/lib/surface/validate_metadata.h +3 -0
  594. data/src/core/lib/surface/version.cc +2 -2
  595. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  596. data/src/core/lib/transport/bdp_estimator.h +2 -3
  597. data/src/core/lib/transport/connectivity_state.cc +6 -4
  598. data/src/core/lib/transport/connectivity_state.h +2 -3
  599. data/src/core/lib/transport/error_utils.cc +16 -8
  600. data/src/core/lib/transport/error_utils.h +5 -1
  601. data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
  602. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  603. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  604. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  605. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  606. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
  607. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  608. data/src/core/lib/transport/metadata_batch.cc +287 -0
  609. data/src/core/lib/transport/metadata_batch.h +133 -264
  610. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  611. data/src/core/lib/transport/parsed_metadata.h +10 -3
  612. data/src/core/lib/transport/status_conversion.cc +2 -0
  613. data/src/core/lib/transport/status_conversion.h +2 -2
  614. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  615. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  616. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  617. data/src/core/lib/transport/timeout_encoding.h +5 -1
  618. data/src/core/lib/transport/transport.cc +18 -20
  619. data/src/core/lib/transport/transport.h +48 -16
  620. data/src/core/lib/transport/transport_fwd.h +20 -0
  621. data/src/core/lib/transport/transport_impl.h +11 -0
  622. data/src/core/lib/transport/transport_op_string.cc +17 -18
  623. data/src/core/lib/uri/uri_parser.cc +11 -3
  624. data/src/core/lib/uri/uri_parser.h +0 -2
  625. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  626. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  627. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  628. data/src/core/tsi/fake_transport_security.cc +13 -1
  629. data/src/core/tsi/fake_transport_security.h +6 -0
  630. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  631. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  632. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  633. data/src/core/tsi/ssl_transport_security.cc +1 -1
  634. data/src/core/tsi/transport_security_grpc.cc +3 -2
  635. data/src/core/tsi/transport_security_grpc.h +5 -2
  636. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  637. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  638. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  639. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  640. data/src/ruby/ext/grpc/extconf.rb +50 -19
  641. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  642. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  643. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  644. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  645. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  646. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  647. data/src/ruby/lib/grpc/errors.rb +1 -1
  648. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  649. data/src/ruby/lib/grpc/version.rb +1 -1
  650. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  651. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  652. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  653. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  654. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  655. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  656. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  657. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  658. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  659. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  660. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  661. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  662. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  663. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  664. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  665. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  666. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  667. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  668. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  669. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  670. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  671. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  672. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  673. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  674. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  675. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  676. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  677. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  678. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  679. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  680. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  681. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  682. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  683. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  684. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  685. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  686. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  687. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  688. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  689. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  690. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  691. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  692. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  693. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  694. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  695. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  696. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  697. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  698. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  699. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  700. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  701. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  702. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  703. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  704. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  705. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  706. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  707. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  708. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  709. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  710. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  711. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  712. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  713. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  714. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  715. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  716. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  717. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  718. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  719. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  720. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  721. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  722. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  723. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  724. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  725. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  726. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  727. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  728. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  729. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  730. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  731. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  732. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  733. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  734. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  735. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  736. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  737. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  738. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  739. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  740. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  741. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  742. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  743. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  744. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  745. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  746. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  747. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  748. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  749. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  750. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  751. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  752. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  753. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  754. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  755. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  756. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  757. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  758. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  759. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  761. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  762. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  764. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  765. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  766. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  767. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  768. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  769. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  770. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  771. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  772. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  773. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  774. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  775. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  776. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  777. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  778. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  779. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  780. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  781. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  782. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  783. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  784. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  785. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  786. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  787. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  788. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  789. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  790. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  791. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  792. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  793. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  794. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  795. metadata +69 -38
  796. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  797. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  798. data/src/core/lib/event_engine/sockaddr.h +0 -44
  799. data/src/core/lib/gprpp/capture.h +0 -76
  800. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  801. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  802. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  803. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  804. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  805. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  806. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  807. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  808. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  809. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  810. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  811. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  812. data/src/core/lib/slice/slice_split.cc +0 -100
  813. data/src/core/lib/slice/slice_split.h +0 -40
  814. data/src/core/lib/transport/byte_stream.cc +0 -164
  815. data/src/core/lib/transport/byte_stream.h +0 -166
  816. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -16,27 +16,51 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <inttypes.h>
20
- #include <limits.h>
21
- #include <string.h>
22
-
23
- #include "absl/container/inlined_vector.h"
19
+ #include <stdlib.h>
20
+
21
+ #include <algorithm>
22
+ #include <cstdint>
23
+ #include <map>
24
+ #include <memory>
25
+ #include <string>
26
+ #include <utility>
27
+ #include <vector>
28
+
29
+ #include "absl/memory/memory.h"
30
+ #include "absl/status/status.h"
31
+ #include "absl/status/statusor.h"
24
32
  #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/string_view.h"
34
+ #include "absl/types/optional.h"
25
35
 
26
- #include <grpc/grpc.h>
36
+ #include <grpc/event_engine/event_engine.h>
37
+ #include <grpc/impl/codegen/connectivity_state.h>
38
+ #include <grpc/impl/codegen/grpc_types.h>
39
+ #include <grpc/support/log.h>
27
40
 
28
41
  #include "src/core/ext/filters/client_channel/lb_policy.h"
29
42
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
43
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
44
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
32
45
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
46
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
33
47
  #include "src/core/lib/channel/channel_args.h"
48
+ #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/event_engine/event_engine_factory.h"
34
50
  #include "src/core/lib/gpr/string.h"
51
+ #include "src/core/lib/gprpp/debug_location.h"
35
52
  #include "src/core/lib/gprpp/orphanable.h"
53
+ #include "src/core/lib/gprpp/ref_counted.h"
36
54
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
37
- #include "src/core/lib/iomgr/timer.h"
55
+ #include "src/core/lib/gprpp/time.h"
56
+ #include "src/core/lib/iomgr/error.h"
57
+ #include "src/core/lib/iomgr/pollset_set.h"
38
58
  #include "src/core/lib/iomgr/work_serializer.h"
39
- #include "src/core/lib/transport/error_utils.h"
59
+ #include "src/core/lib/json/json.h"
60
+ #include "src/core/lib/resolver/server_address.h"
61
+ #include "src/core/lib/transport/connectivity_state.h"
62
+
63
+ // IWYU pragma: no_include <type_traits>
40
64
 
41
65
  namespace grpc_core {
42
66
 
@@ -44,6 +68,9 @@ TraceFlag grpc_lb_weighted_target_trace(false, "weighted_target_lb");
44
68
 
45
69
  namespace {
46
70
 
71
+ using ::grpc_event_engine::experimental::EventEngine;
72
+ using ::grpc_event_engine::experimental::GetDefaultEventEngine;
73
+
47
74
  constexpr char kWeightedTarget[] = "weighted_target_experimental";
48
75
 
49
76
  // How long we keep a child around for after it has been removed from
@@ -101,8 +128,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
101
128
  // ready state. The first element in the pair represents the end of a
102
129
  // range proportional to the child's weight. The start of the range
103
130
  // is the previous value in the vector and is 0 for the first element.
104
- using PickerList = absl::InlinedVector<
105
- std::pair<uint32_t, RefCountedPtr<ChildPickerWrapper>>, 1>;
131
+ using PickerList =
132
+ std::vector<std::pair<uint32_t, RefCountedPtr<ChildPickerWrapper>>>;
106
133
 
107
134
  explicit WeightedPicker(PickerList pickers)
108
135
  : pickers_(std::move(pickers)) {}
@@ -166,13 +193,10 @@ class WeightedTargetLb : public LoadBalancingPolicy {
166
193
  void Orphan() override;
167
194
 
168
195
  private:
169
- static void OnTimer(void* arg, grpc_error_handle error);
170
- void OnTimerLocked(grpc_error_handle error);
196
+ void OnTimerLocked();
171
197
 
172
198
  RefCountedPtr<WeightedChild> weighted_child_;
173
- grpc_timer timer_;
174
- grpc_closure on_timer_;
175
- bool timer_pending_ = true;
199
+ absl::optional<EventEngine::TaskHandle> timer_handle_;
176
200
  };
177
201
 
178
202
  // Methods for dealing with the child policy.
@@ -194,7 +218,6 @@ class WeightedTargetLb : public LoadBalancingPolicy {
194
218
 
195
219
  RefCountedPtr<ChildPickerWrapper> picker_wrapper_;
196
220
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_CONNECTING;
197
- bool seen_failure_since_ready_ = false;
198
221
 
199
222
  OrphanablePtr<DelayedRemovalTimer> delayed_removal_timer_;
200
223
  };
@@ -314,6 +337,14 @@ void WeightedTargetLb::UpdateLocked(UpdateArgs args) {
314
337
  target->UpdateLocked(config, std::move(addresses), args.args);
315
338
  }
316
339
  update_in_progress_ = false;
340
+ if (config_->target_map().empty()) {
341
+ absl::Status status = absl::UnavailableError(absl::StrCat(
342
+ "no children in weighted_target policy: ", args.resolution_note));
343
+ channel_control_helper()->UpdateState(
344
+ GRPC_CHANNEL_TRANSIENT_FAILURE, status,
345
+ absl::make_unique<TransientFailurePicker>(status));
346
+ return;
347
+ }
317
348
  UpdateStateLocked();
318
349
  }
319
350
 
@@ -330,17 +361,19 @@ void WeightedTargetLb::UpdateStateLocked() {
330
361
  "connectivity state",
331
362
  this);
332
363
  }
333
- // Construct a new picker which maintains a map of all child pickers
334
- // that are ready. Each child is represented by a portion of the range
335
- // proportional to its weight, such that the total range is the sum of the
336
- // weights of all children.
337
- WeightedPicker::PickerList picker_list;
338
- uint32_t end = 0;
339
- // Also count the number of children in each state, to determine the
340
- // overall state.
364
+ // Construct lists of child pickers with associated weights, one for
365
+ // children that are in state READY and another for children that are
366
+ // in state TRANSIENT_FAILURE. Each child is represented by a portion of
367
+ // the range proportional to its weight, such that the total range is the
368
+ // sum of the weights of all children.
369
+ WeightedPicker::PickerList ready_picker_list;
370
+ uint32_t ready_end = 0;
371
+ WeightedPicker::PickerList tf_picker_list;
372
+ uint32_t tf_end = 0;
373
+ // Also count the number of children in CONNECTING and IDLE, to determine
374
+ // the aggregated state.
341
375
  size_t num_connecting = 0;
342
376
  size_t num_idle = 0;
343
- size_t num_transient_failures = 0;
344
377
  for (const auto& p : targets_) {
345
378
  const std::string& child_name = p.first;
346
379
  const WeightedChild* child = p.second.get();
@@ -358,8 +391,8 @@ void WeightedTargetLb::UpdateStateLocked() {
358
391
  switch (child->connectivity_state()) {
359
392
  case GRPC_CHANNEL_READY: {
360
393
  GPR_ASSERT(child->weight() > 0);
361
- end += child->weight();
362
- picker_list.push_back(std::make_pair(end, child->picker_wrapper()));
394
+ ready_end += child->weight();
395
+ ready_picker_list.emplace_back(ready_end, child->picker_wrapper());
363
396
  break;
364
397
  }
365
398
  case GRPC_CHANNEL_CONNECTING: {
@@ -371,7 +404,9 @@ void WeightedTargetLb::UpdateStateLocked() {
371
404
  break;
372
405
  }
373
406
  case GRPC_CHANNEL_TRANSIENT_FAILURE: {
374
- ++num_transient_failures;
407
+ GPR_ASSERT(child->weight() > 0);
408
+ tf_end += child->weight();
409
+ tf_picker_list.emplace_back(tf_end, child->picker_wrapper());
375
410
  break;
376
411
  }
377
412
  default:
@@ -380,7 +415,7 @@ void WeightedTargetLb::UpdateStateLocked() {
380
415
  }
381
416
  // Determine aggregated connectivity state.
382
417
  grpc_connectivity_state connectivity_state;
383
- if (!picker_list.empty()) {
418
+ if (!ready_picker_list.empty()) {
384
419
  connectivity_state = GRPC_CHANNEL_READY;
385
420
  } else if (num_connecting > 0) {
386
421
  connectivity_state = GRPC_CHANNEL_CONNECTING;
@@ -397,7 +432,7 @@ void WeightedTargetLb::UpdateStateLocked() {
397
432
  absl::Status status;
398
433
  switch (connectivity_state) {
399
434
  case GRPC_CHANNEL_READY:
400
- picker = absl::make_unique<WeightedPicker>(std::move(picker_list));
435
+ picker = absl::make_unique<WeightedPicker>(std::move(ready_picker_list));
401
436
  break;
402
437
  case GRPC_CHANNEL_CONNECTING:
403
438
  case GRPC_CHANNEL_IDLE:
@@ -405,9 +440,7 @@ void WeightedTargetLb::UpdateStateLocked() {
405
440
  absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
406
441
  break;
407
442
  default:
408
- status = absl::UnavailableError(
409
- "weighted_target: all children report state TRANSIENT_FAILURE");
410
- picker = absl::make_unique<TransientFailurePicker>(status);
443
+ picker = absl::make_unique<WeightedPicker>(std::move(tf_picker_list));
411
444
  }
412
445
  channel_control_helper()->UpdateState(connectivity_state, status,
413
446
  std::move(picker));
@@ -420,14 +453,16 @@ void WeightedTargetLb::UpdateStateLocked() {
420
453
  WeightedTargetLb::WeightedChild::DelayedRemovalTimer::DelayedRemovalTimer(
421
454
  RefCountedPtr<WeightedTargetLb::WeightedChild> weighted_child)
422
455
  : weighted_child_(std::move(weighted_child)) {
423
- GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr);
424
- Ref().release();
425
- grpc_timer_init(&timer_, ExecCtx::Get()->Now() + kChildRetentionInterval,
426
- &on_timer_);
456
+ timer_handle_ = GetDefaultEventEngine()->RunAfter(
457
+ kChildRetentionInterval, [self = Ref()]() mutable {
458
+ self->weighted_child_->weighted_target_policy_->work_serializer()->Run(
459
+ [self = std::move(self)] { self->OnTimerLocked(); },
460
+ DEBUG_LOCATION);
461
+ });
427
462
  }
428
463
 
429
464
  void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
430
- if (timer_pending_) {
465
+ if (timer_handle_.has_value()) {
431
466
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
432
467
  gpr_log(GPR_INFO,
433
468
  "[weighted_target_lb %p] WeightedChild %p %s: cancelling "
@@ -435,29 +470,16 @@ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
435
470
  weighted_child_->weighted_target_policy_.get(),
436
471
  weighted_child_.get(), weighted_child_->name_.c_str());
437
472
  }
438
- timer_pending_ = false;
439
- grpc_timer_cancel(&timer_);
473
+ GetDefaultEventEngine()->Cancel(*timer_handle_);
440
474
  }
441
475
  Unref();
442
476
  }
443
477
 
444
- void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimer(
445
- void* arg, grpc_error_handle error) {
446
- auto* self = static_cast<DelayedRemovalTimer*>(arg);
447
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
448
- self->weighted_child_->weighted_target_policy_->work_serializer()->Run(
449
- [self, error]() { self->OnTimerLocked(error); }, DEBUG_LOCATION);
450
- }
451
-
452
- void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimerLocked(
453
- grpc_error_handle error) {
454
- if (error == GRPC_ERROR_NONE && timer_pending_) {
455
- timer_pending_ = false;
456
- weighted_child_->weighted_target_policy_->targets_.erase(
457
- weighted_child_->name_);
458
- }
459
- GRPC_ERROR_UNREF(error);
460
- Unref();
478
+ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimerLocked() {
479
+ GPR_ASSERT(timer_handle_.has_value());
480
+ timer_handle_.reset();
481
+ weighted_child_->weighted_target_policy_->targets_.erase(
482
+ weighted_child_->name_);
461
483
  }
462
484
 
463
485
  //
@@ -585,19 +607,12 @@ void WeightedTargetLb::WeightedChild::OnConnectivityStateUpdateLocked(
585
607
  // If the child reports IDLE, immediately tell it to exit idle.
586
608
  if (state == GRPC_CHANNEL_IDLE) child_policy_->ExitIdleLocked();
587
609
  // Decide what state to report for aggregation purposes.
588
- // If we haven't seen a failure since the last time we were in state
589
- // READY, then we report the state change as-is. However, once we do see
590
- // a failure, we report TRANSIENT_FAILURE and ignore any subsequent state
591
- // changes until we go back into state READY.
592
- if (!seen_failure_since_ready_) {
593
- if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
594
- seen_failure_since_ready_ = true;
595
- }
596
- } else {
597
- if (state != GRPC_CHANNEL_READY) return;
598
- seen_failure_since_ready_ = false;
610
+ // If the last recorded state was TRANSIENT_FAILURE and the new state
611
+ // is something other than READY, don't change the state.
612
+ if (connectivity_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE ||
613
+ state == GRPC_CHANNEL_READY) {
614
+ connectivity_state_ = state;
599
615
  }
600
- connectivity_state_ = state;
601
616
  // Notify the LB policy.
602
617
  weighted_target_policy_->UpdateStateLocked();
603
618
  }
@@ -670,7 +685,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
670
685
 
671
686
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
672
687
  const Json& json, grpc_error_handle* error) const override {
673
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
688
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
674
689
  if (json.type() == Json::Type::JSON_NULL) {
675
690
  // weighted_target was mentioned as a policy in the deprecated
676
691
  // loadBalancingPolicy field or in the client API.
@@ -748,7 +763,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
748
763
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second,
749
764
  &parse_error);
750
765
  if (child_config->config == nullptr) {
751
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
766
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
752
767
  std::vector<grpc_error_handle> child_errors;
753
768
  child_errors.push_back(parse_error);
754
769
  error_list.push_back(
@@ -16,24 +16,57 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <string.h>
20
-
19
+ #include <algorithm>
20
+ #include <map>
21
+ #include <memory>
22
+ #include <set>
23
+ #include <string>
24
+ #include <utility>
25
+ #include <vector>
26
+
27
+ #include "absl/memory/memory.h"
28
+ #include "absl/status/status.h"
29
+ #include "absl/status/statusor.h"
21
30
  #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/string_view.h"
32
+ #include "absl/types/optional.h"
33
+
34
+ #include <grpc/grpc.h>
35
+ #include <grpc/grpc_security.h>
36
+ #include <grpc/impl/codegen/connectivity_state.h>
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include <grpc/support/log.h>
22
39
 
23
40
  #include "src/core/ext/filters/client_channel/lb_policy.h"
41
+ #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
24
42
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
25
43
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
44
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
45
+ #include "src/core/ext/xds/certificate_provider_store.h"
46
+ #include "src/core/ext/xds/xds_bootstrap.h"
26
47
  #include "src/core/ext/xds/xds_certificate_provider.h"
27
48
  #include "src/core/ext/xds/xds_client.h"
28
49
  #include "src/core/ext/xds/xds_cluster.h"
50
+ #include "src/core/ext/xds/xds_common_types.h"
51
+ #include "src/core/ext/xds/xds_resource_type_impl.h"
29
52
  #include "src/core/lib/channel/channel_args.h"
30
- #include "src/core/lib/gprpp/memory.h"
53
+ #include "src/core/lib/debug/trace.h"
54
+ #include "src/core/lib/gprpp/debug_location.h"
31
55
  #include "src/core/lib/gprpp/orphanable.h"
32
56
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
- #include "src/core/lib/iomgr/closure.h"
34
- #include "src/core/lib/iomgr/exec_ctx.h"
57
+ #include "src/core/lib/gprpp/time.h"
58
+ #include "src/core/lib/gprpp/unique_type_name.h"
59
+ #include "src/core/lib/iomgr/error.h"
60
+ #include "src/core/lib/iomgr/pollset_set.h"
61
+ #include "src/core/lib/iomgr/work_serializer.h"
62
+ #include "src/core/lib/json/json.h"
63
+ #include "src/core/lib/matchers/matchers.h"
64
+ #include "src/core/lib/resolver/server_address.h"
65
+ #include "src/core/lib/security/credentials/credentials.h"
66
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
67
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
35
68
  #include "src/core/lib/security/credentials/xds/xds_credentials.h"
36
- #include "src/core/lib/transport/error_utils.h"
69
+ #include "src/core/lib/transport/connectivity_state.h"
37
70
 
38
71
  namespace grpc_core {
39
72
 
@@ -43,6 +76,8 @@ namespace {
43
76
 
44
77
  constexpr char kCds[] = "cds_experimental";
45
78
 
79
+ constexpr int kMaxAggregateClusterRecursionDepth = 16;
80
+
46
81
  // Config for this LB policy.
47
82
  class CdsLbConfig : public LoadBalancingPolicy::Config {
48
83
  public:
@@ -137,8 +172,8 @@ class CdsLb : public LoadBalancingPolicy {
137
172
  void ShutdownLocked() override;
138
173
 
139
174
  absl::StatusOr<bool> GenerateDiscoveryMechanismForCluster(
140
- const std::string& name, Json::Array* discovery_mechanisms,
141
- std::set<std::string>* clusters_needed);
175
+ const std::string& name, int depth, Json::Array* discovery_mechanisms,
176
+ std::set<std::string>* clusters_added);
142
177
  void OnClusterChanged(const std::string& name,
143
178
  XdsClusterResource cluster_data);
144
179
  void OnError(const std::string& name, absl::Status status);
@@ -192,8 +227,7 @@ void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
192
227
  std::unique_ptr<SubchannelPicker> picker) {
193
228
  if (parent_->shutting_down_ || parent_->child_policy_ == nullptr) return;
194
229
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
195
- gpr_log(GPR_INFO,
196
- "[cdslb %p] state updated by child: %s message_state: (%s)", this,
230
+ gpr_log(GPR_INFO, "[cdslb %p] state updated by child: %s (%s)", this,
197
231
  ConnectivityStateName(state), status.ToString().c_str());
198
232
  }
199
233
  parent_->channel_control_helper()->UpdateState(state, status,
@@ -314,13 +348,16 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
314
348
  // mechanism config, adds it to *discovery_mechanisms, and returns true.
315
349
  //
316
350
  // For aggregate clusters, may call itself recursively. Returns an
317
- // error if there is a loop in the aggregate cluster graph.
351
+ // error if depth exceeds kMaxAggregateClusterRecursionDepth.
318
352
  absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
319
- const std::string& name, Json::Array* discovery_mechanisms,
320
- std::set<std::string>* clusters_needed) {
321
- if (!clusters_needed->insert(name).second) {
322
- return absl::FailedPreconditionError(absl::StrCat(
323
- "aggregate cluster graph contains a loop for cluster ", name));
353
+ const std::string& name, int depth, Json::Array* discovery_mechanisms,
354
+ std::set<std::string>* clusters_added) {
355
+ if (depth == kMaxAggregateClusterRecursionDepth) {
356
+ return absl::FailedPreconditionError(
357
+ "aggregate cluster graph exceeds max depth");
358
+ }
359
+ if (!clusters_added->insert(name).second) {
360
+ return true; // Discovery mechanism already added from some other branch.
324
361
  }
325
362
  auto& state = watchers_[name];
326
363
  // Create a new watcher if needed.
@@ -344,7 +381,7 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
344
381
  for (const std::string& child_name :
345
382
  state.update->prioritized_cluster_names) {
346
383
  auto result = GenerateDiscoveryMechanismForCluster(
347
- child_name, discovery_mechanisms, clusters_needed);
384
+ child_name, depth + 1, discovery_mechanisms, clusters_added);
348
385
  if (!result.ok()) return result;
349
386
  if (!*result) missing_cluster = true;
350
387
  }
@@ -354,6 +391,45 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
354
391
  {"clusterName", name},
355
392
  {"max_concurrent_requests", state.update->max_concurrent_requests},
356
393
  };
394
+ if (state.update->outlier_detection.has_value()) {
395
+ auto& outlier_detection_update = state.update->outlier_detection.value();
396
+ Json::Object outlier_detection;
397
+ outlier_detection["interval"] =
398
+ outlier_detection_update.interval.ToJsonString();
399
+ outlier_detection["baseEjectionTime"] =
400
+ outlier_detection_update.base_ejection_time.ToJsonString();
401
+ outlier_detection["maxEjectionTime"] =
402
+ outlier_detection_update.max_ejection_time.ToJsonString();
403
+ outlier_detection["maxEjectionPercent"] =
404
+ outlier_detection_update.max_ejection_percent;
405
+ if (outlier_detection_update.success_rate_ejection.has_value()) {
406
+ outlier_detection["successRateEjection"] = Json::Object{
407
+ {"stdevFactor",
408
+ outlier_detection_update.success_rate_ejection->stdev_factor},
409
+ {"enforcementPercentage",
410
+ outlier_detection_update.success_rate_ejection
411
+ ->enforcement_percentage},
412
+ {"minimumHosts",
413
+ outlier_detection_update.success_rate_ejection->minimum_hosts},
414
+ {"requestVolume",
415
+ outlier_detection_update.success_rate_ejection->request_volume},
416
+ };
417
+ }
418
+ if (outlier_detection_update.failure_percentage_ejection.has_value()) {
419
+ outlier_detection["failurePercentageEjection"] = Json::Object{
420
+ {"threshold",
421
+ outlier_detection_update.failure_percentage_ejection->threshold},
422
+ {"enforcementPercentage",
423
+ outlier_detection_update.failure_percentage_ejection
424
+ ->enforcement_percentage},
425
+ {"minimumHosts",
426
+ outlier_detection_update.failure_percentage_ejection->minimum_hosts},
427
+ {"requestVolume", outlier_detection_update
428
+ .failure_percentage_ejection->request_volume},
429
+ };
430
+ }
431
+ mechanism["outlierDetection"] = std::move(outlier_detection);
432
+ }
357
433
  switch (state.update->cluster_type) {
358
434
  case XdsClusterResource::ClusterType::EDS:
359
435
  mechanism["type"] = "EDS";
@@ -403,9 +479,9 @@ void CdsLb::OnClusterChanged(const std::string& name,
403
479
  // just started up and not all watchers have returned data yet), then don't
404
480
  // update the child policy at all.
405
481
  Json::Array discovery_mechanisms;
406
- std::set<std::string> clusters_needed;
482
+ std::set<std::string> clusters_added;
407
483
  auto result = GenerateDiscoveryMechanismForCluster(
408
- config_->cluster(), &discovery_mechanisms, &clusters_needed);
484
+ config_->cluster(), /*depth=*/0, &discovery_mechanisms, &clusters_added);
409
485
  if (!result.ok()) {
410
486
  return OnError(name, result.status());
411
487
  }
@@ -445,7 +521,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
445
521
  grpc_error_handle error = GRPC_ERROR_NONE;
446
522
  RefCountedPtr<LoadBalancingPolicy::Config> config =
447
523
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
448
- if (error != GRPC_ERROR_NONE) {
524
+ if (!GRPC_ERROR_IS_NONE(error)) {
449
525
  OnError(name, absl::UnavailableError(grpc_error_std_string(error)));
450
526
  GRPC_ERROR_UNREF(error);
451
527
  return;
@@ -480,10 +556,10 @@ void CdsLb::OnClusterChanged(const std::string& name,
480
556
  }
481
557
  child_policy_->UpdateLocked(std::move(args));
482
558
  }
483
- // Remove entries in watchers_ for any clusters not in clusters_needed
559
+ // Remove entries in watchers_ for any clusters not in clusters_added
484
560
  for (auto it = watchers_.begin(); it != watchers_.end();) {
485
561
  const std::string& cluster_name = it->first;
486
- if (clusters_needed.find(cluster_name) != clusters_needed.end()) {
562
+ if (clusters_added.find(cluster_name) != clusters_added.end()) {
487
563
  ++it;
488
564
  continue;
489
565
  }
@@ -506,8 +582,8 @@ void CdsLb::OnError(const std::string& name, absl::Status status) {
506
582
  if (child_policy_ == nullptr) {
507
583
  channel_control_helper()->UpdateState(
508
584
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
509
- absl::make_unique<TransientFailurePicker>(
510
- absl::UnavailableError(status.ToString())));
585
+ absl::make_unique<TransientFailurePicker>(absl::UnavailableError(
586
+ absl::StrCat(name, ": ", status.ToString()))));
511
587
  }
512
588
  }
513
589
 
@@ -657,7 +733,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
657
733
 
658
734
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
659
735
  const Json& json, grpc_error_handle* error) const override {
660
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
736
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
661
737
  if (json.type() == Json::Type::JSON_NULL) {
662
738
  // xds was mentioned as a policy in the deprecated loadBalancingPolicy
663
739
  // field or in the client API.
@@ -19,6 +19,12 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <memory>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/memory/memory.h"
27
+
22
28
  #include "src/core/ext/xds/xds_client_stats.h"
23
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
24
30
  #include "src/core/lib/resolver/server_address.h"
@@ -16,11 +16,29 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <atomic>
19
+ #include <stddef.h>
20
+ #include <stdint.h>
20
21
 
22
+ #include <algorithm>
23
+ #include <atomic>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <string>
27
+ #include <utility>
28
+ #include <vector>
29
+
30
+ #include "absl/base/thread_annotations.h"
31
+ #include "absl/memory/memory.h"
32
+ #include "absl/status/status.h"
33
+ #include "absl/status/statusor.h"
34
+ #include "absl/strings/str_cat.h"
21
35
  #include "absl/strings/string_view.h"
36
+ #include "absl/types/optional.h"
37
+ #include "absl/types/variant.h"
22
38
 
23
- #include <grpc/grpc.h>
39
+ #include <grpc/impl/codegen/connectivity_state.h>
40
+ #include <grpc/impl/codegen/grpc_types.h>
41
+ #include <grpc/support/log.h>
24
42
 
25
43
  #include "src/core/ext/filters/client_channel/lb_policy.h"
26
44
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
@@ -28,16 +46,24 @@
28
46
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
29
47
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
30
48
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
50
+ #include "src/core/ext/xds/xds_bootstrap.h"
31
51
  #include "src/core/ext/xds/xds_client.h"
32
52
  #include "src/core/ext/xds/xds_client_stats.h"
33
53
  #include "src/core/ext/xds/xds_endpoint.h"
34
54
  #include "src/core/lib/channel/channel_args.h"
35
- #include "src/core/lib/gpr/env.h"
55
+ #include "src/core/lib/debug/trace.h"
36
56
  #include "src/core/lib/gpr/string.h"
57
+ #include "src/core/lib/gprpp/debug_location.h"
37
58
  #include "src/core/lib/gprpp/orphanable.h"
59
+ #include "src/core/lib/gprpp/ref_counted.h"
38
60
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
39
61
  #include "src/core/lib/gprpp/sync.h"
40
- #include "src/core/lib/iomgr/work_serializer.h"
62
+ #include "src/core/lib/iomgr/error.h"
63
+ #include "src/core/lib/iomgr/pollset_set.h"
64
+ #include "src/core/lib/json/json.h"
65
+ #include "src/core/lib/resolver/server_address.h"
66
+ #include "src/core/lib/transport/connectivity_state.h"
41
67
 
42
68
  namespace grpc_core {
43
69
 
@@ -504,8 +530,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
504
530
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
505
531
  gpr_log(GPR_INFO,
506
532
  "[xds_cluster_impl_lb %p] updating connectivity (drop all): "
507
- "state=READY "
508
- "picker=%p",
533
+ "state=READY picker=%p",
509
534
  this, drop_picker.get());
510
535
  }
511
536
  channel_control_helper()->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
@@ -518,8 +543,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
518
543
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
519
544
  gpr_log(GPR_INFO,
520
545
  "[xds_cluster_impl_lb %p] updating connectivity: state=%s "
521
- "status=(%s) "
522
- "picker=%p",
546
+ "status=(%s) picker=%p",
523
547
  this, ConnectivityStateName(state_), status_.ToString().c_str(),
524
548
  drop_picker.get());
525
549
  }
@@ -682,7 +706,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
682
706
 
683
707
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
684
708
  const Json& json, grpc_error_handle* error) const override {
685
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
709
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
686
710
  if (json.type() == Json::Type::JSON_NULL) {
687
711
  // This policy was configured in the deprecated loadBalancingPolicy
688
712
  // field or in the client API.
@@ -704,7 +728,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
704
728
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
705
729
  it->second, &parse_error);
706
730
  if (child_policy == nullptr) {
707
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
731
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
708
732
  std::vector<grpc_error_handle> child_errors;
709
733
  child_errors.push_back(parse_error);
710
734
  error_list.push_back(
@@ -745,7 +769,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
745
769
  grpc_error_handle parser_error;
746
770
  lrs_load_reporting_server = XdsBootstrap::XdsServer::Parse(
747
771
  it->second.object_value(), &parser_error);
748
- if (parser_error != GRPC_ERROR_NONE) {
772
+ if (!GRPC_ERROR_IS_NONE(parser_error)) {
749
773
  error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
750
774
  absl::StrCat("errors parsing lrs_load_reporting_server")));
751
775
  error_list.push_back(parser_error);