grpc 1.46.2 → 1.48.0.pre1

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 (810) 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/errors.rb +1 -1
  643. data/src/ruby/lib/grpc/version.rb +1 -1
  644. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  645. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  646. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  647. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  648. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  649. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  650. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  651. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  652. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  653. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  654. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  655. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  656. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  657. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  658. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  659. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  660. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  661. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  662. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  663. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  664. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  665. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  666. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  667. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  668. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  669. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  670. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  671. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  672. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  673. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  674. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  675. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  676. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  677. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  678. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  679. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  680. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  681. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  682. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  683. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  684. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  685. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  686. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  687. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  688. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  689. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  690. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  691. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  692. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  693. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  694. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  695. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  696. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  697. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  698. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  699. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  700. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  701. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  702. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  703. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  704. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  705. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  706. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  707. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  708. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  709. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  710. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  711. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  712. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  713. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  714. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  715. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  716. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  717. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  718. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  719. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  720. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  721. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  722. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  723. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  724. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  725. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  726. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  727. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  728. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  729. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  730. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  731. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  732. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  733. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  734. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  735. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  736. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  737. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  738. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  739. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  740. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  741. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  742. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  743. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  744. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  745. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  746. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  747. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  748. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  749. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  750. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  751. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  752. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  753. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  754. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  755. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  756. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  757. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  758. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  759. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  761. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  762. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  764. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  765. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  766. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  767. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  768. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  769. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  770. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  771. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  772. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  773. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  774. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  775. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  776. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  777. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  778. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  779. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  780. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  781. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  782. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  783. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  784. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  785. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  786. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  787. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  788. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  789. metadata +69 -38
  790. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  791. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  792. data/src/core/lib/event_engine/sockaddr.h +0 -44
  793. data/src/core/lib/gprpp/capture.h +0 -76
  794. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  795. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  796. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  797. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  798. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  799. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  800. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  801. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  802. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  803. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  804. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  805. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  806. data/src/core/lib/slice/slice_split.cc +0 -100
  807. data/src/core/lib/slice/slice_split.h +0 -40
  808. data/src/core/lib/transport/byte_stream.cc +0 -164
  809. data/src/core/lib/transport/byte_stream.h +0 -166
  810. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,30 +20,39 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <stdbool.h>
24
- #include <stdio.h>
25
23
  #include <string.h>
26
24
 
25
+ #include <algorithm>
26
+ #include <functional>
27
+ #include <new>
27
28
  #include <set>
29
+ #include <vector>
28
30
 
29
31
  #include "absl/container/inlined_vector.h"
32
+ #include "absl/memory/memory.h"
33
+ #include "absl/status/status.h"
34
+ #include "absl/status/statusor.h"
35
+ #include "absl/strings/cord.h"
30
36
  #include "absl/strings/numbers.h"
31
37
  #include "absl/strings/str_cat.h"
32
38
  #include "absl/strings/str_join.h"
33
39
  #include "absl/strings/string_view.h"
34
40
  #include "absl/types/optional.h"
41
+ #include "absl/types/variant.h"
35
42
 
43
+ #include <grpc/impl/codegen/gpr_types.h>
44
+ #include <grpc/slice.h>
45
+ #include <grpc/status.h>
36
46
  #include <grpc/support/alloc.h>
37
47
  #include <grpc/support/log.h>
38
48
  #include <grpc/support/string_util.h>
39
- #include <grpc/support/sync.h>
40
49
 
41
50
  #include "src/core/ext/filters/client_channel/backend_metric.h"
42
51
  #include "src/core/ext/filters/client_channel/backup_poller.h"
52
+ #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
43
53
  #include "src/core/ext/filters/client_channel/config_selector.h"
44
54
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
45
55
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
46
- #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
47
56
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
48
57
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
58
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
@@ -51,23 +60,29 @@
51
60
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
52
61
  #include "src/core/ext/filters/client_channel/retry_filter.h"
