grpc 1.83.1 → 1.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +21 -17
  3. data/include/grpc/credentials.h +10 -0
  4. data/include/grpc/grpc_security_constants.h +2 -0
  5. data/include/grpc/impl/channel_arg_names.h +9 -0
  6. data/src/core/call/call_filters.h +4 -2
  7. data/src/core/call/client_call.cc +20 -8
  8. data/src/core/call/client_call.h +4 -0
  9. data/src/core/call/interception_chain.cc +2 -0
  10. data/src/core/call/interception_chain.h +14 -1
  11. data/src/core/call/metadata.cc +1 -3
  12. data/src/core/call/metadata_batch.h +13 -5
  13. data/src/core/call/server_call.cc +31 -14
  14. data/src/core/call/server_call.h +4 -0
  15. data/src/core/channelz/text_encode.cc +9 -4
  16. data/src/core/channelz/v2tov1/convert.cc +2 -2
  17. data/src/core/client_channel/backup_poller.cc +1 -2
  18. data/src/core/client_channel/client_channel.cc +6 -33
  19. data/src/core/client_channel/client_channel_filter.cc +22 -55
  20. data/src/core/client_channel/client_channel_filter.h +2 -2
  21. data/src/core/client_channel/client_channel_service_config.cc +3 -19
  22. data/src/core/client_channel/direct_channel.cc +7 -1
  23. data/src/core/client_channel/direct_channel.h +2 -2
  24. data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
  25. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
  26. data/src/core/client_channel/subchannel.cc +310 -1058
  27. data/src/core/client_channel/subchannel.h +44 -329
  28. data/src/core/client_channel/subchannel_metrics.cc +48 -0
  29. data/src/core/client_channel/subchannel_metrics.h +60 -0
  30. data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
  31. data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
  32. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
  33. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
  34. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
  35. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
  36. data/src/core/credentials/call/json_util.h +1 -0
  37. data/src/core/credentials/call/jwt/json_token.cc +10 -2
  38. data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
  39. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
  40. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
  41. data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
  42. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
  43. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
  44. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
  45. data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
  46. data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
  47. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
  48. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
  49. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
  50. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
  51. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
  52. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
  53. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
  54. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
  55. data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
  56. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
  57. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
  58. data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
  59. data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
  60. data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
  61. data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
  62. data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
  63. data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
  64. data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
  65. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
  67. data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
  68. data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
  69. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  70. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  71. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
  75. data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
  76. data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
  77. data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
  78. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
  79. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
  80. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
  81. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
  82. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
  83. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
  84. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
  85. data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
  86. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
  87. data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
  88. data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
  92. data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
  93. data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
  97. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
  98. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
  99. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
  100. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
  103. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
  104. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
  105. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
  106. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
  107. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
  108. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
  109. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
  110. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
  111. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
  112. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
  113. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
  114. data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
  115. data/src/core/filter/auth/server_auth_filter.cc +2 -3
  116. data/src/core/filter/composite/composite_filter.cc +45 -33
  117. data/src/core/filter/composite/composite_filter.h +5 -4
  118. data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
  119. data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
  120. data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
  121. data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
  122. data/src/core/filter/filter_args.h +13 -2
  123. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
  124. data/src/core/handshaker/security/security_handshaker.cc +9 -6
  125. data/src/core/lib/channel/channel_stack.cc +3 -0
  126. data/src/core/lib/channel/channel_stack.h +2 -0
  127. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
  128. data/src/core/lib/channel/promise_based_filter.cc +132 -20
  129. data/src/core/lib/channel/promise_based_filter.h +42 -12
  130. data/src/core/lib/compression/compression_internal.cc +4 -5
  131. data/src/core/lib/debug/trace_flags.cc +8 -0
  132. data/src/core/lib/debug/trace_flags.h +3 -0
  133. data/src/core/lib/event_engine/ares_resolver.cc +54 -50
  134. data/src/core/lib/event_engine/ares_resolver.h +3 -2
  135. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
  136. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
  137. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
  138. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
  139. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
  141. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
  142. data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
  143. data/src/core/lib/experiments/experiments.cc +60 -96
  144. data/src/core/lib/experiments/experiments.h +34 -50
  145. data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
  146. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
  147. data/src/core/lib/iomgr/error.cc +2 -6
  148. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  149. data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
  150. data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
  151. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
  152. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
  153. data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
  154. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
  155. data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
  156. data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
  157. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  158. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  159. data/src/core/lib/iomgr/systemd_utils.cc +0 -1
  160. data/src/core/lib/iomgr/tcp_client.h +1 -1
  161. data/src/core/lib/iomgr/tcp_posix.cc +23 -15
  162. data/src/core/lib/iomgr/tcp_server.h +1 -1
  163. data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
  164. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
  165. data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
  166. data/src/core/lib/iomgr/tcp_windows.cc +5 -10
  167. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  168. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  169. data/src/core/lib/iomgr/vsock.h +3 -1
  170. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  171. data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
  172. data/src/core/lib/security/authorization/rbac_policy.h +21 -3
  173. data/src/core/lib/surface/call.cc +3 -9
  174. data/src/core/lib/surface/call_utils.h +113 -0
  175. data/src/core/lib/surface/channel_create.cc +1 -1
  176. data/src/core/lib/surface/channel_create.h +0 -2
  177. data/src/core/lib/surface/channel_init.cc +77 -38
  178. data/src/core/lib/surface/channel_init.h +30 -16
  179. data/src/core/lib/surface/filter_stack_call.cc +5 -10
  180. data/src/core/lib/surface/init.cc +13 -27
  181. data/src/core/lib/surface/version.cc +1 -1
  182. data/src/core/lib/transport/error_utils.cc +0 -27
  183. data/src/core/lib/transport/error_utils.h +0 -16
  184. data/src/core/lib/transport/transport.h +7 -5
  185. data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
  186. data/src/core/load_balancing/rls/rls.cc +28 -11
  187. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
  188. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
  189. data/src/core/load_balancing/xds/cds.cc +3 -1
  190. data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
  191. data/src/core/mitigation_engine/mitigation.h +14 -5
  192. data/src/core/mitigation_engine/mitigation_engine.h +7 -3
  193. data/src/core/mitigation_engine/mitigation_provider.h +2 -1
  194. data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
  195. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
  196. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
  197. data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
  198. data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
  199. data/src/core/resolver/endpoint_addresses.h +3 -0
  200. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
  201. data/src/core/resolver/xds/xds_resolver.cc +35 -9
  202. data/src/core/server/server.cc +2 -6
  203. data/src/core/server/server_config_selector.h +18 -3
  204. data/src/core/server/server_config_selector_filter.cc +178 -91
  205. data/src/core/server/server_config_selector_filter.h +58 -3
  206. data/src/core/server/xds_server_config_fetcher.cc +196 -129
  207. data/src/core/server/xds_server_config_fetcher.h +49 -0
  208. data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
  209. data/src/core/telemetry/histogram.h +94 -14
  210. data/src/core/telemetry/instrument.cc +179 -74
  211. data/src/core/telemetry/instrument.h +78 -30
  212. data/src/core/telemetry/metrics.h +5 -0
  213. data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
  214. data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
  215. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  216. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
  217. data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
  218. data/src/core/tsi/ssl_telemetry_utils.h +12 -2
  219. data/src/core/tsi/ssl_transport_security.cc +238 -80
  220. data/src/core/tsi/ssl_transport_security.h +63 -33
  221. data/src/core/tsi/tls_telemetry.cc +31 -0
  222. data/src/core/tsi/tls_telemetry.h +47 -0
  223. data/src/core/tsi/transport_security.cc +2 -2
  224. data/src/core/tsi/transport_security.h +1 -1
  225. data/src/core/tsi/transport_security_interface.h +1 -1
  226. data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
  227. data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
  228. data/src/core/util/http_client/httpcli.cc +16 -53
  229. data/src/core/util/http_client/httpcli.h +0 -7
  230. data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
  231. data/src/core/util/linux/cpu.cc +1 -1
  232. data/src/core/util/load_file.cc +3 -9
  233. data/src/core/util/load_file.h +3 -4
  234. data/src/core/util/matchers.h +8 -0
  235. data/src/core/util/posix/cpu.cc +1 -1
  236. data/src/core/util/status_helper.cc +0 -20
  237. data/src/core/util/status_helper.h +3 -14
  238. data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
  239. data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
  240. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
  241. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
  242. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
  243. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
  244. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
  245. data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
  246. data/src/core/xds/grpc/xds_client_grpc.h +0 -4
  247. data/src/core/xds/grpc/xds_cluster.h +1 -0
  248. data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
  249. data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
  250. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
  251. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
  252. data/src/core/xds/grpc/xds_common_types.cc +0 -91
  253. data/src/core/xds/grpc/xds_common_types.h +1 -47
  254. data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
  255. data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
  256. data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
  257. data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
  258. data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
  259. data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
  260. data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
  261. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
  262. data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
  263. data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
  264. data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
  265. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  266. data/src/core/xds/grpc/xds_http_filter.h +6 -5
  267. data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
  268. data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
  269. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
  270. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
  271. data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
  272. data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
  273. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
  274. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
  275. data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
  276. data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
  277. data/src/core/xds/grpc/xds_listener.cc +2 -0
  278. data/src/core/xds/grpc/xds_listener.h +5 -0
  279. data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
  280. data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
  281. data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
  282. data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
  283. data/src/core/xds/grpc/xds_route_config.cc +2 -0
  284. data/src/core/xds/grpc/xds_route_config.h +3 -1
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
  286. data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
  287. data/src/core/xds/grpc/xds_routing.cc +116 -69
  288. data/src/core/xds/grpc/xds_routing.h +19 -8
  289. data/src/core/xds/grpc/xds_tls_context.cc +117 -0
  290. data/src/core/xds/grpc/xds_tls_context.h +76 -0
  291. data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
  292. data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
  293. data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
  294. data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
  295. data/src/ruby/ext/grpc/rb_call.c +26 -15
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
  297. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  298. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  299. data/src/ruby/lib/grpc/version.rb +1 -1
  300. data/src/ruby/pb/test/client.rb +5 -4
  301. data/src/ruby/spec/call_spec.rb +14 -0
  302. data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
  303. metadata +50 -35
  304. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
  305. data/src/core/lib/iomgr/resolve_address.cc +0 -59
  306. data/src/core/lib/iomgr/resolve_address.h +0 -125
  307. data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
  308. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
  309. data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
  310. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
  311. data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
  312. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
  313. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
  314. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
  315. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
  316. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
  317. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
  318. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
  319. data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
  320. data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
  321. data/src/core/util/json/json_util.cc +0 -101
  322. data/src/core/util/json/json_util.h +0 -163
