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
@@ -148,7 +148,7 @@ absl::Status LegacyServerConfigSelectorFilter::Call::OnClientInitialMetadata(
148
148
  "LegacyServerConfigSelectorFilter::Call::OnClientInitialMetadata");
149
149
  auto sel = filter->config_selector();
150
150
  if (!sel.ok()) return sel.status();
151
- auto call_config = sel.value()->GetCallConfig(&md);
151
+ auto call_config = sel.value()->GetCallConfig(/*state=*/nullptr, &md);
152
152
  if (!call_config.ok()) {
153
153
  return absl::UnavailableError(StatusToString(call_config.status()));
154
154
  }
@@ -165,113 +165,200 @@ const grpc_channel_filter kLegacyServerConfigSelectorFilter =
165
165
  MakePromiseBasedFilter<LegacyServerConfigSelectorFilter,
166
166
  FilterEndpoint::kServer>();
167
167
 
168
- namespace {
168
+ //
169
+ // ServerConfigSelectorInterceptor::Watcher
170
+ //
169
171
 
170
- class ServerConfigSelectorFilter final
171
- : public ImplementChannelFilter<ServerConfigSelectorFilter>,
172
- public InternallyRefCounted<ServerConfigSelectorFilter> {
172
+ // Watcher for ServerConfigSelector.
173
+ class ServerConfigSelectorInterceptor::Watcher final
174
+ : public ServerConfigSelectorProvider::ServerConfigSelectorWatcher {
173
175
  public:
174
- class Call {
175
- public:
176
- ArenaPromise<absl::Status> OnClientInitialMetadata(
177
- ClientMetadata& md, ServerConfigSelectorFilter* filter);
178
- static inline const NoInterceptor OnServerInitialMetadata;
179
- static inline const NoInterceptor OnServerTrailingMetadata;
180
- static inline const NoInterceptor OnClientToServerMessage;
181
- static inline const NoInterceptor OnClientToServerHalfClose;
182
- static inline const NoInterceptor OnServerToClientMessage;
183
- static inline const NoInterceptor OnFinalize;
184
- };
185
-
186
- static absl::StatusOr<OrphanablePtr<ServerConfigSelectorFilter>> Create(
187
- const ChannelArgs& args, ChannelFilter::Args) {
188
- auto server_config_selector_provider =
189
- args.GetObjectRef<ServerConfigSelectorProvider>();
190
- if (server_config_selector_provider == nullptr) {
191
- return absl::UnknownError("No ServerConfigSelectorProvider object found");
192
- }
193
- return MakeOrphanable<ServerConfigSelectorFilter>(
194
- std::move(server_config_selector_provider));
176
+ explicit Watcher(
177
+ WeakRefCountedPtr<ServerConfigSelectorInterceptor> interceptor)
178
+ : interceptor_(std::move(interceptor)) {}
179
+
180
+ void OnServerConfigSelectorUpdate(
181
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector)
182
+ override {
183
+ interceptor_->OnConfigSelectorUpdate(std::move(config_selector));
195
184
  }
196
185
 
197
- explicit ServerConfigSelectorFilter(
198
- RefCountedPtr<ServerConfigSelectorProvider>
199
- server_config_selector_provider)
200
- : server_config_selector_provider_(
201
- std::move(server_config_selector_provider)),
202
- config_selector_(nullptr) {
203
- watcher_ = std::make_shared<ServerConfigSelectorWatcher>(Ref());
204
- // TODO(roth): Remove the void cast when removing the
205
- // xds_server_filter_chain_per_route experiment.
206
- (void)server_config_selector_provider_->Watch(watcher_);
207
- }
186
+ private:
187
+ WeakRefCountedPtr<ServerConfigSelectorInterceptor> interceptor_;
188
+ };
208
189
 
209
- ServerConfigSelectorFilter(const ServerConfigSelectorFilter&) = delete;
210
- ServerConfigSelectorFilter& operator=(const ServerConfigSelectorFilter&) =
211
- delete;
190
+ //
191
+ // ServerConfigSelectorInterceptor
192
+ //
212
193
 
213
- void Orphan() override {
214
- if (server_config_selector_provider_ != nullptr) {
215
- server_config_selector_provider_->CancelWatch(std::move(watcher_));
216
- }
217
- Unref();
194
+ const grpc_channel_filter ServerConfigSelectorInterceptor::kFilter =
195
+ MakePromiseBasedFilter<
196
+ ServerConfigSelectorInterceptor, FilterEndpoint::kServer,
197
+ kFilterExaminesServerInitialMetadata | kFilterExaminesOutboundMessages |
198
+ kFilterExaminesInboundMessages | kFilterExaminesCallContext>();
199
+
200
+ absl::StatusOr<RefCountedPtr<ServerConfigSelectorInterceptor>>
201
+ ServerConfigSelectorInterceptor::Create(const ChannelArgs& args,
202
+ ChannelFilter::Args filter_args) {
203
+ // Get ConfigSelectorProvider from channel args.
204
+ auto server_config_selector_provider =
205
+ args.GetObjectRef<ServerConfigSelectorProvider>();
206
+ if (server_config_selector_provider == nullptr) {
207
+ return absl::UnknownError("No ServerConfigSelectorProvider object found");
218
208
  }
209
+ return MakeRefCounted<ServerConfigSelectorInterceptor>(
210
+ args, std::move(filter_args), std::move(server_config_selector_provider));
211
+ }
219
212
 
220
- static absl::string_view TypeName() {
221
- return "server_config_selector_filter";
222
- }
213
+ ServerConfigSelectorInterceptor::ServerConfigSelectorInterceptor(
214
+ const ChannelArgs& args, ChannelFilter::Args /*filter_args*/,
215
+ RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider)
216
+ : V3InterceptorToV2Bridge<ServerConfigSelectorInterceptor>(args),
217
+ args_(
218
+ // Tell filters that they're running in a v3 stack and running
219
+ // on the server side.
220
+ args.Set(GRPC_ARG_USE_V3_STACK, 1)
221
+ .Set(GRPC_ARG_IS_SERVER_FILTER_STACK, 1)),
222
+ server_config_selector_provider_(
223
+ std::move(server_config_selector_provider)),
224
+ config_selector_(nullptr) {
225
+ // Start watch for ServerConfigSelector.
226
+ watcher_ = std::make_shared<Watcher>(
227
+ WeakRef().TakeAsSubclass<ServerConfigSelectorInterceptor>());
228
+ // TODO(roth): Remove void cast when removing the
229
+ // xds_server_filter_chain_per_route experiment.
230
+ (void)server_config_selector_provider_->Watch(watcher_);
231
+ }
232
+
233
+ namespace {
234
+
235
+ class FilterChainImpl final : public FilterChain {
236
+ public:
237
+ explicit FilterChainImpl(RefCountedPtr<UnstartedCallDestination> destination)
238
+ : destination_(std::move(destination)) {}
239
+
240
+ UnstartedCallDestination* destination() const { return destination_.get(); }
223
241
 
224
242
  private:
225
- class ServerConfigSelectorWatcher
226
- : public ServerConfigSelectorProvider::ServerConfigSelectorWatcher {
227
- public:
228
- explicit ServerConfigSelectorWatcher(
229
- RefCountedPtr<ServerConfigSelectorFilter> filter)
230
- : filter_(filter) {}
231
- void OnServerConfigSelectorUpdate(
232
- absl::StatusOr<RefCountedPtr<ServerConfigSelector>> update) override {
233
- // TODO(roth): Build filter chains here.
234
- filter_->config_selector_.Set(std::move(update));
243
+ RefCountedPtr<UnstartedCallDestination> destination_;
244
+ };
245
+
246
+ class FilterChainBuilderImpl final : public FilterChainBuilder {
247
+ public:
248
+ FilterChainBuilderImpl(const ChannelArgs& channel_args,
249
+ RefCountedPtr<UnstartedCallDestination> destination)
250
+ : channel_args_(channel_args), destination_(std::move(destination)) {}
251
+
252
+ absl::StatusOr<RefCountedPtr<FilterChain>> Build() override {
253
+ if (builder_ == nullptr) InitBuilder();
254
+ auto top_of_stack_destination = builder_->Build(destination_);
255
+ if (!top_of_stack_destination.ok()) {
256
+ // TODO(roth): Maybe use MaybeRewriteIllegalStatusCode()?
257
+ return top_of_stack_destination.status();
235
258
  }
259
+ builder_.reset();
260
+ return MakeRefCounted<FilterChainImpl>(
261
+ std::move(*top_of_stack_destination));
262
+ }
236
263
 
237
- private:
238
- RefCountedPtr<ServerConfigSelectorFilter> filter_;
239
- };
264
+ private:
265
+ void AddFilter(const FilterHandle& filter_handle,
266
+ RefCountedPtr<const FilterConfig> config) override {
267
+ if (builder_ == nullptr) InitBuilder();
268
+ filter_handle.AddToBuilder(builder_.get(), std::move(config));
269
+ }
240
270
 
241
- RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider_;
242
- std::shared_ptr<ServerConfigSelectorWatcher> watcher_;
243
- Observable<absl::StatusOr<RefCountedPtr<ServerConfigSelector>>>
244
- config_selector_;
271
+ void InitBuilder() {
272
+ builder_ = std::make_unique<InterceptionChainBuilder>(channel_args_);
273
+ }
274
+
275
+ const ChannelArgs channel_args_;
276
+ const RefCountedPtr<UnstartedCallDestination> destination_;
277
+ std::unique_ptr<InterceptionChainBuilder> builder_;
245
278
  };
246
279
 
247
- ArenaPromise<absl::Status>
248
- ServerConfigSelectorFilter::Call::OnClientInitialMetadata(
249
- ClientMetadata& md, ServerConfigSelectorFilter* filter) {
250
- GRPC_LATENT_SEE_SCOPE(
251
- "ServerConfigSelectorFilter::Call::OnClientInitialMetadata");
252
- return TrySeq(
253
- filter->config_selector_.Next(nullptr),
254
- [&md](
255
- absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector) {
256
- if (!config_selector.ok()) return config_selector.status();
257
- auto call_config = (*config_selector)->GetCallConfig(&md);
258
- if (!call_config.ok()) {
259
- return absl::UnavailableError(StatusToString(call_config.status()));
260
- }
261
- auto* arena = GetContext<Arena>();
262
- auto* service_config_call_data =
263
- arena->New<ServiceConfigCallData>(arena);
264
- service_config_call_data->SetServiceConfig(
265
- std::move(call_config->service_config),
266
- call_config->method_configs);
267
- return absl::OkStatus();
268
- });
280
+ } // namespace
281
+
282
+ void ServerConfigSelectorInterceptor::OnConfigSelectorUpdate(
283
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector) {
284
+ if (!config_selector.ok()) {
285
+ config_selector_.Set(config_selector.status());
286
+ return;
287
+ }
288
+ auto state = MakeRefCounted<ConfigSelectorState>();
289
+ state->config_selector = std::move(*config_selector);
290
+ FilterChainBuilderImpl builder(args_, wrapped_destination());
291
+ state->connection_state = state->config_selector->BuildFilterChains(builder);
292
+ config_selector_.Set(std::move(state));
269
293
  }
270
294
 
271
- } // namespace
295
+ void ServerConfigSelectorInterceptor::Orphaned() {
296
+ args_ = ChannelArgs();
297
+ server_config_selector_provider_->CancelWatch(std::move(watcher_));
298
+ server_config_selector_provider_.reset();
299
+ config_selector_.Set(absl::CancelledError("shutting down"));
300
+ }
272
301
 
273
- const grpc_channel_filter kServerConfigSelectorFilter =
274
- MakePromiseBasedFilter<ServerConfigSelectorFilter,
275
- FilterEndpoint::kServer>();
302
+ void ServerConfigSelectorInterceptor::InterceptCall(
303
+ UnstartedCallHandler unstarted_call_handler) {
304
+ // Consume the call coming to us from the client side.
305
+ CallHandler handler = Consume(std::move(unstarted_call_handler));
306
+ handler.SpawnGuarded(
307
+ "choose_dynamic_filter_chain",
308
+ [self = RefAsSubclass<ServerConfigSelectorInterceptor>(),
309
+ handler]() mutable {
310
+ return TrySeq(
311
+ handler.PullClientInitialMetadata(),
312
+ [handler, self](ClientMetadataHandle metadata) mutable {
313
+ return Map(
314
+ self->config_selector_.Next(nullptr),
315
+ [self, handler = std::move(handler),
316
+ metadata = std::move(metadata)](
317
+ absl::StatusOr<RefCountedPtr<ConfigSelectorState>>
318
+ state) mutable {
319
+ if (!state.ok()) {
320
+ GRPC_TRACE_LOG(server_config_selector_interceptor, INFO)
321
+ << "[server_config_selector_interceptor "
322
+ << self.get()
323
+ << "]: config selector is error: " << state.status();
324
+ return state.status();
325
+ }
326
+ // Use config selector to choose dynamic filter stack.
327
+ auto call_config = (*state)->config_selector->GetCallConfig(
328
+ (*state)->connection_state.get(), metadata.get());
329
+ if (!call_config.ok()) {
330
+ GRPC_TRACE_LOG(server_config_selector_interceptor, INFO)
331
+ << "[server_config_selector_interceptor "
332
+ << self.get() << "]: config selector returned error: "
333
+ << call_config.status();
334
+ return absl::UnavailableError(
335
+ StatusToString(call_config.status()));
336
+ }
337
+ // Get filter chain.
338
+ if (!call_config->filter_chain.ok()) {
339
+ GRPC_TRACE_LOG(server_config_selector_interceptor, INFO)
340
+ << "[server_config_selector_interceptor "
341
+ << self.get()
342
+ << "]: config selector returned failure for filter "
343
+ "chain: "
344
+ << call_config->filter_chain.status();
345
+ return call_config->filter_chain.status();
346
+ }
347
+ // Start call on selected filter chain.
348
+ GRPC_TRACE_LOG(server_config_selector_interceptor, INFO)
349
+ << "[server_config_selector_interceptor " << self.get()
350
+ << "]: starting call on dynamic filter chain";
351
+ auto& filter_chain = DownCast<const FilterChainImpl&>(
352
+ **call_config->filter_chain);
353
+ auto [initiator, unstarted_handler] = MakeCallPair(
354
+ std::move(metadata), GetContext<Arena>()->Ref());
355
+ filter_chain.destination()->StartCall(
356
+ std::move(unstarted_handler));
357
+ ForwardCall(handler, initiator);
358
+ return absl::OkStatus();
359
+ });
360
+ });
361
+ });
362
+ }
276
363
 
277
364
  } // namespace grpc_core
@@ -19,15 +19,70 @@
19
19
  #ifndef GRPC_SRC_CORE_SERVER_SERVER_CONFIG_SELECTOR_FILTER_H
20
20
  #define GRPC_SRC_CORE_SERVER_SERVER_CONFIG_SELECTOR_FILTER_H
21
21
 
22
- #include <grpc/support/port_platform.h>
23
-
24
22
  #include "src/core/lib/channel/channel_fwd.h"
25
23
  #include "src/core/lib/channel/channel_stack.h"
24
+ #include "src/core/lib/channel/promise_based_filter.h"
25
+ #include "src/core/lib/promise/observable.h"
26
+ #include "src/core/server/server_config_selector.h"
27
+ #include "src/core/util/ref_counted_ptr.h"
28
+ #include "absl/strings/string_view.h"
26
29
 
27
30
  namespace grpc_core {
28
31
 
29
32
  extern const grpc_channel_filter kLegacyServerConfigSelectorFilter;
30
- extern const grpc_channel_filter kServerConfigSelectorFilter;
33
+
34
+ // This filter handles injection of dynamic filters for server connections.
35
+ //
36
+ // This filter will get the ServerConfigSelectorProvider from channel
37
+ // args and start a watch on it. Whenever the watcher delivers a new
38
+ // ServerConfigSelector, the filter will ask the ServerConfigSelector to
39
+ // build a filter stack for each dynamic filter chain. Then it swaps the
40
+ // new ServerConfigSelector into place so that it will be used to choose
41
+ // which dynamic filter stack to use for each RPC.
42
+ //
43
+ // This is implemented as a v3 interceptor using V3InterceptorToV2Bridge
44
+ // to run in v1 stacks. However, it runs the dynamic filters as native
45
+ // v3 filters (i.e., it creates a v3 interceptor chain for them), so they
46
+ // cannot be implemented as v1 filters. The call destination at the end
47
+ // of each v3 interceptor chain is the wrapped call destination (i.e.,
48
+ // the next filter in the server stack).
49
+ class ServerConfigSelectorInterceptor final
50
+ : public V3InterceptorToV2Bridge<ServerConfigSelectorInterceptor> {
51
+ public:
52
+ static const grpc_channel_filter kFilter;
53
+
54
+ static absl::string_view TypeName() { return "server_config_selector"; }
55
+
56
+ static absl::StatusOr<RefCountedPtr<ServerConfigSelectorInterceptor>> Create(
57
+ const ChannelArgs& args, ChannelFilter::Args filter_args);
58
+
59
+ ServerConfigSelectorInterceptor(const ChannelArgs& args,
60
+ ChannelFilter::Args filter_args,
61
+ RefCountedPtr<ServerConfigSelectorProvider>
62
+ server_config_selector_provider);
63
+
64
+ private:
65
+ class Watcher;
66
+
67
+ struct ConfigSelectorState final : public RefCounted<ConfigSelectorState> {
68
+ RefCountedPtr<ServerConfigSelector> config_selector;
69
+ std::unique_ptr<ServerConfigSelector::ConnectionState> connection_state;
70
+ };
71
+
72
+ void Orphaned() override;
73
+
74
+ void OnConfigSelectorUpdate(
75
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector);
76
+
77
+ void InterceptCall(UnstartedCallHandler unstarted_call_handler) override;
78
+
79
+ ChannelArgs args_;
80
+ RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider_;
81
+ std::shared_ptr<Watcher> watcher_;
82
+
83
+ Observable<absl::StatusOr<RefCountedPtr<ConfigSelectorState>>>
84
+ config_selector_;
85
+ };
31
86
 
32
87
  } // namespace grpc_core
33
88