53
62
  #include "src/core/ext/filters/client_channel/subchannel.h"
63
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
64
+ #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
54
65
  #include "src/core/ext/filters/deadline/deadline_filter.h"
55
- #include "src/core/lib/backoff/backoff.h"
56
66
  #include "src/core/lib/channel/channel_args.h"
57
67
  #include "src/core/lib/channel/channel_stack.h"
58
- #include "src/core/lib/channel/connected_channel.h"
59
- #include "src/core/lib/channel/status_util.h"
60
- #include "src/core/lib/gpr/string.h"
68
+ #include "src/core/lib/channel/channel_trace.h"
69
+ #include "src/core/lib/config/core_configuration.h"
70
+ #include "src/core/lib/debug/trace.h"
71
+ #include "src/core/lib/gpr/useful.h"
72
+ #include "src/core/lib/gprpp/debug_location.h"
61
73
  #include "src/core/lib/gprpp/sync.h"
62
- #include "src/core/lib/iomgr/iomgr.h"
74
+ #include "src/core/lib/iomgr/exec_ctx.h"
63
75
  #include "src/core/lib/iomgr/polling_entity.h"
76
+ #include "src/core/lib/iomgr/pollset_set.h"
64
77
  #include "src/core/lib/iomgr/work_serializer.h"
78
+ #include "src/core/lib/json/json.h"
65
79
  #include "src/core/lib/profiling/timers.h"
66
80
  #include "src/core/lib/resolver/resolver_registry.h"
81
+ #include "src/core/lib/resolver/server_address.h"
67
82
  #include "src/core/lib/service_config/service_config_call_data.h"
68
83
  #include "src/core/lib/service_config/service_config_impl.h"
69
84
  #include "src/core/lib/slice/slice_internal.h"
70
- #include "src/core/lib/slice/slice_string_helpers.h"
85
+ #include "src/core/lib/slice/slice_refcount.h"
71
86
  #include "src/core/lib/surface/channel.h"
72
87
  #include "src/core/lib/transport/connectivity_state.h"
73
88
  #include "src/core/lib/transport/error_utils.h"
@@ -82,9 +97,7 @@
82
97
 
83
98
  namespace grpc_core {
84
99
 
85
- using internal::ClientChannelGlobalParsedConfig;
86
100
  using internal::ClientChannelMethodParsedConfig;
87
- using internal::ClientChannelServiceConfigParser;
88
101
 
89
102
  TraceFlag grpc_client_channel_trace(false, "client_channel");
90
103
  TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
@@ -241,6 +254,7 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
241
254
  ClientChannel::CallData::Destroy,
242
255
  sizeof(ClientChannel),
243
256
  ClientChannel::Init,
257
+ grpc_channel_stack_no_post_init,
244
258
  ClientChannel::Destroy,
245
259
  ClientChannel::GetChannelInfo,
246
260
  "client-channel",
@@ -392,6 +406,7 @@ const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
392
406
  DynamicTerminationFilter::CallData::Destroy,
393
407
  sizeof(DynamicTerminationFilter),
394
408
  DynamicTerminationFilter::Init,
409
+ grpc_channel_stack_no_post_init,
395
410
  DynamicTerminationFilter::Destroy,
396
411
  DynamicTerminationFilter::GetChannelInfo,
397
412
  "dynamic_filter_termination",
@@ -491,21 +506,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
491
506
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
492
507
  }
493
508
 
494
- grpc_connectivity_state CheckConnectivityState() override {
495
- return subchannel_->CheckConnectivityState(health_check_service_name_);
496
- }
497
-
498
509
  void WatchConnectivityState(
499
- grpc_connectivity_state initial_state,
500
510
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
501
511
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
502
512
  auto& watcher_wrapper = watcher_map_[watcher.get()];
503
513
  GPR_ASSERT(watcher_wrapper == nullptr);
504
514
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
505
- Ref(DEBUG_LOCATION, "WatcherWrapper"),
506
- initial_state);
515
+ Ref(DEBUG_LOCATION, "WatcherWrapper"));
507
516
  subchannel_->WatchConnectivityState(
508
- initial_state, health_check_service_name_,
517
+ health_check_service_name_,
509
518
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
510
519
  watcher_wrapper));
