grpc 1.47.0 → 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 (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -19,7 +19,8 @@
19
19
  #ifndef GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H
20
20
  #define GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H
21
21
 
22
- // IWYU pragma: private
22
+ // IWYU pragma: private, include <grpc/grpc.h>
23
+ // IWYU pragma: friend "src/.*"
23
24
 
24
25
  #ifdef __cplusplus
25
26
  extern "C" {
@@ -19,7 +19,8 @@
19
19
  #ifndef GRPC_IMPL_CODEGEN_GPR_TYPES_H
20
20
  #define GRPC_IMPL_CODEGEN_GPR_TYPES_H
21
21
 
22
- // IWYU pragma: private
22
+ // IWYU pragma: private, include <grpc/grpc.h>
23
+ // IWYU pragma: friend "src/.*"
23
24
 
24
25
  #include <grpc/impl/codegen/port_platform.h>
25
26
 
@@ -19,7 +19,8 @@
19
19
  #ifndef GRPC_IMPL_CODEGEN_GRPC_TYPES_H
20
20
  #define GRPC_IMPL_CODEGEN_GRPC_TYPES_H
21
21
 
22
- // IWYU pragma: private
22
+ // IWYU pragma: private, include <grpc/grpc.h>
23
+ // IWYU pragma: friend "src/.*"
23
24
 
24
25
  #include <grpc/impl/codegen/port_platform.h>
25
26
 
@@ -49,10 +49,11 @@
49
49
  #endif // GPR_ABSEIL_SYNC
50
50
 
51
51
  /*
52
- * Defines GRPC_ERROR_IS_ABSEIL_STATUS to use absl::Status for grpc_error_handle
52
+ * Defines GRPC_ERROR_IS_NOT_ABSEIL_STATUS to not use absl::Status for
53
+ * grpc_error_handle. This is a temporary knob for migration process.
53
54
  */
54
- #ifndef GRPC_ERROR_IS_ABSEIL_STATUS
55
- // #define GRPC_ERROR_IS_ABSEIL_STATUS 1
55
+ #ifndef GRPC_ERROR_IS_NOT_ABSEIL_STATUS
56
+ #define GRPC_ERROR_IS_ABSEIL_STATUS 1
56
57
  #endif
57
58
 
58
59
  /* Get windows.h included everywhere (we need it) */
@@ -220,6 +221,8 @@
220
221
  #define GRPC_TIMER_USE_GENERIC 1
221
222
  #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
222
223
  #define GRPC_POSIX_WAKEUP_FD 1
224
+ #define GRPC_HAVE_MSG_NOSIGNAL 1
225
+ #define GRPC_HAVE_UNIX_SOCKET 1
223
226
  #define GRPC_ARES 0
224
227
  #define GPR_NO_AUTODETECT_PLATFORM 1
225
228
  #elif defined(__APPLE__)
@@ -20,7 +20,10 @@
20
20
 
21
21
  #include <grpc/census.h>
22
22
  #include <grpc/grpc.h>
23
+ #include <grpc/impl/codegen/grpc_types.h>
23
24
 
25
+ #include "src/core/lib/channel/context.h"
26
+ #include "src/core/lib/debug/trace.h"
24
27
  #include "src/core/lib/surface/api_trace.h"
25
28
  #include "src/core/lib/surface/call.h"
26
29
 
@@ -19,22 +19,34 @@
19
19
 
20
20
  #include "src/core/ext/filters/channel_idle/channel_idle_filter.h"
21
21
 
22
- #include <limits.h>
23
22
  #include <stdlib.h>
24
23
 
25
- #include <atomic>
26
- #include <limits>
24
+ #include <functional>
25
+ #include <utility>
26
+
27
+ #include "absl/types/optional.h"
28
+
29
+ #include <grpc/impl/codegen/grpc_types.h>
30
+ #include <grpc/support/log.h>
27
31
 
28
32
  #include "src/core/lib/channel/channel_args.h"
29
33
  #include "src/core/lib/channel/channel_stack_builder.h"
30
34
  #include "src/core/lib/channel/promise_based_filter.h"
31
35
  #include "src/core/lib/config/core_configuration.h"
32
- #include "src/core/lib/iomgr/timer.h"
36
+ #include "src/core/lib/debug/trace.h"
37
+ #include "src/core/lib/gprpp/debug_location.h"
38
+ #include "src/core/lib/gprpp/orphanable.h"
39
+ #include "src/core/lib/iomgr/closure.h"
40
+ #include "src/core/lib/iomgr/error.h"
41
+ #include "src/core/lib/iomgr/exec_ctx.h"
33
42
  #include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
34
43
  #include "src/core/lib/promise/loop.h"
44
+ #include "src/core/lib/promise/poll.h"
35
45
  #include "src/core/lib/promise/promise.h"
36
46
  #include "src/core/lib/promise/sleep.h"
37
47
  #include "src/core/lib/promise/try_seq.h"
48
+ #include "src/core/lib/surface/channel_init.h"
49
+ #include "src/core/lib/surface/channel_stack_type.h"
38
50
  #include "src/core/lib/transport/http2_errors.h"
39
51
 
40
52
  namespace grpc_core {
@@ -204,7 +216,7 @@ ArenaPromise<ServerMetadataHandle> ChannelIdleFilter::MakeCallPromise(
204
216
 
205
217
  bool ChannelIdleFilter::StartTransportOp(grpc_transport_op* op) {
206
218
  // Catch the disconnect_with_error transport op.
207
- if (op->disconnect_with_error != GRPC_ERROR_NONE) Shutdown();
219
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) Shutdown();
208
220
  // Pass the op to the next filter.
209
221
  return false;
210
222
  }
@@ -17,9 +17,25 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <memory>
21
+
22
+ #include "absl/status/status.h"
23
+ #include "absl/status/statusor.h"
24
+
25
+ #include <grpc/impl/codegen/connectivity_state.h>
26
+
20
27
  #include "src/core/ext/filters/channel_idle/idle_filter_state.h"
28
+ #include "src/core/lib/channel/channel_args.h"
29
+ #include "src/core/lib/channel/channel_fwd.h"
30
+ #include "src/core/lib/channel/channel_stack.h"
21
31
  #include "src/core/lib/channel/promise_based_filter.h"
32
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
22
33
  #include "src/core/lib/gprpp/single_set_ptr.h"
34
+ #include "src/core/lib/gprpp/time.h"
35
+ #include "src/core/lib/promise/activity.h"
36
+ #include "src/core/lib/promise/arena_promise.h"
37
+ #include "src/core/lib/transport/connectivity_state.h"
38
+ #include "src/core/lib/transport/transport.h"
23
39
 
24
40
  namespace grpc_core {
25
41
 
@@ -17,6 +17,8 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <stdint.h>
21
+
20
22
  #include <atomic>
21
23
 
22
24
  namespace grpc_core {
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include <inttypes.h>
24
24
 
25
+ #include "absl/status/status.h"
26
+
25
27
  #include <grpc/support/alloc.h>
26
28
  #include <grpc/support/log.h>
27
29
  #include <grpc/support/sync.h>
@@ -117,7 +119,7 @@ static void g_poller_unref() {
117
119
 
118
120
  static void run_poller(void* arg, grpc_error_handle error) {
119
121
  backup_poller* p = static_cast<backup_poller*>(arg);
120
- if (error != GRPC_ERROR_NONE) {
122
+ if (!GRPC_ERROR_IS_NONE(error)) {
121
123
  if (error != GRPC_ERROR_CANCELLED) {
122
124
  GRPC_LOG_IF_ERROR("run_poller", GRPC_ERROR_REF(error));
123
125
  }
@@ -25,8 +25,8 @@
25
25
  #include <grpc/support/log.h>
26
26
 
27
27
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
+ #include "src/core/lib/channel/channel_fwd.h"
28
29
  #include "src/core/lib/channel/channel_stack.h"
29
- #include "src/core/lib/channel/channel_stack_builder.h"
30
30
  #include "src/core/lib/debug/trace.h"
31
31
  #include "src/core/lib/gprpp/dual_ref_counted.h"
32
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -179,7 +179,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
179
179
 
180
180
  static void TimeoutComplete(void* arg, grpc_error_handle error) {
181
181
  auto* self = static_cast<StateWatcher*>(arg);
182
- self->timer_fired_ = error == GRPC_ERROR_NONE;
182
+ self->timer_fired_ = GRPC_ERROR_IS_NONE(error);
183
183
  // If this is a client channel (not a lame channel), cancel the watch.
184
184
  ClientChannel* client_channel =
185
185
  ClientChannel::GetFromChannel(self->channel_.get());
@@ -30,6 +30,7 @@
30
30
 
31
31
  #include "absl/container/inlined_vector.h"
32
32
  #include "absl/memory/memory.h"
33
+ #include "absl/status/status.h"
33
34
  #include "absl/status/statusor.h"
34
35
  #include "absl/strings/cord.h"
35
36
  #include "absl/strings/numbers.h"
@@ -96,9 +97,7 @@
96
97
 
97
98
  namespace grpc_core {
98
99
 
99
- using internal::ClientChannelGlobalParsedConfig;
100
100
  using internal::ClientChannelMethodParsedConfig;
101
- using internal::ClientChannelServiceConfigParser;
102
101
 
103
102
  TraceFlag grpc_client_channel_trace(false, "client_channel");
104
103
  TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
@@ -507,21 +506,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
507
506
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
508
507
  }
509
508
 
510
- grpc_connectivity_state CheckConnectivityState() override {
511
- return subchannel_->CheckConnectivityState(health_check_service_name_);
512
- }
513
-
514
509
  void WatchConnectivityState(
515
- grpc_connectivity_state initial_state,
516
510
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
517
511
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
518
512
  auto& watcher_wrapper = watcher_map_[watcher.get()];
519
513
  GPR_ASSERT(watcher_wrapper == nullptr);
520
514
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
521
- Ref(DEBUG_LOCATION, "WatcherWrapper"),
522
- initial_state);
515
+ Ref(DEBUG_LOCATION, "WatcherWrapper"));
523
516
  subchannel_->WatchConnectivityState(
524
- initial_state, health_check_service_name_,
517
+ health_check_service_name_,
525
518
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
526
519
  watcher_wrapper));
527
520
  }
@@ -580,11 +573,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
580
573
  WatcherWrapper(
581
574
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
582
575
  watcher,
583
- RefCountedPtr<SubchannelWrapper> parent,
584
- grpc_connectivity_state initial_state)
585
- : watcher_(std::move(watcher)),
586
- parent_(std::move(parent)),
587
- last_seen_state_(initial_state) {}
576
+ RefCountedPtr<SubchannelWrapper> parent)
577
+ : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
588
578
 
589
579
  ~WatcherWrapper() override {
590
580
  auto* parent = parent_.release(); // ref owned by lambda
@@ -621,14 +611,11 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
621
611
  }
622
612
 
623
613
  WatcherWrapper* MakeReplacement() {
624
- auto* replacement =
625
- new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
614
+ auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
626
615
  replacement_ = replacement;
627
616
  return replacement;
628
617
  }
629
618
 
630
- grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
631
-
632
619
  private:
633
620
  void ApplyUpdateInControlPlaneWorkSerializer()
634
621
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
@@ -670,15 +657,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
670
657
  // Ignore update if the parent WatcherWrapper has been replaced
671
658
  // since this callback was scheduled.
672
659
  if (watcher_ != nullptr) {
673
- last_seen_state_ = state_change.state;
674
- 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);
675
669
  }
676
670
  }
677
671
 
678
672
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
679
673
  watcher_;
680
674
  RefCountedPtr<SubchannelWrapper> parent_;
681
- grpc_connectivity_state last_seen_state_;
682
675
  WatcherWrapper* replacement_ = nullptr;
683
676
  };
684
677
 
@@ -961,7 +954,7 @@ class ClientChannel::ClientChannelControlHelper
961
954
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
962
955
  if (chand_->resolver_ == nullptr) return; // Shutting down.
963
956
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
964
- const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
957
+ const char* extra = GRPC_ERROR_IS_NONE(chand_->disconnect_error_)
965
958
  ? ""
966
959
  : " (ignoring -- channel shutting down)";
967
960
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -969,7 +962,7 @@ class ClientChannel::ClientChannelControlHelper
969
962
  picker.get(), extra);
970
963
  }
971
964
  // Do update only if not shutting down.
972
- if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
965
+ if (GRPC_ERROR_IS_NONE(chand_->disconnect_error_)) {
973
966
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
974
967
  std::move(picker));
975
968
  }