@@ -602,35 +602,6 @@ class ClientChannelFilter::SubchannelWrapper final
602
602
  << parent_.get() << " subchannel " << parent_->subchannel_.get()
603
603
  << " watcher=" << watcher_.get()
604
604
  << " state=" << ConnectivityStateName(state) << " status=" << status;
605
- if (!IsSubchannelConnectionScalingEnabled()) {
606
- auto keepalive_throttling = status.GetPayload(kKeepaliveThrottlingKey);
607
- if (keepalive_throttling.has_value()) {
608
- int new_keepalive_time_ms = -1;
609
- if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
610
- &new_keepalive_time_ms)) {
611
- Duration new_keepalive_time =
612
- Duration::Milliseconds(new_keepalive_time_ms);
613
- if (new_keepalive_time > parent_->chand_->keepalive_time_) {
614
- parent_->chand_->keepalive_time_ = new_keepalive_time;
615
- GRPC_TRACE_LOG(client_channel, INFO)
616
- << "chand=" << parent_->chand_
617
- << ": throttling keepalive time to "
618
- << parent_->chand_->keepalive_time_;
619
- // Propagate the new keepalive time to all subchannels. This is
620
- // so that new transports created by any subchannel (and not
621
- // just the subchannel that received the GOAWAY), use the new
622
- // keepalive time.
623
- for (auto& [subchannel, _] : parent_->chand_->subchannel_map_) {
624
- subchannel->ThrottleKeepaliveTime(new_keepalive_time);
625
- }
626
- }
627
- } else {
628
- LOG(ERROR) << "chand=" << parent_->chand_
629
- << ": Illegal keepalive throttling value "
630
- << std::string(keepalive_throttling.value());
631
- }
632
- }
633
- }
634
605
  // Propagate status only in state TF.