511
520
  }
@@ -523,10 +532,19 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
523
532
  return subchannel_->connected_subchannel();
524
533
  }
525
534
 
526
- void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
535
+ void RequestConnection() override { subchannel_->RequestConnection(); }
527
536
 
528
537
  void ResetBackoff() override { subchannel_->ResetBackoff(); }
529
538
 
539
+ void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override
540
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
541
+ std::unique_ptr<InternalSubchannelDataWatcherInterface> internal_watcher(
542
+ static_cast<InternalSubchannelDataWatcherInterface*>(
543
+ watcher.release()));
544
+ internal_watcher->SetSubchannel(subchannel_.get());
545
+ data_watchers_.push_back(std::move(internal_watcher));
546
+ }
547
+
530
548
  const grpc_channel_args* channel_args() override {
531
549
  return subchannel_->channel_args();
532
550
  }
@@ -555,11 +573,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
555
573
  WatcherWrapper(
556
574
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
557
575
  watcher,
558
- RefCountedPtr<SubchannelWrapper> parent,
559
- grpc_connectivity_state initial_state)
560
- : watcher_(std::move(watcher)),
561
- parent_(std::move(parent)),
562
- last_seen_state_(initial_state) {}
576
+ RefCountedPtr<SubchannelWrapper> parent)
577
+ : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
563
578
 
564
579
  ~WatcherWrapper() override {
565
580
  auto* parent = parent_.release(); // ref owned by lambda
@@ -596,14 +611,11 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
596
611
  }
597
612
 
598
613
  WatcherWrapper* MakeReplacement() {
599
- auto* replacement =
600
- new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
614
+ auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
601
615
  replacement_ = replacement;
602
616
  return replacement;
603
617
  }
604
618
 
605
- grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
606
-
607
619
  private:
608
620
  void ApplyUpdateInControlPlaneWorkSerializer()
609
621
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
@@ -645,15 +657,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
645
657
  // Ignore update if the parent WatcherWrapper has been replaced
646
658
  // since this callback was scheduled.
647
659
  if (watcher_ != nullptr) {
648
- last_seen_state_ = state_change.state;
649
- watcher_->OnConnectivityStateChange(state_change.state);
660
+ // Propagate status only in state TF.
661
+ // We specifically want to avoid propagating the status for
662
+ // state IDLE that the real subchannel gave us only for the
663
+ // purpose of keepalive propagation.
664
+ if (state_change.state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
665
+ state_change.status = absl::OkStatus();
666
+ }
667
+ watcher_->OnConnectivityStateChange(state_change.state,
668
+ state_change.status);
650
669
  }
651
670
  }
652
671
 
653
672
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
654
673
  watcher_;
655
674
  RefCountedPtr<SubchannelWrapper> parent_;
656
- grpc_connectivity_state last_seen_state_;
657
675
  WatcherWrapper* replacement_ = nullptr;
658
676
  };
659
677
 
@@ -667,6 +685,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
667
685
  // corresponding WrapperWatcher to cancel on the underlying subchannel.
668
686
  std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
669
687
  ABSL_GUARDED_BY(*chand_->work_serializer_);
688
+ std::vector<std::unique_ptr<InternalSubchannelDataWatcherInterface>>
689
+ data_watchers_ ABSL_GUARDED_BY(*chand_->work_serializer_);
670
690
  };
671
691
 
672
692
  //
@@ -934,7 +954,7 @@ class ClientChannel::ClientChannelControlHelper
934
954
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
935
955
  if (chand_->resolver_ == nullptr) return; // Shutting down.
936
956
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
937
- const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
957
+ const char* extra = GRPC_ERROR_IS_NONE(chand_->disconnect_error_)
938
958
  ? ""