@@ -1087,7 +1080,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1087
1080
  *error = GRPC_ERROR_NONE;
1088
1081
  default_service_config_ =
1089
1082
  ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1090
- if (*error != GRPC_ERROR_NONE) {
1083
+ if (!GRPC_ERROR_IS_NONE(*error)) {
1091
1084
  default_service_config_.reset();
1092
1085
  return;
1093
1086
  }
@@ -1220,7 +1213,7 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1220
1213
  // and accepts an empty config. If not, we revert to using pick_first
1221
1214
  // lb_policy
1222
1215
  GPR_ASSERT(lb_policy_config != nullptr);
1223
- GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1216
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(parse_error));
1224
1217
  return lb_policy_config;
1225
1218
  }
1226
1219
 
@@ -1241,7 +1234,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1241
1234
  // (d) Address resolution that causes a new LB policy to be created.
1242
1235
  //
1243
1236
  // We track a list of strings to eventually be concatenated and traced.
1244
- absl::InlinedVector<const char*, 3> trace_strings;
1237
+ std::vector<const char*> trace_strings;
1245
1238
  const bool resolution_contains_addresses =
1246
1239
  result.addresses.ok() && !result.addresses->empty();
1247
1240
  if (!resolution_contains_addresses &&
@@ -1514,6 +1507,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1514
1507
  channel_args_, args_to_add.data(), args_to_add.size());