635
606
  // We specifically want to avoid propagating the status for
636
607
  // state IDLE that the real subchannel gave us only for the
@@ -1043,7 +1014,7 @@ ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
1043
1014
  auto service_config =
1044
1015
  ServiceConfigImpl::Create(channel_args_, *service_config_json);
1045
1016
  if (!service_config.ok()) {
1046
- *error = absl_status_to_grpc_error(service_config.status());
1017
+ *error = service_config.status();
1047
1018
  return;
1048
1019
  }
1049
1020
  default_service_config_ = std::move(*service_config);
@@ -1555,12 +1526,12 @@ void ClientChannelFilter::UpdateStateLocked(grpc_connectivity_state state,
1555
1526
  if (!status.ok() || state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1556
1527
  GRPC_CHANNELZ_LOG(channelz_node_)
1557
1528
  << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1558
- state);
1529
+ state)
1530
+ << " status: " << status.ToString();
1559
1531
  } else {
1560
1532
  GRPC_CHANNELZ_LOG(channelz_node_)
1561
1533
  << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1562
- state)
1563
- << " status: " << status.ToString();
1534
+ state);
1564
1535
  }
1565
1536
  }
1566
1537
  }
@@ -1643,11 +1614,11 @@ grpc_error_handle ClientChannelFilter::DoPingLocked(grpc_transport_op* op) {
1643
1614
  },