939
959
  : " (ignoring -- channel shutting down)";
940
960
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -942,7 +962,7 @@ class ClientChannel::ClientChannelControlHelper
942
962
  picker.get(), extra);
943
963
  }
944
964
  // Do update only if not shutting down.
945
- if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
965
+ if (GRPC_ERROR_IS_NONE(chand_->disconnect_error_)) {
946
966
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
947
967
  std::move(picker));
948
968
  }
@@ -986,9 +1006,9 @@ class ClientChannel::ClientChannelControlHelper
986
1006
  // ClientChannel implementation
987
1007
  //
988
1008
 
989
- ClientChannel* ClientChannel::GetFromChannel(grpc_channel* channel) {
1009
+ ClientChannel* ClientChannel::GetFromChannel(Channel* channel) {
990
1010
  grpc_channel_element* elem =
991
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
1011
+ grpc_channel_stack_last_element(channel->channel_stack());
992
1012
  if (elem->filter != &kFilterVtable) return nullptr;
993
1013
  return static_cast<ClientChannel*>(elem->channel_data);
994
1014
  }
@@ -1060,7 +1080,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1060
1080
  *error = GRPC_ERROR_NONE;
1061
1081
  default_service_config_ =
1062
1082
  ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1063
- if (*error != GRPC_ERROR_NONE) {
1083
+ if (!GRPC_ERROR_IS_NONE(*error)) {
1064
1084
  default_service_config_.reset();
1065
1085
  return;
1066
1086
  }
@@ -1193,7 +1213,7 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1193
1213
  // and accepts an empty config. If not, we revert to using pick_first
1194
1214
  // lb_policy
1195
1215
  GPR_ASSERT(lb_policy_config != nullptr);
1196
- GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1216
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(parse_error));
1197
1217
  return lb_policy_config;
1198
1218
  }
1199
1219
 
@@ -1214,7 +1234,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1214
1234
  // (d) Address resolution that causes a new LB policy to be created.
1215
1235
  //
1216
1236
  // We track a list of strings to eventually be concatenated and traced.
1217
- absl::InlinedVector<const char*, 3> trace_strings;
1237
+ std::vector<const char*> trace_strings;
1218
1238
  const bool resolution_contains_addresses =
1219
1239
  result.addresses.ok() && !result.addresses->empty();
1220
1240
  if (!resolution_contains_addresses &&
@@ -1487,6 +1507,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1487
1507
  channel_args_, args_to_add.data(), args_to_add.size());
1488
1508
  new_args = config_selector->ModifyChannelArgs(new_args);
1489
1509
  bool enable_retries =
1510
+ !grpc_channel_args_want_minimal_stack(new_args) &&
1490
1511
  grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1491
1512
  // Construct dynamic filter stack.
1492
1513
  std::vector<const grpc_channel_filter*> filters =
@@ -1715,7 +1736,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1715
1736
  // Ping.
1716
1737
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1717
1738
  grpc_error_handle error = DoPingLocked(op);
1718
- if (error != GRPC_ERROR_NONE) {
1739
+ if (!GRPC_ERROR_IS_NONE(error)) {
1719
1740
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1720
1741
  GRPC_ERROR_REF(error));
1721
1742
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
@@ -1731,7 +1752,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1731
1752
  }
1732
1753
  }
1733
1754
  // Disconnect or enter IDLE.
1734
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1755
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1735
1756
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1736
1757
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1737
1758
  grpc_error_std_string(op->disconnect_with_error).c_str());