1515
1508
  new_args = config_selector->ModifyChannelArgs(new_args);
1516
1509
  bool enable_retries =
1510
+ !grpc_channel_args_want_minimal_stack(new_args) &&
1517
1511
  grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1518
1512
  // Construct dynamic filter stack.
1519
1513
  std::vector<const grpc_channel_filter*> filters =
@@ -1742,7 +1736,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1742
1736
  // Ping.
1743
1737
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1744
1738
  grpc_error_handle error = DoPingLocked(op);
1745
- if (error != GRPC_ERROR_NONE) {
1739
+ if (!GRPC_ERROR_IS_NONE(error)) {
1746
1740
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1747
1741
  GRPC_ERROR_REF(error));
1748
1742
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
@@ -1758,7 +1752,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1758
1752
  }
1759
1753
  }
1760
1754
  // Disconnect or enter IDLE.
1761
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1755
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1762
1756
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1763
1757
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1764
1758
  grpc_error_std_string(op->disconnect_with_error).c_str());
@@ -1768,7 +1762,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1768
1762
  if (grpc_error_get_int(op->disconnect_with_error,
1769
1763
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1770
1764
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1771
- if (disconnect_error_ == GRPC_ERROR_NONE) {
1765
+ if (GRPC_ERROR_IS_NONE(disconnect_error_)) {
1772
1766
  // Enter IDLE state.
1773
1767
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1774
1768
  "channel entering IDLE", nullptr);
@@ -1776,7 +1770,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1776
1770
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1777
1771
  } else {
1778
1772
  // Disconnect.
1779
- GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1773
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(disconnect_error_));
1780
1774
  disconnect_error_ = op->disconnect_with_error;
1781
1775
  UpdateStateAndPickerLocked(
1782
1776
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
@@ -1971,7 +1965,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1971
1965
  // We do not yet have a dynamic call.
1972
1966
  //
1973
1967
  // If we've previously been cancelled, immediately fail any new batches.
1974
- if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1968
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(calld->cancel_error_))) {
1975
1969
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1976
1970
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1977
1971
  chand, calld,
@@ -2083,7 +2077,7 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2083
2077
  void ClientChannel::CallData::PendingBatchesFail(
2084
2078
  grpc_call_element* elem, grpc_error_handle error,
2085
2079
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2086
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2080
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2087
2081
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2088
2082
  size_t num_batches = 0;
2089
2083
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2187,7 +2181,8 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2187
2181
  chand, calld, grpc_error_std_string(error).c_str(), self,
2188
2182
  calld->resolver_call_canceller_);
2189
2183
  }
2190
- if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2184
+ if (calld->resolver_call_canceller_ == self &&
2185
+ !GRPC_ERROR_IS_NONE(error)) {
2191
2186
  // Remove pick from list of queued picks.
2192
2187
  calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2193
2188
  // Fail pending batches on the call.
@@ -2245,7 +2240,7 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2245
2240
  // Use the ConfigSelector to determine the config for the call.
2246
2241
  ConfigSelector::CallConfig call_config =
2247
2242
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2248
- if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2243
+ if (!GRPC_ERROR_IS_NONE(call_config.error)) return call_config.error;
2249
2244
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2250
2245
  // a ref to the ServiceConfig and caches the right set of parsed configs
2251
2246
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2330,7 +2325,7 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
2330
2325
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2331
2326
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2332
2327
  CallData* calld = static_cast<CallData*>(elem->call_data);
2333
- if (error != GRPC_ERROR_NONE) {
2328
+ if (!GRPC_ERROR_IS_NONE(error)) {
2334
2329
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2335
2330
  gpr_log(GPR_INFO,
2336
2331
  "chand=%p calld=%p: error applying config to call: error=%s",
@@ -2449,7 +2444,7 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2449
2444
  chand, this, channel_stack);
2450
2445
  }
2451
2446
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2452
- if (error != GRPC_ERROR_NONE) {
2447
+ if (!GRPC_ERROR_IS_NONE(error)) {
2453
2448
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2454
2449
  gpr_log(GPR_INFO,
2455
2450
  "chand=%p calld=%p: failed to create dynamic call: error=%s",
@@ -2540,25 +2535,16 @@ class ClientChannel::LoadBalancedCall::Metadata
2540
2535
  // ClientChannel::LoadBalancedCall::LbCallState
2541
2536
  //
2542
2537
 
2543
- class ClientChannel::LoadBalancedCall::LbCallState
2544
- : public LoadBalancingPolicy::CallState {
2545
- public:
2546
- explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2547
-
2548
- void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2549
-
2550
- absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2551
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2552
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2553
- auto& call_attributes = service_config_call_data->call_attributes();
2554
- auto it = call_attributes.find(key);
2555
- if (it == call_attributes.end()) return absl::string_view();
2556
- return it->second;
2557
- }
2558
-
2559
- private:
2560
- LoadBalancedCall* lb_call_;
2561
- };
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
+ }
2562
2548
 
2563
2549
  //
2564
2550
  // ClientChannel::LoadBalancedCall::BackendMetricAccessor
@@ -2718,7 +2704,7 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2718
2704
  void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2719
2705
  grpc_error_handle error,
2720
2706
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2721
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2707
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2722
2708
  GRPC_ERROR_UNREF(failure_error_);
2723
2709
  failure_error_ = error;
2724
2710
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -2874,7 +2860,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2874
2860
  // We do not yet have a subchannel call.
2875
2861
  //
2876
2862
  // If we've previously been cancelled, immediately fail any new batches.
2877
- if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2863
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(cancel_error_))) {
2878
2864
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2879
2865
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2880
2866
  chand_, this, grpc_error_std_string(cancel_error_).c_str());
@@ -2951,7 +2937,7 @@ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2951
2937
  "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2952
2938
  self->chand_, self, grpc_error_std_string(error).c_str());
2953
2939
  }