1644
1615
  // Fail pick.
1645
1616
  [](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
1646
- return absl_status_to_grpc_error(fail_pick->status);
1617
+ return fail_pick->status;
1647
1618
  },
1648
1619
  // Drop pick.
1649
1620
  [](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
1650
- return absl_status_to_grpc_error(drop_pick->status);
1621
+ return drop_pick->status;
1651
1622
  });
1652
1623
  }
1653
1624
 
@@ -1683,11 +1654,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
1683
1654
  << "chand=" << this << ": disconnect_with_error: "
1684
1655
  << StatusToString(op->disconnect_with_error);
1685
1656
  DestroyResolverAndLbPolicyLocked();
1686
- intptr_t value;
1687
- if (grpc_error_get_int(op->disconnect_with_error,
1688
- StatusIntProperty::ChannelConnectivityState,
1689
- &value) &&
1690
- static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1657
+ if (op->go_idle) {
1691
1658
  if (disconnect_error_.ok()) { // Ignore if we're shutting down.
1692
1659
  // Enter IDLE state.
1693
1660
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
@@ -1703,7 +1670,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
1703
1670
  UpdateStateAndPickerLocked(
1704
1671
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1705
1672
  MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(
1706
- grpc_error_to_absl_status(op->disconnect_with_error)));
1673
+ op->disconnect_with_error));
1707
1674
  // TODO(roth): If this happens when we're still waiting for a
1708
1675
  // resolver result, we need to trigger failures for all calls in
1709
1676
  // the resolver queue here.
@@ -1875,8 +1842,8 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
1875
1842
  ->GetCallConfig({send_initial_metadata(), arena_,
1876
1843
  service_config_call_data});
1877
1844
  if (!filter_chain.ok()) {
1878
- return absl_status_to_grpc_error(
1879
- MaybeRewriteIllegalStatusCode(filter_chain.status(), "ConfigSelector"));
1845
+ return MaybeRewriteIllegalStatusCode(filter_chain.status(),
1846
+ "ConfigSelector");
1880
1847
  }
1881
1848
  dynamic_filters_ = filter_chain->TakeAsSubclass<const DynamicFilters>();
1882
1849
  // Apply our own method params to the call.
@@ -1946,7 +1913,7 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
1946
1913
  GRPC_TRACE_LOG(client_channel_call, INFO)
1947
1914
  << "chand=" << chand() << " calld=" << this
1948
1915
  << ": resolution failed, failing call";
1949
- *config_selector = absl_status_to_grpc_error(resolver_error);
1916
+ *config_selector = resolver_error;
1950
1917
  return true;
1951
1918
  }