@@ -1741,7 +1762,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1741
1762
  if (grpc_error_get_int(op->disconnect_with_error,
1742
1763
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1743
1764
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1744
- if (disconnect_error_ == GRPC_ERROR_NONE) {
1765
+ if (GRPC_ERROR_IS_NONE(disconnect_error_)) {
1745
1766
  // Enter IDLE state.
1746
1767
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1747
1768
  "channel entering IDLE", nullptr);
@@ -1749,7 +1770,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1749
1770
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1750
1771
  } else {
1751
1772
  // Disconnect.
1752
- GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1773
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(disconnect_error_));
1753
1774
  disconnect_error_ = op->disconnect_with_error;
1754
1775
  UpdateStateAndPickerLocked(
1755
1776
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
@@ -1944,7 +1965,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1944
1965
  // We do not yet have a dynamic call.
1945
1966
  //
1946
1967
  // If we've previously been cancelled, immediately fail any new batches.
1947
- if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1968
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(calld->cancel_error_))) {
1948
1969
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1949
1970
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1950
1971
  chand, calld,
@@ -2056,7 +2077,7 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2056
2077
  void ClientChannel::CallData::PendingBatchesFail(
2057
2078
  grpc_call_element* elem, grpc_error_handle error,
2058
2079
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2059
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2080
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2060
2081
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2061
2082
  size_t num_batches = 0;
2062
2083
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2160,7 +2181,8 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2160
2181
  chand, calld, grpc_error_std_string(error).c_str(), self,
2161
2182
  calld->resolver_call_canceller_);
2162
2183
  }
2163
- if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2184
+ if (calld->resolver_call_canceller_ == self &&
2185
+ !GRPC_ERROR_IS_NONE(error)) {
2164
2186
  // Remove pick from list of queued picks.
2165
2187
  calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2166
2188
  // Fail pending batches on the call.
@@ -2218,7 +2240,7 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2218
2240
  // Use the ConfigSelector to determine the config for the call.
2219
2241
  ConfigSelector::CallConfig call_config =
2220
2242
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2221
- if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2243
+ if (!GRPC_ERROR_IS_NONE(call_config.error)) return call_config.error;
2222
2244
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2223
2245
  // a ref to the ServiceConfig and caches the right set of parsed configs
2224
2246
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2303,7 +2325,7 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
2303
2325
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2304
2326
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2305
2327
  CallData* calld = static_cast<CallData*>(elem->call_data);
2306
- if (error != GRPC_ERROR_NONE) {
2328
+ if (!GRPC_ERROR_IS_NONE(error)) {
2307
2329
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2308
2330
  gpr_log(GPR_INFO,
2309
2331
  "chand=%p calld=%p: error applying config to call: error=%s",
@@ -2422,7 +2444,7 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2422
2444
  chand, this, channel_stack);
2423
2445
  }
2424
2446
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2425
- if (error != GRPC_ERROR_NONE) {
2447
+ if (!GRPC_ERROR_IS_NONE(error)) {
2426
2448
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2427
2449
  gpr_log(GPR_INFO,
2428
2450
  "chand=%p calld=%p: failed to create dynamic call: error=%s",
@@ -2513,25 +2535,16 @@ class ClientChannel::LoadBalancedCall::Metadata
2513
2535
  // ClientChannel::LoadBalancedCall::LbCallState
2514
2536
  //
2515
2537
 
2516
- class ClientChannel::LoadBalancedCall::LbCallState
2517
- : public LoadBalancingPolicy::CallState {
2518
- public:
2519
- explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2520
-
2521
- void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2522
-
2523
- absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2524
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2525
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2526
- auto& call_attributes = service_config_call_data->call_attributes();
2527
- auto it = call_attributes.find(key);
2528
- if (it == call_attributes.end()) return absl::string_view();
2529
- return it->second;
2530
- }
2531
-
2532
- private:
2533
- LoadBalancedCall* lb_call_;
2534
- };
2538
+ absl::string_view
2539
+ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2540
+ UniqueTypeName type) {
2541
+ auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2542
+ lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2543
+ auto& call_attributes = service_config_call_data->call_attributes();
2544
+ auto it = call_attributes.find(type);
2545
+ if (it == call_attributes.end()) return absl::string_view();
2546
+ return it->second;
2547
+ }
2535
2548
 
2536
2549
  //
2537
2550
  // ClientChannel::LoadBalancedCall::BackendMetricAccessor
@@ -2547,15 +2560,32 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2547
2560
  if (lb_call_->backend_metric_data_ == nullptr &&
2548
2561
  lb_call_->recv_trailing_metadata_ != nullptr) {
2549
2562
  if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2550
- XEndpointLoadMetricsBinMetadata())) {
2563
+ EndpointLoadMetricsBinMetadata())) {
2564
+ BackendMetricAllocator allocator(lb_call_->arena_);
2551
2565
  lb_call_->backend_metric_data_ =
2552
- ParseBackendMetricData(*md, lb_call_->arena_);
2566
+ ParseBackendMetricData(md->as_string_view(), &allocator);
2553
2567
  }
2554
2568
  }
2555
2569
  return lb_call_->backend_metric_data_;
2556
2570
  }