2954
- if (error == GRPC_ERROR_NONE) {
2940
+ if (GRPC_ERROR_IS_NONE(error)) {
2955
2941
  // recv_initial_metadata_flags is not populated for clients
2956
2942
  self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2957
2943
  self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
@@ -2967,7 +2953,7 @@ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2967
2953
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2968
2954
  self->chand_, self, grpc_error_std_string(error).c_str());
2969
2955
  }
2970
- if (*self->recv_message_ != nullptr) {
2956
+ if (self->recv_message_->has_value()) {
2971
2957
  self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2972
2958
  }
2973
2959
  Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
@@ -2991,7 +2977,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2991
2977
  self->lb_subchannel_call_tracker_ != nullptr) {
2992
2978
  // Get the call's status.
2993
2979
  absl::Status status;
2994
- if (error != GRPC_ERROR_NONE) {
2980
+ if (!GRPC_ERROR_IS_NONE(error)) {
2995
2981
  // Get status from error.
2996
2982
  grpc_status_code code;
2997
2983
  std::string message;
@@ -3014,7 +3000,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
3014
3000
  self->RecordCallCompletion(status);
3015
3001
  }
3016
3002
  // Chain to original callback.
3017
- if (self->failure_error_ != GRPC_ERROR_NONE) {
3003
+ if (!GRPC_ERROR_IS_NONE(self->failure_error_)) {
3018
3004
  error = self->failure_error_;
3019
3005
  self->failure_error_ = GRPC_ERROR_NONE;
3020
3006
  } else {
@@ -3061,7 +3047,7 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3061
3047
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3062
3048
  on_call_destruction_complete_ = nullptr;
3063
3049
  }
3064
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
3050
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
3065
3051
  PendingBatchesFail(error, YieldCallCombiner);
3066
3052
  } else {
3067
3053
  PendingBatchesResume();
@@ -3098,7 +3084,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3098
3084
  chand, lb_call, grpc_error_std_string(error).c_str(), self,
3099
3085
  lb_call->lb_call_canceller_);
3100
3086
  }
3101
- if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3087
+ if (lb_call->lb_call_canceller_ == self && !GRPC_ERROR_IS_NONE(error)) {
3102
3088
  lb_call->call_dispatch_controller_->Commit();
3103
3089
  // Remove pick from list of queued picks.
3104
3090
  lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
@@ -3149,7 +3135,7 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3149
3135
  void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3150
3136
  grpc_error_handle error) {
3151
3137
  auto* self = static_cast<LoadBalancedCall*>(arg);
3152
- if (error != GRPC_ERROR_NONE) {
3138
+ if (!GRPC_ERROR_IS_NONE(error)) {
3153
3139
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3154
3140
  gpr_log(GPR_INFO,
3155
3141
  "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
@@ -30,6 +30,7 @@
30
30
 
31
31
  #include "absl/base/thread_annotations.h"
32
32
  #include "absl/status/status.h"
33
+ #include "absl/strings/string_view.h"
33
34
  #include "absl/types/optional.h"
34
35
 
35
36
  #include <grpc/impl/codegen/connectivity_state.h>
@@ -44,8 +45,8 @@
44
45
  #include "src/core/ext/filters/client_channel/subchannel.h"
45
46
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
46
47
  #include "src/core/lib/channel/call_tracer.h"
48
+ #include "src/core/lib/channel/channel_fwd.h"
47
49
  #include "src/core/lib/channel/channel_stack.h"
48
- #include "src/core/lib/channel/channel_stack_builder.h"
49
50
  #include "src/core/lib/channel/channelz.h"
50
51
  #include "src/core/lib/channel/context.h"
51
52
  #include "src/core/lib/gpr/time_precise.h"
@@ -54,6 +55,7 @@
54
55
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
55
56
  #include "src/core/lib/gprpp/sync.h"
56
57
  #include "src/core/lib/gprpp/time.h"
58
+ #include "src/core/lib/gprpp/unique_type_name.h"
57
59
  #include "src/core/lib/iomgr/call_combiner.h"
58
60
  #include "src/core/lib/iomgr/closure.h"
59
61
  #include "src/core/lib/iomgr/error.h"
@@ -66,8 +68,8 @@
66
68
  #include "src/core/lib/service_config/service_config_call_data.h"
67
69
  #include "src/core/lib/service_config/service_config_parser.h"
68
70
  #include "src/core/lib/slice/slice.h"
71
+ #include "src/core/lib/slice/slice_buffer.h"
69
72
  #include "src/core/lib/surface/channel.h"
70
- #include "src/core/lib/transport/byte_stream.h"
71
73
  #include "src/core/lib/transport/connectivity_state.h"
72
74
  #include "src/core/lib/transport/metadata_batch.h"
73
75
  #include "src/core/lib/transport/transport.h"
@@ -382,6 +384,20 @@ class ClientChannel {
382
384
  class ClientChannel::LoadBalancedCall
383
385
  : public InternallyRefCounted<LoadBalancedCall, kUnrefCallDtor> {
384
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
+
385
401
  // If on_call_destruction_complete is non-null, then it will be
386
402
  // invoked once the LoadBalancedCall is completely destroyed.
387
403
  // If it is null, then the caller is responsible for checking whether
@@ -417,7 +433,6 @@ class ClientChannel::LoadBalancedCall
417
433
  private:
418
434
  class LbQueuedCallCanceller;
419
435
  class Metadata;
420
- class LbCallState;
421
436
  class BackendMetricAccessor;
422
437
 
423
438
  // Returns the index into pending_batches_ to be used for batch.
@@ -519,7 +534,7 @@ class ClientChannel::LoadBalancedCall
519
534
  grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
520
535
 
521
536
  // For intercepting recv_message_ready.
522
- OrphanablePtr<ByteStream>* recv_message_ = nullptr;
537
+ absl::optional<SliceBuffer>* recv_message_ = nullptr;
523
538
  grpc_closure recv_message_ready_;
524
539
  grpc_closure* original_recv_message_ready_ = nullptr;
525
540
 
@@ -28,7 +28,7 @@
28
28
  #include <grpc/slice.h>
29
29
  #include <grpc/support/log.h>
30
30
 
31
- #include "src/core/lib/channel/channel_stack.h"
31
+ #include "src/core/lib/channel/channel_fwd.h"
32
32
  #include "src/core/lib/gprpp/ref_counted.h"
33
33
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
34
34
  #include "src/core/lib/iomgr/error.h"
@@ -29,7 +29,7 @@
29
29
  #include "src/core/lib/iomgr/error.h"
30
30
  #include "src/core/lib/iomgr/iomgr_fwd.h"
31
31
  #include "src/core/lib/iomgr/resolved_address.h"
32
- #include "src/core/lib/transport/transport.h"
32
+ #include "src/core/lib/transport/transport_fwd.h"
33
33
 
34
34
  namespace grpc_core {
35
35