1952
1919
  // Either the resolver has not yet returned a result, or it has
@@ -2482,6 +2449,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2482
2449
  bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2483
2450
  LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
2484
2451
  GRPC_CHECK(subchannel_call_ == nullptr);
2452
+ // Adding the call arena to TLS so that LB pickers can access call context
2453
+ // from the arena.
2454
+ promise_detail::Context<Arena> arena_ctx(arena_);
2485
2455
  // Perform LB pick.
2486
2456
  LoadBalancingPolicy::PickArgs pick_args;
2487
2457
  Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
@@ -2554,8 +2524,8 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2554
2524
  if (!send_initial_metadata()
2555
2525
  ->GetOrCreatePointer(WaitForReady())
2556
2526
  ->value) {
2557
- *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2558
- std::move(fail_pick->status), "LB pick"));
2527
+ *error = MaybeRewriteIllegalStatusCode(std::move(fail_pick->status),
2528
+ "LB pick");
2559
2529
  return true;
2560
2530
  }
2561
2531
  // If wait_for_ready is true, then queue to retry when we get a new
@@ -2567,10 +2537,9 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2567
2537
  GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2568
2538
  << "chand=" << chand_ << " lb_call=" << this
2569
2539
  << ": LB pick dropped: " << drop_pick->status;
2570
- *error = grpc_error_set_int(
2571
- absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2572
- std::move(drop_pick->status), "LB drop")),
2573
- StatusIntProperty::kLbPolicyDrop, 1);
2540
+ is_drop_ = true;
2541
+ *error = MaybeRewriteIllegalStatusCode(std::move(drop_pick->status),
2542
+ "LB drop");
2574
2543
  return true;
2575
2544
  });
2576
2545
  }
@@ -2708,7 +2677,7 @@ void ClientChannelFilter::LoadBalancedCall::RecvTrailingMetadataReady(
2708
2677
  << " call_attempt_tracer_=" << self->call_attempt_tracer_
2709
2678
  << " lb_subchannel_call_tracker_="
2710
2679
  << self->lb_subchannel_call_tracker_.get()
2711
- << " failure_error_=" << StatusToString(self->failure_error_);
2680
+ << " is_drop_=" << self->is_drop_;
2712
2681
  // Check if we have a tracer or an LB callback to invoke.
2713
2682
  if (self->call_attempt_tracer_ != nullptr ||
2714
2683
  self->lb_subchannel_call_tracker_ != nullptr) {
@@ -2742,11 +2711,9 @@ void ClientChannelFilter::LoadBalancedCall::RecvTrailingMetadataReady(
2742
2711
  self->RecordCallCompletion(status, self->recv_trailing_metadata_,
2743
2712
  self->transport_stream_stats_, peer_string);
2744
2713
  }
2714
+ // If we dropped the call, indicate that fact in the metadata.
2715
+ if (self->is_drop_) self->recv_trailing_metadata_->Set(LbPolicyDrop(), true);
2745
2716
  // Chain to original callback.
2746
- if (!self->failure_error_.ok()) {
2747
- error = self->failure_error_;
2748
- self->failure_error_ = absl::OkStatus();
2749
- }
2750
2717
  Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
2751
2718
  error);
2752
2719
  }