2557
2571
 
2558
2572
  private:
2573
+ class BackendMetricAllocator : public BackendMetricAllocatorInterface {
2574
+ public:
2575
+ explicit BackendMetricAllocator(Arena* arena) : arena_(arena) {}
2576
+
2577
+ BackendMetricData* AllocateBackendMetricData() override {
2578
+ return arena_->New<BackendMetricData>();
2579
+ }
2580
+
2581
+ char* AllocateString(size_t size) override {
2582
+ return static_cast<char*>(arena_->Alloc(size));
2583
+ }
2584
+
2585
+ private:
2586
+ Arena* arena_;
2587
+ };
2588
+
2559
2589
  LoadBalancedCall* lb_call_;
2560
2590
  };
2561
2591
 
@@ -2605,8 +2635,7 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2605
2635
  GRPC_ERROR_UNREF(cancel_error_);
2606
2636
  GRPC_ERROR_UNREF(failure_error_);
2607
2637
  if (backend_metric_data_ != nullptr) {
2608
- backend_metric_data_->LoadBalancingPolicy::BackendMetricAccessor::
2609
- BackendMetricData::~BackendMetricData();
2638
+ backend_metric_data_->BackendMetricData::~BackendMetricData();
2610
2639
  }
2611
2640
  // Make sure there are no remaining pending batches.
2612
2641
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2675,7 +2704,7 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2675
2704
  void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2676
2705
  grpc_error_handle error,
2677
2706
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2678
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2707
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2679
2708
  GRPC_ERROR_UNREF(failure_error_);
2680
2709
  failure_error_ = error;
2681
2710
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -2831,7 +2860,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2831
2860
  // We do not yet have a subchannel call.
2832
2861
  //
2833
2862
  // If we've previously been cancelled, immediately fail any new batches.
2834
- if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2863
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(cancel_error_))) {
2835
2864
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2836
2865
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2837
2866
  chand_, this, grpc_error_std_string(cancel_error_).c_str());
@@ -2908,7 +2937,7 @@ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2908
2937
  "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2909
2938
  self->chand_, self, grpc_error_std_string(error).c_str());
2910
2939
  }
2911
- if (error == GRPC_ERROR_NONE) {
2940
+ if (GRPC_ERROR_IS_NONE(error)) {
2912
2941
  // recv_initial_metadata_flags is not populated for clients
2913
2942
  self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2914
2943
  self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
@@ -2924,7 +2953,7 @@ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2924
2953
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2925
2954
  self->chand_, self, grpc_error_std_string(error).c_str());
2926
2955
  }
2927
- if (*self->recv_message_ != nullptr) {
2956
+ if (self->recv_message_->has_value()) {
2928
2957
  self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2929
2958
  }
2930
2959
  Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
@@ -2948,7 +2977,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2948
2977
  self->lb_subchannel_call_tracker_ != nullptr) {
2949
2978
  // Get the call's status.
2950
2979
  absl::Status status;
2951
- if (error != GRPC_ERROR_NONE) {
2980
+ if (!GRPC_ERROR_IS_NONE(error)) {
2952
2981
  // Get status from error.
2953
2982
  grpc_status_code code;
2954
2983
  std::string message;
@@ -2971,7 +3000,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2971
3000
  self->RecordCallCompletion(status);
2972
3001
  }
2973
3002
  // Chain to original callback.
2974
- if (self->failure_error_ != GRPC_ERROR_NONE) {
3003
+ if (!GRPC_ERROR_IS_NONE(self->failure_error_)) {
2975
3004
  error = self->failure_error_;
2976
3005
  self->failure_error_ = GRPC_ERROR_NONE;
2977
3006
  } else {
@@ -3018,7 +3047,7 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3018
3047
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3019
3048
  on_call_destruction_complete_ = nullptr;
3020
3049
  }
3021
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
3050
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
3022
3051
  PendingBatchesFail(error, YieldCallCombiner);
3023
3052
  } else {
3024
3053
  PendingBatchesResume();
@@ -3055,7 +3084,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3055
3084
  chand, lb_call, grpc_error_std_string(error).c_str(), self,
3056
3085
  lb_call->lb_call_canceller_);
3057
3086
  }
3058
- if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3087
+ if (lb_call->lb_call_canceller_ == self && !GRPC_ERROR_IS_NONE(error)) {
3059
3088
  lb_call->call_dispatch_controller_->Commit();
3060
3089
  // Remove pick from list of queued picks.
3061
3090
  lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
@@ -3106,7 +3135,7 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3106
3135
  void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3107
3136
  grpc_error_handle error) {
3108
3137
  auto* self = static_cast<LoadBalancedCall*>(arg);
3109
- if (error != GRPC_ERROR_NONE) {
3138
+ if (!GRPC_ERROR_IS_NONE(error)) {
3110
3139
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3111
3140
  gpr_log(GPR_INFO,
3112
3141
  "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
@@ -19,37 +19,60 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <stddef.h>
23
+
24
+ #include <atomic>
22
25
  #include <map>
23
26
  #include <memory>
24
27
  #include <set>
25
28
  #include <string>
29
+ #include <utility>
26
30
 
31
+ #include "absl/base/thread_annotations.h"
27
32
  #include "absl/status/status.h"
33
+ #include "absl/strings/string_view.h"
28
34
  #include "absl/types/optional.h"
29
35
 
30
- #include <grpc/support/log.h>
36
+ #include <grpc/impl/codegen/connectivity_state.h>
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include <grpc/support/atm.h>
31
39
 
32
40
  #include "src/core/ext/filters/client_channel/client_channel_factory.h"
33
41
  #include "src/core/ext/filters/client_channel/config_selector.h"
34
42
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
35
43
  #include "src/core/ext/filters/client_channel/lb_policy.h"
36
- #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
37
- #include "src/core/ext/filters/client_channel/retry_throttle.h"
44
+ #include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h"
38
45
  #include "src/core/ext/filters/client_channel/subchannel.h"
39
46
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
40
47
  #include "src/core/lib/channel/call_tracer.h"
48
+ #include "src/core/lib/channel/channel_fwd.h"
49
+ #include "src/core/lib/channel/channel_stack.h"
50
+ #include "src/core/lib/channel/channelz.h"
41
51
  #include "src/core/lib/channel/context.h"
52
+ #include "src/core/lib/gpr/time_precise.h"
53
+ #include "src/core/lib/gprpp/orphanable.h"
54
+ #include "src/core/lib/gprpp/ref_counted.h"
42
55
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
43
56
  #include "src/core/lib/gprpp/sync.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/call_combiner.h"
60
+ #include "src/core/lib/iomgr/closure.h"
44
61
  #include "src/core/lib/iomgr/error.h"
62
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
45
63
  #include "src/core/lib/iomgr/polling_entity.h"
46
64
  #include "src/core/lib/iomgr/work_serializer.h"
47
65
  #include "src/core/lib/resolver/resolver.h"
66
+ #include "src/core/lib/resource_quota/arena.h"
48
67
  #include "src/core/lib/service_config/service_config.h"
49
68
  #include "src/core/lib/service_config/service_config_call_data.h"
50
69
  #include "src/core/lib/service_config/service_config_parser.h"
70
+ #include "src/core/lib/slice/slice.h"
71
+ #include "src/core/lib/slice/slice_buffer.h"
51
72
  #include "src/core/lib/surface/channel.h"
52
73
  #include "src/core/lib/transport/connectivity_state.h"
74
+ #include "src/core/lib/transport/metadata_batch.h"
75
+ #include "src/core/lib/transport/transport.h"
53
76
 
54
77
  //
55
78
  // Client channel filter
@@ -91,7 +114,7 @@ class ClientChannel {
91
114
 
92
115
  // Returns the ClientChannel object from channel, or null if channel
93
116
  // is not a client channel.
94
- static ClientChannel* GetFromChannel(grpc_channel* channel);
117
+ static ClientChannel* GetFromChannel(Channel* channel);
95
118
 
96
119
  grpc_connectivity_state CheckConnectivityState(bool try_to_connect);
97
120
 
@@ -361,6 +384,20 @@ class ClientChannel {
361
384
  class ClientChannel::LoadBalancedCall
362
385
  : public InternallyRefCounted<LoadBalancedCall, kUnrefCallDtor> {
363
386
  public:
387
+ class LbCallState : public LoadBalancingPolicy::CallState {
388
+ public:
389
+ explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
390
+
391
+ void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
392
+
393
+ // Internal API to allow first-party LB policies to access per-call
394
+ // attributes set by the ConfigSelector.
395
+ absl::string_view GetCallAttribute(UniqueTypeName type);
396
+
397
+ private:
398
+ LoadBalancedCall* lb_call_;
399
+ };
400
+
364
401
  // If on_call_destruction_complete is non-null, then it will be
365
402
  // invoked once the LoadBalancedCall is completely destroyed.
366
403
  // If it is null, then the caller is responsible for checking whether
@@ -396,7 +433,6 @@ class ClientChannel::LoadBalancedCall
396
433
  private:
397
434
  class LbQueuedCallCanceller;
398
435
  class Metadata;
399
- class LbCallState;
400
436
  class BackendMetricAccessor;
401
437
 
402
438
  // Returns the index into pending_batches_ to be used for batch.
@@ -481,8 +517,7 @@ class ClientChannel::LoadBalancedCall
481
517
  ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_) = nullptr;
482
518
 
483
519
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
484
- const LoadBalancingPolicy::BackendMetricAccessor::BackendMetricData*
485
- backend_metric_data_ = nullptr;
520
+ const BackendMetricData* backend_metric_data_ = nullptr;
486
521
  std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
487
522
  lb_subchannel_call_tracker_;
488
523
 
@@ -499,7 +534,7 @@ class ClientChannel::LoadBalancedCall
499
534
  grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
500
535
 
501
536
  // For intercepting recv_message_ready.
502
- OrphanablePtr<ByteStream>* recv_message_ = nullptr;
537
+ absl::optional<SliceBuffer>* recv_message_ = nullptr;
503
538
  grpc_closure recv_message_ready_;
504
539
  grpc_closure* original_recv_message_ready_ = nullptr;
505
540
 
@@ -20,14 +20,12 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
22
22
 
23
- #include <grpc/support/string_util.h>
23
+ #include <map>
24
24
 
25
- #include "src/core/ext/filters/client_channel/client_channel.h"
26
- #include "src/core/lib/channel/channelz_registry.h"
27
- #include "src/core/lib/gpr/useful.h"
28
- #include "src/core/lib/surface/channel.h"
29
25
  #include "src/core/lib/transport/connectivity_state.h"
30
26
 
27
+ // IWYU pragma: no_include <type_traits>
28
+
31
29
  namespace grpc_core {
32
30
  namespace channelz {
33
31