@@ -450,8 +450,8 @@ class ClientChannelFilter::LoadBalancedCall final
450
450
  // Set when we get a cancel_stream op.
451
451
  grpc_error_handle cancel_error_;
452
452
 
453
- // Set when we fail inside the LB call.
454
- grpc_error_handle failure_error_;
453
+ // Set when the LB picker returns a drop result.
454
+ bool is_drop_ = false;
455
455
 
456
456
  LbQueuedCallCanceller* lb_call_canceller_
457
457
  ABSL_GUARDED_BY(&ClientChannelFilter::lb_mu_) = nullptr;
@@ -33,21 +33,6 @@
33
33
  namespace grpc_core {
34
34
  namespace internal {
35
35
 
36
- namespace {
37
-
38
- class ConnectionScalingJsonArgs final : public JsonArgs {
39
- public:
40
- bool IsEnabled(absl::string_view key) const override {
41
- if (key == "connection_scaling") {
42
- return IsExperimentEnvVarEnabled(
43
- "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING");
44
- }
45
- return true;
46
- }
47
- };
48
-
49
- } // namespace
50
-
51
36
  //
52
37
  // ClientChannelGlobalParsedConfig::HealthCheckConfig
53
38
  //
@@ -93,8 +78,7 @@ const JsonLoaderInterface* ClientChannelGlobalParsedConfig::JsonLoader(
93
78
  .OptionalField("healthCheckConfig",
94
79
  &ClientChannelGlobalParsedConfig::health_check_config_)
95
80
  .OptionalField("connectionScaling",
96
- &ClientChannelGlobalParsedConfig::connection_scaling_,
97
- "connection_scaling")
81
+ &ClientChannelGlobalParsedConfig::connection_scaling_)
98
82
  .Finish();
99
83
  return loader;
100
84
  }
@@ -170,14 +154,14 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/,
170
154
  const Json& json,
171
155
  ValidationErrors* errors) {
172
156
  return LoadFromJson<std::unique_ptr<ClientChannelGlobalParsedConfig>>(
173
- json, ConnectionScalingJsonArgs(), errors);
157
+ json, JsonArgs(), errors);
174
158
  }
175
159
 
176
160
  std::unique_ptr<ServiceConfigParser::ParsedConfig>
177
161
  ClientChannelServiceConfigParser::ParsePerMethodParams(
178
162
  const ChannelArgs& /*args*/, const Json& json, ValidationErrors* errors) {
179
163
  return LoadFromJson<std::unique_ptr<ClientChannelMethodParsedConfig>>(
180
- json, ConnectionScalingJsonArgs(), errors);
164
+ json, JsonArgs(), errors);
181
165
  }
182
166
 
183
167
  } // namespace internal
@@ -24,7 +24,13 @@
24
24
  namespace grpc_core {
25
25
 
26
26
  absl::StatusOr<RefCountedPtr<DirectChannel>> DirectChannel::Create(
27
- std::string target, const ChannelArgs& args) {
27
+ std::string target, ChannelArgs args) {
28
+ auto channel_args_mutator =
29
+ grpc_channel_args_get_client_channel_creation_mutator();
30
+ if (channel_args_mutator != nullptr) {
31
+ args =
32
+ channel_args_mutator(target.c_str(), args, GRPC_CLIENT_DIRECT_CHANNEL);
33
+ }
28
34
  auto* transport = args.GetObject<Transport>();
29
35
  if (transport == nullptr) {
30
36
  return absl::InvalidArgumentError("Transport not set in ChannelArgs");
@@ -41,8 +41,8 @@ class DirectChannel final : public Channel {
41
41
  OrphanablePtr<ClientTransport> transport_;
42
42
  };
43
43
 
44
- static absl::StatusOr<RefCountedPtr<DirectChannel>> Create(
45
- std::string target, const ChannelArgs& args);
44
+ static absl::StatusOr<RefCountedPtr<DirectChannel>> Create(std::string target,
45
+ ChannelArgs args);
46
46
 
47
47
  DirectChannel(
48
48
  std::string target, const ChannelArgs& args,
@@ -179,9 +179,11 @@ LoopCtl<absl::StatusOr<RefCountedPtr<UnstartedCallDestination>>> PickSubchannel(
179
179
  GRPC_TRACE_LOG(client_channel_lb_call, INFO)
180
180
  << "client_channel: " << GetContext<Activity>()->DebugTag()
181
181
  << " pick dropped: " << drop_pick->status;
182
- return grpc_error_set_int(MaybeRewriteIllegalStatusCode(
183
- std::move(drop_pick->status), "LB drop"),
184
- StatusIntProperty::kLbPolicyDrop, 1);
182
+ // TODO(roth): Need to set the LbPolicyDrop trait in server
183
+ // trailing metadata, so that the retry interceptor can know not
184
+ // to retry.
185
+ return MaybeRewriteIllegalStatusCode(std::move(drop_pick->status),
186
+ "LB drop");
185
187
  });
186
188
  }
187
189
 
@@ -653,9 +653,7 @@ void RetryFilter::LegacyCallData::CallAttempt::OnPerAttemptRecvTimerLocked(
653
653
  // TODO(roth): When implementing hedging, we should not cancel the
654
654
  // current attempt.
655
655
  call_attempt->MaybeAddBatchForCancelOp(
656
- grpc_error_set_int(
657
- GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
658
- StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
656
+ absl::CancelledError("retry perAttemptRecvTimeout exceeded"),
659
657
  &closures);
660
658
  // Check whether we should retry.
661
659
  if (call_attempt->ShouldRetry(/*status=*/std::nullopt,
@@ -960,14 +958,10 @@ void GetCallStatus(
960
958
  std::optional<GrpcStreamNetworkState::ValueType>* stream_network_state) {
961
959
  if (!error.ok()) {
962
960
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
963
- intptr_t value = 0;
964
- if (grpc_error_get_int(error, StatusIntProperty::kLbPolicyDrop, &value) &&
965
- value != 0) {
966
- *is_lb_drop = true;
967
- }
968
961
  } else {
969
962
  *status = md_batch->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
970
963
  }
964
+ *is_lb_drop = md_batch->get(LbPolicyDrop()).value_or(false);
971
965
  *server_pushback = md_batch->get(GrpcRetryPushbackMsMetadata());
972
966
  *stream_network_state = md_batch->get(GrpcStreamNetworkState());
973
967
  }
@@ -1136,10 +1130,7 @@ void RetryFilter::LegacyCallData::CallAttempt::BatchData::
1136
1130
  CallCombinerClosureList closures;
1137
1131
  // Cancel call attempt.
1138
1132
  call_attempt->MaybeAddBatchForCancelOp(
1139
- error.ok() ? grpc_error_set_int(
1140
- GRPC_ERROR_CREATE("call attempt failed"),
1141
- StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED)
1142
- : error,
1133
+ error.ok() ? absl::CancelledError("call attempt failed") : error,
1143
1134
  &closures);
1144
1135
  // For transparent retries, add a closure to immediately start a new
1145
1136
  // call attempt.
@@ -1916,6 +1907,8 @@ void RetryFilter::LegacyCallData::OnRetryTimerLocked(
1916
1907
  if (calld->retry_timer_handle_ != TaskHandle::kInvalid) {
1917
1908
  calld->retry_timer_handle_ = TaskHandle::kInvalid;
1918
1909
  calld->CreateCallAttempt(/*is_transparent_retry=*/false);
1910
+ } else {
1911
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_, "retry timer cancelled");
1919
1912
  }
1920
1913
  GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
1921
1914
  }