grpc 1.76.0 → 1.78.0.pre1

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 (763) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +11 -5
  3. data/include/grpc/credentials.h +6 -1
  4. data/include/grpc/event_engine/memory_allocator.h +2 -0
  5. data/include/grpc/impl/channel_arg_names.h +5 -0
  6. data/include/grpc/support/metrics.h +7 -1
  7. data/src/core/call/call_filters.cc +1 -1
  8. data/src/core/call/call_filters.h +175 -1
  9. data/src/core/call/call_spine.cc +1 -1
  10. data/src/core/call/call_spine.h +27 -5
  11. data/src/core/call/channelz_context.h +30 -0
  12. data/src/core/call/client_call.cc +43 -5
  13. data/src/core/call/client_call.h +6 -3
  14. data/src/core/call/filter_fusion.h +4 -4
  15. data/src/core/call/interception_chain.h +7 -6
  16. data/src/core/call/metadata_batch.cc +49 -55
  17. data/src/core/call/metadata_batch.h +7 -6
  18. data/src/core/call/metadata_info.cc +1 -1
  19. data/src/core/call/parsed_metadata.h +2 -2
  20. data/src/core/call/request_buffer.cc +1 -1
  21. data/src/core/call/security_context.cc +1 -1
  22. data/src/core/call/security_context.h +1 -1
  23. data/src/core/call/server_call.cc +1 -1
  24. data/src/core/call/server_call.h +5 -3
  25. data/src/core/call/simple_slice_based_metadata.h +1 -1
  26. data/src/core/call/status_util.cc +1 -1
  27. data/src/core/channelz/channel_trace.cc +1 -1
  28. data/src/core/channelz/channel_trace.h +3 -3
  29. data/src/core/channelz/channelz.cc +13 -11
  30. data/src/core/channelz/channelz.h +41 -6
  31. data/src/core/channelz/channelz_registry.cc +2 -2
  32. data/src/core/channelz/channelz_registry.h +42 -2
  33. data/src/core/channelz/property_list.h +6 -4
  34. data/src/core/channelz/v2tov1/convert.cc +6 -6
  35. data/src/core/channelz/v2tov1/legacy_api.cc +4 -5
  36. data/src/core/channelz/v2tov1/property_list.cc +1 -1
  37. data/src/core/channelz/ztrace_collector.h +14 -2
  38. data/src/core/client_channel/backup_poller.cc +2 -2
  39. data/src/core/client_channel/buffered_call.cc +140 -0
  40. data/src/core/client_channel/buffered_call.h +104 -0
  41. data/src/core/client_channel/client_channel.cc +124 -71
  42. data/src/core/client_channel/client_channel.h +8 -11
  43. data/src/core/client_channel/client_channel_factory.h +1 -1
  44. data/src/core/client_channel/client_channel_filter.cc +393 -663
  45. data/src/core/client_channel/client_channel_filter.h +57 -150
  46. data/src/core/client_channel/client_channel_internal.h +5 -1
  47. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  48. data/src/core/client_channel/client_channel_service_config.h +12 -1
  49. data/src/core/client_channel/config_selector.h +2 -2
  50. data/src/core/client_channel/connector.h +2 -0
  51. data/src/core/client_channel/dynamic_filters.cc +2 -2
  52. data/src/core/client_channel/global_subchannel_pool.h +1 -1
  53. data/src/core/client_channel/lb_metadata.h +1 -1
  54. data/src/core/client_channel/load_balanced_call_destination.cc +3 -5
  55. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  56. data/src/core/client_channel/retry_filter.cc +2 -2
  57. data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -7
  58. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
  59. data/src/core/client_channel/retry_service_config.cc +3 -3
  60. data/src/core/client_channel/retry_service_config.h +1 -1
  61. data/src/core/client_channel/subchannel.cc +106 -17
  62. data/src/core/client_channel/subchannel.h +24 -8
  63. data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
  64. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  65. data/src/core/client_channel/subchannel_stream_client.cc +1 -1
  66. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  67. data/src/core/config/config_vars.cc +8 -2
  68. data/src/core/config/config_vars.h +5 -0
  69. data/src/core/config/core_configuration.h +1 -1
  70. data/src/core/config/load_config.cc +1 -1
  71. data/src/core/credentials/call/call_credentials.h +2 -2
  72. data/src/core/credentials/call/call_creds_registry.h +1 -1
  73. data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
  74. data/src/core/credentials/call/call_creds_util.cc +3 -3
  75. data/src/core/credentials/call/composite/composite_call_credentials.cc +2 -2
  76. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  77. data/src/core/credentials/call/external/aws_external_account_credentials.cc +6 -6
  78. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  79. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  80. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  81. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  82. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  83. data/src/core/credentials/call/external/url_external_account_credentials.cc +6 -6
  84. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  85. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
  86. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  87. data/src/core/credentials/call/iam/iam_credentials.cc +2 -2
  88. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  89. data/src/core/credentials/call/json_util.cc +1 -1
  90. data/src/core/credentials/call/jwt/json_token.cc +4 -4
  91. data/src/core/credentials/call/jwt/jwt_credentials.cc +3 -3
  92. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  93. data/src/core/credentials/call/jwt/jwt_verifier.cc +5 -5
  94. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
  95. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
  96. data/src/core/credentials/call/jwt_util.cc +3 -3
  97. data/src/core/credentials/call/jwt_util.h +1 -1
  98. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +29 -60
  99. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  100. data/src/core/credentials/call/plugin/plugin_credentials.cc +4 -4
  101. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  102. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  103. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  104. data/src/core/credentials/transport/alts/alts_credentials.cc +3 -3
  105. data/src/core/credentials/transport/alts/alts_security_connector.cc +3 -3
  106. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  107. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +1 -1
  108. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +1 -1
  109. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  110. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  111. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +2 -2
  112. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  113. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  114. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  115. data/src/core/credentials/transport/fake/fake_security_connector.cc +5 -5
  116. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  117. data/src/core/credentials/transport/google_default/google_default_credentials.cc +5 -11
  118. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  119. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  120. data/src/core/credentials/transport/local/local_security_connector.cc +5 -5
  121. data/src/core/credentials/transport/security_connector.cc +1 -1
  122. data/src/core/credentials/transport/security_connector.h +2 -2
  123. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  124. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +5 -5
  125. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  126. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +1 -1
  127. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  128. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +1 -1
  129. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
  130. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  131. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +3 -3
  132. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +3 -3
  133. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +1 -1
  134. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
  135. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +1 -1
  136. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  137. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  138. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
  139. data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
  140. data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
  141. data/src/core/credentials/transport/tls/ssl_utils.cc +4 -4
  142. data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
  143. data/src/core/credentials/transport/tls/tls_credentials.cc +1 -1
  144. data/src/core/credentials/transport/tls/tls_security_connector.cc +4 -4
  145. data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
  146. data/src/core/credentials/transport/transport_credentials.cc +1 -1
  147. data/src/core/credentials/transport/transport_credentials.h +2 -2
  148. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  149. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
  150. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  151. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +5 -5
  152. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  153. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  154. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  155. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  156. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
  157. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
  158. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  159. data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
  160. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  161. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  162. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  163. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  164. data/src/core/ext/filters/http/message_compress/compression_filter.cc +3 -3
  165. data/src/core/ext/filters/http/message_compress/compression_filter.h +21 -2
  166. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  167. data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
  168. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
  169. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  170. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  171. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  172. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  173. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  174. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
  175. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  176. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  177. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +50 -37
  178. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  179. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -17
  180. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
  181. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +2 -2
  182. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +210 -60
  183. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
  184. data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -4
  185. data/src/core/ext/transport/chttp2/transport/flow_control.h +213 -78
  186. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +46 -1
  187. data/src/core/ext/transport/chttp2/transport/frame.cc +147 -21
  188. data/src/core/ext/transport/chttp2/transport/frame.h +44 -10
  189. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
  190. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  191. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -2
  192. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
  193. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -5
  194. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
  196. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
  197. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  198. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  199. data/src/core/ext/transport/chttp2/transport/header_assembler.h +175 -51
  200. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  201. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -4
  202. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +1 -1
  203. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
  204. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -7
  205. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -4
  206. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  207. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
  208. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1177 -511
  209. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +264 -174
  210. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  211. data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
  212. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -6
  213. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -16
  214. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +320 -82
  215. data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
  216. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +286 -7
  217. data/src/core/ext/transport/chttp2/transport/http2_transport.h +187 -19
  218. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +57 -1
  219. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  220. data/src/core/ext/transport/chttp2/transport/internal.h +25 -5
  221. data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
  222. data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
  223. data/src/core/ext/transport/chttp2/transport/message_assembler.h +24 -15
  224. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -8
  225. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +1 -1
  226. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
  227. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +11 -5
  228. data/src/core/ext/transport/chttp2/transport/ping_promise.h +7 -3
  229. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
  230. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  231. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  232. data/src/core/ext/transport/chttp2/transport/stream.h +139 -59
  233. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +225 -98
  234. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
  235. data/src/core/ext/transport/chttp2/transport/transport_common.cc +1 -1
  236. data/src/core/ext/transport/chttp2/transport/transport_common.h +5 -0
  237. data/src/core/ext/transport/chttp2/transport/writable_streams.h +27 -11
  238. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
  239. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -2
  240. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +8 -5
  241. data/src/core/filter/auth/auth_filters.h +7 -1
  242. data/src/core/filter/auth/client_auth_filter.cc +2 -2
  243. data/src/core/filter/auth/server_auth_filter.cc +3 -3
  244. data/src/core/filter/blackboard.h +2 -2
  245. data/src/core/filter/filter_args.h +40 -2
  246. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  247. data/src/core/handshaker/handshaker.cc +5 -5
  248. data/src/core/handshaker/handshaker.h +2 -2
  249. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
  250. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +11 -11
  251. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  252. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  253. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  254. data/src/core/handshaker/proxy_mapper.h +1 -1
  255. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  256. data/src/core/handshaker/security/legacy_secure_endpoint.cc +4 -4
  257. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +7 -7
  258. data/src/core/handshaker/security/secure_endpoint.cc +15 -5
  259. data/src/core/handshaker/security/security_handshaker.cc +8 -5
  260. data/src/core/handshaker/security/security_handshaker.h +1 -1
  261. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  262. data/src/core/lib/address_utils/parse_address.cc +5 -5
  263. data/src/core/lib/address_utils/parse_address.h +2 -2
  264. data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
  265. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  266. data/src/core/lib/channel/channel_args.cc +1 -1
  267. data/src/core/lib/channel/channel_args.h +2 -2
  268. data/src/core/lib/channel/channel_stack.cc +22 -21
  269. data/src/core/lib/channel/channel_stack.h +5 -3
  270. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  271. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  272. data/src/core/lib/channel/channel_stack_builder_impl.cc +7 -13
  273. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
  274. data/src/core/lib/channel/connected_channel.cc +2 -2
  275. data/src/core/lib/channel/promise_based_filter.cc +63 -8
  276. data/src/core/lib/channel/promise_based_filter.h +23 -8
  277. data/src/core/lib/compression/compression_internal.cc +4 -4
  278. data/src/core/lib/compression/compression_internal.h +1 -1
  279. data/src/core/lib/compression/message_compress.cc +1 -1
  280. data/src/core/lib/debug/trace.cc +2 -5
  281. data/src/core/lib/debug/trace.h +10 -0
  282. data/src/core/lib/debug/trace_flags.cc +2 -2
  283. data/src/core/lib/debug/trace_flags.h +1 -1
  284. data/src/core/lib/event_engine/ares_resolver.cc +8 -8
  285. data/src/core/lib/event_engine/ares_resolver.h +4 -4
  286. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  287. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  288. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
  289. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
  290. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -1
  291. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  292. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  293. data/src/core/lib/event_engine/event_engine.cc +1 -1
  294. data/src/core/lib/event_engine/extensions/channelz.h +1 -1
  295. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  296. data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
  297. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
  298. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  299. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -4
  300. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
  301. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +5 -5
  302. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  303. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
  304. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  305. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
  306. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
  307. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
  308. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
  309. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +1 -1
  310. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
  311. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
  312. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
  313. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +5 -5
  314. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +6 -6
  315. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -7
  316. data/src/core/lib/event_engine/posix_engine/posix_engine.h +7 -7
  317. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +7 -4
  318. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
  319. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -4
  320. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
  321. data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
  322. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
  323. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  324. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  325. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  326. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +2 -2
  327. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  328. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
  329. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
  330. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
  331. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  332. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
  333. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  334. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
  335. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  336. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
  337. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  338. data/src/core/lib/event_engine/tcp_socket_utils.cc +4 -4
  339. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  340. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  341. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -4
  342. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
  343. data/src/core/lib/event_engine/utils.cc +3 -3
  344. data/src/core/lib/event_engine/utils.h +1 -1
  345. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  346. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
  347. data/src/core/lib/event_engine/windows/iocp.cc +1 -1
  348. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  349. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  350. data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
  351. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  352. data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -5
  353. data/src/core/lib/event_engine/windows/windows_engine.cc +4 -4
  354. data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
  355. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  356. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  357. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  358. data/src/core/lib/experiments/config.cc +4 -4
  359. data/src/core/lib/experiments/experiments.cc +174 -48
  360. data/src/core/lib/experiments/experiments.h +76 -24
  361. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  362. data/src/core/lib/iomgr/call_combiner.cc +1 -1
  363. data/src/core/lib/iomgr/call_combiner.h +2 -2
  364. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  365. data/src/core/lib/iomgr/closure.h +2 -2
  366. data/src/core/lib/iomgr/combiner.cc +2 -2
  367. data/src/core/lib/iomgr/endpoint.h +1 -1
  368. data/src/core/lib/iomgr/endpoint_cfstream.cc +1 -1
  369. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  370. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  371. data/src/core/lib/iomgr/error.cc +1 -1
  372. data/src/core/lib/iomgr/error.h +2 -2
  373. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  374. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  375. data/src/core/lib/iomgr/ev_epoll1_linux.cc +4 -4
  376. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  377. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  378. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  379. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  380. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -5
  381. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  382. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  383. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  384. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  385. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  386. data/src/core/lib/iomgr/iocp_windows.cc +1 -1
  387. data/src/core/lib/iomgr/iomgr.cc +1 -1
  388. data/src/core/lib/iomgr/lockfree_event.cc +1 -1
  389. data/src/core/lib/iomgr/polling_entity.cc +1 -1
  390. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  391. data/src/core/lib/iomgr/resolve_address.h +2 -2
  392. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
  393. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  394. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  395. data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
  396. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  397. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  398. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  399. data/src/core/lib/iomgr/tcp_posix.cc +5 -5
  400. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -9
  401. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  402. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
  403. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  404. data/src/core/lib/iomgr/tcp_server_windows.cc +2 -2
  405. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  406. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  407. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  408. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  409. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  410. data/src/core/lib/iomgr/vsock.cc +1 -1
  411. data/src/core/lib/iomgr/vsock.h +1 -1
  412. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  413. data/src/core/lib/promise/activity.cc +2 -2
  414. data/src/core/lib/promise/activity.h +5 -4
  415. data/src/core/lib/promise/all_ok.h +3 -3
  416. data/src/core/lib/promise/arena_promise.h +47 -6
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/join_state.h +1 -1
  419. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  420. data/src/core/lib/promise/detail/promise_like.h +1 -1
  421. data/src/core/lib/promise/detail/seq_state.h +3 -3
  422. data/src/core/lib/promise/detail/status.h +1 -1
  423. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  424. data/src/core/lib/promise/for_each.h +3 -3
  425. data/src/core/lib/promise/if.h +1 -1
  426. data/src/core/lib/promise/inter_activity_latch.h +3 -3
  427. data/src/core/lib/promise/inter_activity_mutex.h +1 -1
  428. data/src/core/lib/promise/interceptor_list.h +3 -3
  429. data/src/core/lib/promise/latch.h +2 -2
  430. data/src/core/lib/promise/loop.h +2 -2
  431. data/src/core/lib/promise/map.h +2 -2
  432. data/src/core/lib/promise/mpsc.cc +5 -4
  433. data/src/core/lib/promise/observable.h +2 -2
  434. data/src/core/lib/promise/party.cc +14 -8
  435. data/src/core/lib/promise/party.h +11 -4
  436. data/src/core/lib/promise/pipe.h +16 -2
  437. data/src/core/lib/promise/poll.h +2 -2
  438. data/src/core/lib/promise/promise.h +2 -2
  439. data/src/core/lib/promise/sleep.h +1 -1
  440. data/src/core/lib/promise/status_flag.h +2 -2
  441. data/src/core/lib/promise/try_join.h +3 -3
  442. data/src/core/lib/promise/try_seq.h +3 -3
  443. data/src/core/lib/promise/wait_set.h +2 -2
  444. data/src/core/lib/resource_quota/api.cc +1 -1
  445. data/src/core/lib/resource_quota/arena.cc +1 -1
  446. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  447. data/src/core/lib/resource_quota/memory_quota.cc +3 -3
  448. data/src/core/lib/resource_quota/memory_quota.h +9 -5
  449. data/src/core/lib/resource_quota/periodic_update.h +1 -1
  450. data/src/core/lib/resource_quota/resource_quota.cc +8 -0
  451. data/src/core/lib/resource_quota/resource_quota.h +2 -1
  452. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  453. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  454. data/src/core/lib/resource_quota/telemetry.h +1 -0
  455. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  456. data/src/core/lib/security/authorization/audit_logging.cc +3 -3
  457. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  458. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  459. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  460. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  461. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
  462. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  463. data/src/core/lib/security/authorization/matchers.cc +2 -2
  464. data/src/core/lib/security/authorization/stdout_logger.cc +1 -1
  465. data/src/core/lib/slice/percent_encoding.cc +1 -1
  466. data/src/core/lib/slice/slice.cc +1 -1
  467. data/src/core/lib/slice/slice.h +2 -2
  468. data/src/core/lib/slice/slice_buffer.cc +1 -1
  469. data/src/core/lib/slice/slice_internal.h +1 -1
  470. data/src/core/lib/surface/call.cc +42 -14
  471. data/src/core/lib/surface/call.h +12 -5
  472. data/src/core/lib/surface/call_log_batch.cc +2 -2
  473. data/src/core/lib/surface/call_utils.cc +5 -5
  474. data/src/core/lib/surface/call_utils.h +83 -18
  475. data/src/core/lib/surface/channel.cc +2 -1
  476. data/src/core/lib/surface/channel.h +13 -3
  477. data/src/core/lib/surface/channel_create.cc +2 -2
  478. data/src/core/lib/surface/channel_create.h +1 -1
  479. data/src/core/lib/surface/channel_init.cc +5 -5
  480. data/src/core/lib/surface/channel_init.h +4 -2
  481. data/src/core/lib/surface/completion_queue.cc +4 -4
  482. data/src/core/lib/surface/filter_stack_call.cc +13 -8
  483. data/src/core/lib/surface/filter_stack_call.h +3 -3
  484. data/src/core/lib/surface/init.cc +4 -4
  485. data/src/core/lib/surface/lame_client.cc +2 -2
  486. data/src/core/lib/surface/lame_client.h +3 -3
  487. data/src/core/lib/surface/legacy_channel.cc +3 -3
  488. data/src/core/lib/surface/legacy_channel.h +1 -1
  489. data/src/core/lib/surface/validate_metadata.cc +2 -2
  490. data/src/core/lib/surface/validate_metadata.h +1 -1
  491. data/src/core/lib/surface/version.cc +2 -2
  492. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  493. data/src/core/lib/transport/bdp_estimator.h +2 -2
  494. data/src/core/lib/transport/connectivity_state.cc +1 -1
  495. data/src/core/lib/transport/connectivity_state.h +2 -2
  496. data/src/core/lib/transport/error_utils.h +1 -1
  497. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  498. data/src/core/lib/transport/promise_endpoint.h +3 -3
  499. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  500. data/src/core/lib/transport/transport.cc +3 -3
  501. data/src/core/lib/transport/transport.h +62 -4
  502. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  503. data/src/core/lib/transport/transport_op_string.cc +2 -2
  504. data/src/core/load_balancing/address_filtering.cc +1 -1
  505. data/src/core/load_balancing/address_filtering.h +2 -2
  506. data/src/core/load_balancing/backend_metric_parser.cc +1 -1
  507. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  508. data/src/core/load_balancing/child_policy_handler.cc +4 -4
  509. data/src/core/load_balancing/child_policy_handler.h +2 -2
  510. data/src/core/load_balancing/delegating_helper.h +2 -2
  511. data/src/core/load_balancing/endpoint_list.cc +4 -4
  512. data/src/core/load_balancing/endpoint_list.h +2 -2
  513. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
  514. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
  515. data/src/core/load_balancing/grpclb/grpclb.cc +13 -24
  516. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  517. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  518. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  519. data/src/core/load_balancing/health_check_client.cc +9 -5
  520. data/src/core/load_balancing/health_check_client_internal.h +3 -3
  521. data/src/core/load_balancing/lb_policy.h +11 -8
  522. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  523. data/src/core/load_balancing/lb_policy_registry.cc +2 -2
  524. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  525. data/src/core/load_balancing/oob_backend_metric.cc +7 -3
  526. data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
  527. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +7 -15
  528. data/src/core/load_balancing/pick_first/pick_first.cc +48 -18
  529. data/src/core/load_balancing/priority/priority.cc +6 -6
  530. data/src/core/load_balancing/ring_hash/ring_hash.cc +8 -8
  531. data/src/core/load_balancing/rls/rls.cc +10 -10
  532. data/src/core/load_balancing/round_robin/round_robin.cc +7 -7
  533. data/src/core/load_balancing/subchannel_interface.h +2 -2
  534. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +1 -1
  535. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +9 -15
  536. data/src/core/load_balancing/weighted_target/weighted_target.cc +9 -9
  537. data/src/core/load_balancing/xds/cds.cc +5 -5
  538. data/src/core/load_balancing/xds/xds_cluster_impl.cc +22 -39
  539. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  540. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  541. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  542. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  543. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  544. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  545. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  546. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  547. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
  548. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +6 -6
  549. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
  550. data/src/core/resolver/dns/dns_resolver_plugin.cc +2 -2
  551. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +8 -8
  552. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  553. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  554. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  555. data/src/core/resolver/endpoint_addresses.cc +4 -4
  556. data/src/core/resolver/endpoint_addresses.h +1 -1
  557. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  558. data/src/core/resolver/fake/fake_resolver.h +3 -3
  559. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +5 -5
  560. data/src/core/resolver/polling_resolver.cc +5 -5
  561. data/src/core/resolver/polling_resolver.h +1 -1
  562. data/src/core/resolver/resolver.h +2 -2
  563. data/src/core/resolver/resolver_factory.h +2 -2
  564. data/src/core/resolver/resolver_registry.cc +1 -1
  565. data/src/core/resolver/resolver_registry.h +1 -1
  566. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  567. data/src/core/resolver/xds/xds_config.cc +1 -1
  568. data/src/core/resolver/xds/xds_config.h +3 -3
  569. data/src/core/resolver/xds/xds_dependency_manager.cc +2 -2
  570. data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
  571. data/src/core/resolver/xds/xds_resolver.cc +16 -13
  572. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  573. data/src/core/server/add_port.cc +2 -2
  574. data/src/core/server/server.cc +9 -5
  575. data/src/core/server/server.h +8 -7
  576. data/src/core/server/server_call_tracer_filter.cc +1 -1
  577. data/src/core/server/server_call_tracer_filter.h +5 -1
  578. data/src/core/server/server_config_selector.h +2 -2
  579. data/src/core/server/server_config_selector_filter.cc +3 -3
  580. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  581. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  582. data/src/core/server/xds_server_config_fetcher.cc +10 -10
  583. data/src/core/service_config/service_config.h +1 -1
  584. data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
  585. data/src/core/service_config/service_config_impl.cc +3 -3
  586. data/src/core/service_config/service_config_impl.h +2 -2
  587. data/src/core/service_config/service_config_parser.h +1 -1
  588. data/src/core/telemetry/call_tracer.h +2 -2
  589. data/src/core/telemetry/default_tcp_tracer.h +3 -3
  590. data/src/core/telemetry/histogram.h +1 -1
  591. data/src/core/telemetry/instrument.cc +550 -270
  592. data/src/core/telemetry/instrument.h +301 -128
  593. data/src/core/telemetry/metrics.cc +2 -0
  594. data/src/core/telemetry/metrics.h +33 -4
  595. data/src/core/telemetry/stats.h +2 -2
  596. data/src/core/telemetry/stats_data.cc +1 -1
  597. data/src/core/telemetry/stats_data.h +2 -2
  598. data/src/core/transport/auth_context.cc +1 -1
  599. data/src/core/transport/auth_context.h +2 -1
  600. data/src/core/transport/auth_context_comparator_registry.h +1 -1
  601. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  602. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  603. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  604. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  605. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  606. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +9 -7
  607. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +1 -1
  608. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  609. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +1 -1
  610. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  611. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  612. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -1
  613. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  614. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +15 -2
  615. data/src/core/tsi/fake_transport_security.cc +2 -1
  616. data/src/core/tsi/local_transport_security.cc +1 -1
  617. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
  618. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  619. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  620. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
  621. data/src/core/tsi/ssl_transport_security.cc +6 -6
  622. data/src/core/tsi/ssl_transport_security.h +1 -1
  623. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  624. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  625. data/src/core/tsi/transport_security_grpc.cc +8 -0
  626. data/src/core/tsi/transport_security_grpc.h +15 -0
  627. data/src/core/util/alloc.cc +1 -1
  628. data/src/core/util/backoff.h +1 -1
  629. data/src/core/util/crash.h +1 -1
  630. data/src/core/util/dual_ref_counted.h +2 -2
  631. data/src/core/util/event_log.cc +1 -1
  632. data/src/core/util/event_log.h +3 -3
  633. data/src/core/util/gcp_metadata_query.cc +5 -5
  634. data/src/core/util/gcp_metadata_query.h +2 -2
  635. data/src/core/util/grpc_check.cc +2 -0
  636. data/src/core/util/grpc_check.h +1 -1
  637. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  638. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  639. data/src/core/util/http_client/format_request.cc +1 -1
  640. data/src/core/util/http_client/httpcli.cc +3 -3
  641. data/src/core/util/http_client/httpcli.h +4 -4
  642. data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
  643. data/src/core/util/http_client/parser.cc +1 -1
  644. data/src/core/util/json/json_channel_args.h +1 -1
  645. data/src/core/util/json/json_object_loader.h +6 -6
  646. data/src/core/util/json/json_reader.cc +2 -2
  647. data/src/core/util/json/json_reader.h +1 -1
  648. data/src/core/util/json/json_util.h +3 -3
  649. data/src/core/util/json/json_writer.cc +1 -1
  650. data/src/core/util/latent_see.cc +45 -24
  651. data/src/core/util/latent_see.h +192 -24
  652. data/src/core/util/linux/cpu.cc +1 -1
  653. data/src/core/util/load_file.cc +1 -1
  654. data/src/core/util/load_file.h +1 -1
  655. data/src/core/util/log.cc +3 -3
  656. data/src/core/util/lru_cache.h +1 -1
  657. data/src/core/util/matchers.h +1 -1
  658. data/src/core/util/memory_usage.h +3 -3
  659. data/src/core/util/mpscq.h +1 -1
  660. data/src/core/util/notification.h +1 -1
  661. data/src/core/util/posix/cpu.cc +1 -1
  662. data/src/core/util/posix/stat.cc +2 -2
  663. data/src/core/util/posix/thd.cc +2 -2
  664. data/src/core/util/posix/tmpfile.cc +2 -2
  665. data/src/core/util/ref_counted.h +2 -2
  666. data/src/core/util/ref_counted_ptr.h +1 -1
  667. data/src/core/util/ref_counted_string.h +1 -1
  668. data/src/core/util/single_set_ptr.h +3 -1
  669. data/src/core/util/status_helper.cc +8 -8
  670. data/src/core/util/status_helper.h +1 -1
  671. data/src/core/util/string.cc +2 -2
  672. data/src/core/util/sync_abseil.cc +1 -1
  673. data/src/core/util/table.h +1 -1
  674. data/src/core/util/time.cc +1 -1
  675. data/src/core/util/time_precise.cc +1 -1
  676. data/src/core/util/unique_ptr_with_bitset.h +1 -1
  677. data/src/core/util/unique_type_name.h +1 -1
  678. data/src/core/util/upb_utils.h +6 -1
  679. data/src/core/util/validation_errors.cc +2 -2
  680. data/src/core/util/validation_errors.h +2 -3
  681. data/src/core/util/wait_for_single_owner.h +2 -2
  682. data/src/core/util/windows/directory_reader.cc +1 -1
  683. data/src/core/util/windows/stat.cc +2 -2
  684. data/src/core/util/windows/thd.cc +2 -2
  685. data/src/core/util/windows/time.cc +1 -1
  686. data/src/core/util/work_serializer.cc +3 -3
  687. data/src/core/util/work_serializer.h +2 -2
  688. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  689. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  690. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  691. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  692. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  693. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  694. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
  695. data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
  696. data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
  697. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  698. data/src/core/xds/grpc/xds_client_grpc.cc +5 -5
  699. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  700. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  701. data/src/core/xds/grpc/xds_cluster.h +1 -1
  702. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -5
  703. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  704. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  705. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  706. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  707. data/src/core/xds/grpc/xds_common_types.h +1 -1
  708. data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
  709. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  710. data/src/core/xds/grpc/xds_endpoint_parser.cc +5 -5
  711. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  712. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  713. data/src/core/xds/grpc/xds_health_status.h +1 -1
  714. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  715. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  716. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  717. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  718. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
  719. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
  720. data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
  721. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  722. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  723. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  724. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  725. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  726. data/src/core/xds/grpc/xds_listener.cc +2 -2
  727. data/src/core/xds/grpc/xds_listener_parser.cc +6 -6
  728. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  729. data/src/core/xds/grpc/xds_matcher.cc +1 -1
  730. data/src/core/xds/grpc/xds_matcher.h +3 -3
  731. data/src/core/xds/grpc/xds_matcher_input.h +1 -1
  732. data/src/core/xds/grpc/xds_metadata.cc +1 -1
  733. data/src/core/xds/grpc/xds_metadata.h +3 -3
  734. data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
  735. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  736. data/src/core/xds/grpc/xds_route_config_parser.cc +8 -8
  737. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  738. data/src/core/xds/grpc/xds_routing.cc +4 -4
  739. data/src/core/xds/grpc/xds_routing.h +2 -2
  740. data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
  741. data/src/core/xds/grpc/xds_transport_grpc.cc +1 -1
  742. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  743. data/src/core/xds/xds_client/lrs_client.cc +3 -3
  744. data/src/core/xds/xds_client/lrs_client.h +4 -4
  745. data/src/core/xds/xds_client/xds_api.h +1 -1
  746. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  747. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  748. data/src/core/xds/xds_client/xds_client.cc +8 -8
  749. data/src/core/xds/xds_client/xds_client.h +5 -5
  750. data/src/core/xds/xds_client/xds_locality.h +2 -2
  751. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  752. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  753. data/src/core/xds/xds_client/xds_transport.h +2 -2
  754. data/src/ruby/ext/grpc/extconf.rb +14 -12
  755. data/src/ruby/ext/grpc/rb_call.c +0 -1
  756. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  757. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  758. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  759. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  760. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  761. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  762. data/src/ruby/lib/grpc/version.rb +1 -1
  763. metadata +16 -6
@@ -20,15 +20,18 @@
20
20
  #include <cstdint>
21
21
  #include <string>
22
22
  #include <utility>
23
+ #include <vector>
23
24
 
24
- #include "absl/status/status.h"
25
- #include "absl/strings/str_cat.h"
25
+ #include "src/core/call/message.h"
26
26
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
27
+ #include "src/core/lib/debug/trace_impl.h"
27
28
  #include "src/core/lib/slice/slice.h"
28
29
  #include "src/core/lib/slice/slice_buffer.h"
29
30
  #include "src/core/util/crash.h"
30
31
  #include "src/core/util/grpc_check.h"
31
32
  #include "src/core/util/memory_usage.h"
33
+ #include "absl/log/log.h"
34
+ #include "absl/strings/str_cat.h"
32
35
 
33
36
  // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
34
37
  // framing code
@@ -39,6 +42,9 @@ using grpc_core::http2::ValueOrHttp2Status;
39
42
 
40
43
  namespace grpc_core {
41
44
 
45
+ #define GRPC_HTTP2_FRAME_DLOG \
46
+ DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
47
+
42
48
  ///////////////////////////////////////////////////////////////////////////////
43
49
  // Settings Frame Validations
44
50
 
@@ -214,6 +220,11 @@ class SerializeHeaderAndPayload {
214
220
  serialize_return_(serialize_return) {}
215
221
 
216
222
  void operator()(Http2DataFrame& frame) {
223
+ GRPC_HTTP2_FRAME_DLOG
224
+ << "SerializeHeaderAndPayload Http2DataFrame Type:0 { stream_id:"
225
+ << frame.stream_id << ", end_stream:" << frame.end_stream
226
+ << ", payload_length:" << frame.payload.Length()
227
+ << ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
217
228
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
218
229
  Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
219
230
  static_cast<uint8_t>(FrameType::kData),
@@ -226,6 +237,12 @@ class SerializeHeaderAndPayload {
226
237
  }
227
238
 
228
239
  void operator()(Http2HeaderFrame& frame) {
240
+ GRPC_HTTP2_FRAME_DLOG
241
+ << "SerializeHeaderAndPayload Http2HeaderFrame Type:1 { stream_id:"
242
+ << frame.stream_id << ", end_headers:" << frame.end_headers
243
+ << ", end_stream:" << frame.end_stream
244
+ << ", payload_length:" << frame.payload.Length()
245
+ << ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
229
246
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
230
247
  Http2FrameHeader{
231
248
  static_cast<uint32_t>(frame.payload.Length()),
@@ -240,6 +257,13 @@ class SerializeHeaderAndPayload {
240
257
  }
241
258
 
242
259
  void operator()(Http2ContinuationFrame& frame) {
260
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2ContinuationFrame "
261
+ "Type:9 { stream_id:"
262
+ << frame.stream_id
263
+ << ", end_headers:" << frame.end_headers
264
+ << ", payload_length:" << frame.payload.Length()
265
+ << ", payload:" << MaybeTruncatePayload(frame.payload)
266
+ << "}";
243
267
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
244
268
  Http2FrameHeader{
245
269
  static_cast<uint32_t>(frame.payload.Length()),
@@ -253,6 +277,9 @@ class SerializeHeaderAndPayload {
253
277
  }
254
278
 
255
279
  void operator()(Http2RstStreamFrame& frame) {
280
+ GRPC_HTTP2_FRAME_DLOG
281
+ << "SerializeHeaderAndPayload Http2RstStreamFrame Type:3 { stream_id:"
282
+ << frame.stream_id << ", error_code:" << frame.error_code << "}";
256
283
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
257
284
  Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kRstStream), 0,
258
285
  frame.stream_id}
@@ -262,6 +289,10 @@ class SerializeHeaderAndPayload {
262
289
  }
263
290
 
264
291
  void operator()(Http2SettingsFrame& frame) {
292
+ GRPC_HTTP2_FRAME_DLOG
293
+ << "SerializeHeaderAndPayload Http2SettingsFrame Type:4 { ack:"
294
+ << frame.ack << ", length:" << frame.settings.size() << ", settings:["
295
+ << DebugStringSettings(frame.settings) << "] }";
265
296
  // Six bytes per setting (u16 id, u32 value)
266
297
  const size_t payload_size = 6 * frame.settings.size();
267
298
  auto hdr_and_payload =
@@ -280,6 +311,9 @@ class SerializeHeaderAndPayload {
280
311
  }
281
312
 
282
313
  void operator()(Http2PingFrame& frame) {
314
+ GRPC_HTTP2_FRAME_DLOG
315
+ << "SerializeHeaderAndPayload Http2PingFrame Type:6 { ack:" << frame.ack
316
+ << ", opaque:" << frame.opaque << "}";
283
317
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
284
318
  Http2FrameHeader{8, static_cast<uint8_t>(FrameType::kPing),
285
319
  MaybeFlag(frame.ack, kFlagAck), 0}
@@ -289,6 +323,10 @@ class SerializeHeaderAndPayload {
289
323
  }
290
324
 
291
325
  void operator()(Http2GoawayFrame& frame) {
326
+ GRPC_HTTP2_FRAME_DLOG
327
+ << "SerializeHeaderAndPayload Http2GoawayFrame Type:7 { last_stream_id:"
328
+ << frame.last_stream_id << ", error_code:" << frame.error_code
329
+ << ", debug_data:" << frame.debug_data.as_string_view() << "}";
292
330
  auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
293
331
  Http2FrameHeader{static_cast<uint32_t>(8 + frame.debug_data.length()),
294
332
  static_cast<uint8_t>(FrameType::kGoaway), 0, 0}
@@ -306,6 +344,10 @@ class SerializeHeaderAndPayload {
306
344
  }
307
345
 
308
346
  void operator()(Http2WindowUpdateFrame& frame) {
347
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2WindowUpdateFrame "
348
+ "Type:8 { stream_id:"
349
+ << frame.stream_id
350
+ << ", increment:" << frame.increment << "}";
309
351
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
310
352
  Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kWindowUpdate), 0,
311
353
  frame.stream_id}
@@ -321,6 +363,9 @@ class SerializeHeaderAndPayload {
321
363
  }
322
364
 
323
365
  void operator()(Http2SecurityFrame& frame) {
366
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2SecurityFrame "
367
+ "Type:200 { payload_length:"
368
+ << frame.payload.Length() << ", payload: redacted}";
324
369
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
325
370
  Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
326
371
  static_cast<uint8_t>(FrameType::kCustomSecurity), 0, 0}
@@ -331,9 +376,21 @@ class SerializeHeaderAndPayload {
331
376
 
332
377
  void operator()(Http2UnknownFrame&) { Crash("unreachable"); }
333
378
 
334
- void operator()(Http2EmptyFrame&) {}
379
+ void operator()(Http2EmptyFrame&) {
380
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2EmptyFrame {}";
381
+ }
335
382
 
336
383
  private:
384
+ std::string DebugStringSettings(
385
+ const std::vector<Http2SettingsFrame::Setting>& settings) {
386
+ std::string settings_str;
387
+ for (const auto& setting : settings) {
388
+ absl::StrAppend(&settings_str, " {id:", setting.id,
389
+ ", value:", setting.value, "}");
390
+ }
391
+ return settings_str;
392
+ }
393
+
337
394
  SliceBuffer& out_;
338
395
  MutableSlice extra_bytes_;
339
396
  SerializeReturn& serialize_return_;
@@ -390,6 +447,8 @@ ValueOrHttp2Status<Http2Frame> ParseDataFrame(const Http2FrameHeader& hdr,
390
447
  std::move(payload)});
391
448
  }
392
449
 
450
+ // This function MUST NOT return a Http2StreamError. Doing this will cause the
451
+ // HPACK state to be corrupted.
393
452
  ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
394
453
  SliceBuffer& payload) {
395
454
  if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
@@ -426,6 +485,8 @@ ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
426
485
  ExtractFlag(hdr.flags, kFlagEndStream), std::move(payload)});
427
486
  }
428
487
 
488
+ // This function MUST NOT return a Http2StreamError. Doing this will cause the
489
+ // HPACK state to be corrupted.
429
490
  ValueOrHttp2Status<Http2Frame> ParseContinuationFrame(
430
491
  const Http2FrameHeader& hdr, SliceBuffer& payload) {
431
492
  if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
@@ -577,15 +638,14 @@ ValueOrHttp2Status<Http2Frame> ParseWindowUpdateFrame(
577
638
  payload.CopyToBuffer(buffer);
578
639
  const uint32_t window_size_increment = Read31bits(buffer);
579
640
  if (GPR_UNLIKELY(window_size_increment == 0)) {
580
- if (hdr.stream_id == 0) {
581
- return Http2Status::Http2ConnectionError(
582
- Http2ErrorCode::kProtocolError,
583
- absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
584
- } else {
585
- return Http2Status::Http2StreamError(
586
- Http2ErrorCode::kProtocolError,
587
- absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
588
- }
641
+ // According to RFC9113, if window_size_increment == 0, and (stream id != 0)
642
+ // the receiver MUST treat this as a stream error of type PROTOCOL_ERROR.
643
+ // However we will be treating this too as a connection error
644
+ // 1. To be consistent with CHTTP2 transport
645
+ // 2. To be less lenient as compared to the RFC9113 for security reasons.
646
+ return Http2Status::Http2ConnectionError(
647
+ Http2ErrorCode::kProtocolError,
648
+ absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
589
649
  }
590
650
  return ValueOrHttp2Status<Http2Frame>(
591
651
  Http2WindowUpdateFrame{hdr.stream_id, window_size_increment});
@@ -699,10 +759,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
699
759
  }
700
760
  }
701
761
 
702
- http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(
762
+ http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(
703
763
  const uint32_t error_code) {
704
764
  if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
705
- LOG(ERROR) << "RstFrameErrorCodeToHttp2ErrorCode: Invalid error code "
765
+ LOG(ERROR) << "FrameErrorCodeToHttp2ErrorCode: Invalid error code "
706
766
  "received from RST_STREAM frame: "
707
767
  << error_code;
708
768
  return http2::Http2ErrorCode::kInternalError;
@@ -710,9 +770,10 @@ http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(
710
770
  return static_cast<http2::Http2ErrorCode>(error_code);
711
771
  }
712
772
 
713
- uint32_t Http2ErrorCodeToRstFrameErrorCode(
773
+ uint32_t Http2ErrorCodeToFrameErrorCode(
714
774
  const http2::Http2ErrorCode error_code) {
715
- DCHECK_LE(static_cast<uint8_t>(error_code), http2::GetMaxHttp2ErrorCode());
775
+ GRPC_DCHECK_LE(static_cast<uint8_t>(error_code),
776
+ http2::GetMaxHttp2ErrorCode());
716
777
  return static_cast<uint32_t>(error_code);
717
778
  }
718
779
 
@@ -722,28 +783,73 @@ size_t GetFrameMemoryUsage(const Http2Frame& frame) {
722
783
 
723
784
  ///////////////////////////////////////////////////////////////////////////////
724
785
  // GRPC Header
786
+ namespace {
787
+ ValueOrHttp2Status<uint32_t> ParseGrpcMessageFlags(const uint8_t flags) {
788
+ switch (flags) {
789
+ case kGrpcMessageHeaderNoFlags:
790
+ return 0u;
791
+ case kGrpcMessageHeaderWriteInternalCompress:
792
+ return GRPC_WRITE_INTERNAL_COMPRESS;
793
+ default:
794
+ LOG(ERROR) << "Invalid gRPC header flags: "
795
+ << static_cast<uint32_t>(flags);
796
+ return Http2Status::Http2StreamError(
797
+ Http2ErrorCode::kInternalError,
798
+ absl::StrCat("Invalid gRPC header flags: ", flags));
799
+ }
800
+ }
725
801
 
726
- GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
802
+ uint8_t SerializeGrpcMessageFlags(const uint32_t flags) {
803
+ return (flags & GRPC_WRITE_INTERNAL_COMPRESS)
804
+ ? kGrpcMessageHeaderWriteInternalCompress
805
+ : kGrpcMessageHeaderNoFlags;
806
+ }
807
+ } // namespace
808
+
809
+ ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(SliceBuffer& payload) {
727
810
  GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
728
811
  uint8_t buffer[kGrpcHeaderSizeInBytes];
729
812
  payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
730
813
  GrpcMessageHeader header;
731
- header.flags = buffer[0];
814
+ ValueOrHttp2Status<uint32_t> message_flags = ParseGrpcMessageFlags(buffer[0]);
815
+ if (!message_flags.IsOk()) {
816
+ return message_flags.TakeStatus(std::move(message_flags));
817
+ }
818
+
819
+ header.flags = message_flags.value();
732
820
  header.length = Read4b(buffer + 1);
733
821
  return header;
734
822
  }
735
823
 
736
- void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
824
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint32_t flags,
737
825
  const uint32_t length) {
738
826
  uint8_t* frame_hdr = payload.AddTiny(kGrpcHeaderSizeInBytes);
739
- frame_hdr[0] = flags;
827
+ frame_hdr[0] = SerializeGrpcMessageFlags(flags);
740
828
  Write4b(length, frame_hdr + 1);
741
829
  }
742
830
 
743
831
  Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
744
832
  const bool incoming_header_in_progress,
745
833
  const uint32_t incoming_header_stream_id,
746
- Http2FrameHeader& current_frame_header) {
834
+ Http2FrameHeader& current_frame_header,
835
+ const uint32_t last_stream_id,
836
+ const bool is_client,
837
+ const bool is_first_settings_processed) {
838
+ if (GPR_UNLIKELY(!is_first_settings_processed)) {
839
+ // This check works only because we pause the read loop after reading the
840
+ // first SETTINGS frame.
841
+ const bool is_settings_frame =
842
+ (current_frame_header.type ==
843
+ static_cast<uint8_t>(FrameType::kSettings) &&
844
+ !ExtractFlag(current_frame_header.flags, kFlagAck));
845
+ if (GPR_UNLIKELY(!is_settings_frame)) {
846
+ return Http2Status::Http2ConnectionError(
847
+ Http2ErrorCode::kProtocolError,
848
+ std::string(is_client ? RFC9113::kFirstSettingsFrameClient
849
+ : RFC9113::kFirstSettingsFrameServer));
850
+ }
851
+ }
852
+
747
853
  if (GPR_UNLIKELY(current_frame_header.length > max_frame_size_setting)) {
748
854
  return Http2Status::Http2ConnectionError(
749
855
  Http2ErrorCode::kFrameSizeError,
@@ -760,8 +866,28 @@ Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
760
866
  Http2ErrorCode::kProtocolError,
761
867
  std::string(RFC9113::kAssemblerContiguousSequenceError));
762
868
  }
869
+ // If a frame is received with a stream id larger than the last stream id sent
870
+ // by the transport, it is a protocol error. This condition holds for clients
871
+ // as in gRPC only clients can initiate a stream. last_stream_id is the stream
872
+ // id of the last stream created by the transport. If no streams were created
873
+ // by the transport, last_stream_id is 0.
874
+ // TODO(akshitpatel) : [PH2][P3] : Revisit this for server.
875
+ if (is_client && current_frame_header.stream_id > last_stream_id) {
876
+ return Http2Status::Http2ConnectionError(
877
+ Http2ErrorCode::kProtocolError, std::string(RFC9113::kUnknownStreamId));
878
+ }
763
879
  // TODO(tjagtap) : [PH2][P2]:Consider validating MAX_CONCURRENT_STREAMS here
880
+ // for server.
764
881
  return Http2Status::Ok();
765
882
  }
766
883
 
884
+ std::string MaybeTruncatePayload(SliceBuffer& payload, const uint32_t length) {
885
+ if (payload.Length() <= length) {
886
+ return payload.JoinIntoString();
887
+ }
888
+ std::string result(length, '\0');
889
+ payload.CopyFirstNBytesIntoBuffer(length, result.data());
890
+ return absl::StrCat(result, "<clipped>");
891
+ }
892
+
767
893
  } // namespace grpc_core
@@ -22,16 +22,20 @@
22
22
  #include <variant>
23
23
  #include <vector>
24
24
 
25
- #include "absl/status/statusor.h"
26
- #include "absl/strings/string_view.h"
27
- #include "absl/types/span.h"
28
25
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
29
26
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
30
27
  #include "src/core/lib/slice/slice.h"
31
28
  #include "src/core/lib/slice/slice_buffer.h"
29
+ #include "absl/status/statusor.h"
30
+ #include "absl/strings/string_view.h"
31
+ #include "absl/types/span.h"
32
32
 
33
33
  namespace grpc_core {
34
34
 
35
+ // Prints the first `length` bytes of the payload. If the payload is longer than
36
+ // `length`, it appends "<clipped>" to the output.
37
+ std::string MaybeTruncatePayload(SliceBuffer& payload, uint32_t length = 15);
38
+
35
39
  ///////////////////////////////////////////////////////////////////////////////
36
40
  // Frame types
37
41
  //
@@ -242,8 +246,8 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
242
246
  // move things out of frames)
243
247
  SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
244
248
 
245
- http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
246
- uint32_t Http2ErrorCodeToRstFrameErrorCode(http2::Http2ErrorCode error_code);
249
+ http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
250
+ uint32_t Http2ErrorCodeToFrameErrorCode(http2::Http2ErrorCode error_code);
247
251
 
248
252
  // Returns approximate memory usage of the frame.
249
253
  size_t GetFrameMemoryUsage(const Http2Frame& frame);
@@ -252,19 +256,22 @@ size_t GetFrameMemoryUsage(const Http2Frame& frame);
252
256
  // GRPC Header
253
257
 
254
258
  constexpr uint8_t kGrpcHeaderSizeInBytes = 5;
259
+ constexpr uint8_t kGrpcMessageHeaderNoFlags = 0;
260
+ constexpr uint8_t kGrpcMessageHeaderWriteInternalCompress = 1;
255
261
 
256
262
  struct GrpcMessageHeader {
257
- uint8_t flags = 0;
263
+ uint32_t flags = 0;
258
264
  uint32_t length = 0;
259
265
  };
260
266
 
261
267
  // If the payload SliceBuffer is too small to hold a gRPC header, this function
262
268
  // will crash. The calling function MUST ensure that the payload SliceBuffer
263
269
  // has length greater than or equal to the gRPC header.
264
- GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload);
270
+ http2::ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(
271
+ SliceBuffer& payload);
265
272
 
266
- void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
267
- const uint32_t length);
273
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, uint32_t flags,
274
+ uint32_t length);
268
275
 
269
276
  ///////////////////////////////////////////////////////////////////////////////
270
277
  // Validations
@@ -275,7 +282,9 @@ http2::Http2Status ValidateSettingsValues(
275
282
  http2::Http2Status ValidateFrameHeader(uint32_t max_frame_size_setting,
276
283
  bool incoming_header_in_progress,
277
284
  uint32_t incoming_header_stream_id,
278
- Http2FrameHeader& current_frame_header);
285
+ Http2FrameHeader& current_frame_header,
286
+ uint32_t last_stream_id, bool is_client,
287
+ bool is_first_settings_processed);
279
288
 
280
289
  ///////////////////////////////////////////////////////////////////////////////
281
290
  // RFC9113 Related Strings and Consts
@@ -309,6 +318,9 @@ inline constexpr absl::string_view kSettingsStreamIdMustBeZero =
309
318
  "RFC9113: If an endpoint receives a SETTINGS frame whose Stream "
310
319
  "Identifier field is anything other than 0x00, the endpoint MUST respond "
311
320
  "with a connection error";
321
+ inline constexpr absl::string_view kUnknownStreamId =
322
+ "RFC9113: An endpoint that receives an unexpected stream identifier MUST "
323
+ "respond with a connection error";
312
324
 
313
325
  // Frame length related errors
314
326
  inline constexpr absl::string_view kRstStreamLength4 =
@@ -368,6 +380,18 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
368
380
  inline constexpr absl::string_view kSettingsTimeout =
369
381
  "Settings timeout. The HTTP2 settings frame was not ACKed within the "
370
382
  "timeout. Connection will be closed";
383
+ inline constexpr absl::string_view kLastStreamClosed =
384
+ "Closing last stream and cannot create any more streams.";
385
+ inline constexpr absl::string_view kFirstSettingsFrameClient =
386
+ "RFC9113: The server connection preface consists of a potentially empty "
387
+ "SETTINGS frame that MUST be the first frame the server sends in the "
388
+ "HTTP/2 connection. Clients and servers MUST treat an invalid connection "
389
+ "preface as a connection error of type PROTOCOL_ERROR.";
390
+ inline constexpr absl::string_view kFirstSettingsFrameServer =
391
+ "RFC9113: The client connection preface starts with a sequence of 24 "
392
+ "octets. This sequence is followed by a SETTINGS frame, which MAY be "
393
+ "empty. Clients and servers MUST treat an invalid connection preface as a "
394
+ "connection error of type PROTOCOL_ERROR.";
371
395
 
372
396
  inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
373
397
  inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
@@ -378,6 +402,16 @@ inline constexpr uint32_t kMaximumFrameSize = 16777215;
378
402
  inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
379
403
 
380
404
  } // namespace RFC9113
405
+
406
+ namespace GrpcErrors {
407
+ inline constexpr absl::string_view kTooManyMetadata =
408
+ "gRPC Error : A gRPC server can send upto 1 initial metadata followed by "
409
+ "upto 1 trailing metadata.";
410
+ inline constexpr absl::string_view kOutOfOrderDataFrame =
411
+ "gRPC Error : DATA frames must follow initial metadata and precede "
412
+ "trailing metadata.";
413
+ } // namespace GrpcErrors
414
+
381
415
  } // namespace grpc_core
382
416
 
383
417
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H
@@ -22,8 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
  #include <stdlib.h>
24
24
 
25
- #include "absl/status/status.h"
26
- #include "absl/strings/str_format.h"
27
25
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
28
26
  #include "src/core/ext/transport/chttp2/transport/internal.h"
29
27
  #include "src/core/lib/experiments/experiments.h"
@@ -33,6 +31,8 @@
33
31
  #include "src/core/telemetry/stats.h"
34
32
  #include "src/core/util/grpc_check.h"
35
33
  #include "src/core/util/status_helper.h"
34
+ #include "absl/status/status.h"
35
+ #include "absl/strings/str_format.h"
36
36
 
37
37
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
38
38
  uint32_t stream_id,
@@ -25,7 +25,6 @@
25
25
  #include <grpc/support/port_platform.h>
26
26
  #include <stdint.h>
27
27
 
28
- #include "absl/status/status.h"
29
28
  #include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
30
29
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
31
30
  #include "src/core/lib/iomgr/error.h"
@@ -33,6 +32,7 @@
33
32
  #include "src/core/lib/slice/slice_buffer.h"
34
33
  #include "src/core/lib/transport/transport.h"
35
34
  #include "src/core/telemetry/call_tracer.h"
35
+ #include "absl/status/status.h"
36
36
 
37
37
  // start processing a new data frame
38
38
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
@@ -23,12 +23,12 @@
23
23
  #include <grpc/support/port_platform.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "src/core/ext/transport/chttp2/transport/internal.h"
27
+ #include "src/core/util/grpc_check.h"
26
28
  #include "absl/base/attributes.h"
27
29
  #include "absl/status/status.h"
28
30
  #include "absl/strings/str_format.h"
29
31
  #include "absl/strings/string_view.h"
30
- #include "src/core/ext/transport/chttp2/transport/internal.h"
31
- #include "src/core/util/grpc_check.h"
32
32
 
33
33
  void grpc_chttp2_goaway_parser_init(grpc_chttp2_goaway_parser* p) {
34
34
  p->debug_data = nullptr;
@@ -25,15 +25,15 @@
25
25
 
26
26
  #include <algorithm>
27
27
 
28
- #include "absl/container/flat_hash_map.h"
29
- #include "absl/log/log.h"
30
- #include "absl/status/status.h"
31
- #include "absl/strings/str_format.h"
32
28
  #include "src/core/ext/transport/chttp2/transport/internal.h"
33
29
  #include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
34
30
  #include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
35
31
  #include "src/core/lib/debug/trace.h"
36
32
  #include "src/core/util/grpc_check.h"
33
+ #include "absl/container/flat_hash_map.h"
34
+ #include "absl/log/log.h"
35
+ #include "absl/status/status.h"
36
+ #include "absl/strings/str_format.h"
37
37
 
38
38
  grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
39
39
  grpc_slice slice = GRPC_SLICE_MALLOC(9 + 8);
@@ -22,11 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
  #include <stddef.h>
24
24
 
25
- #include "absl/log/log.h"
26
- #include "absl/random/distributions.h"
27
- #include "absl/status/status.h"
28
- #include "absl/strings/str_cat.h"
29
- #include "absl/strings/str_format.h"
30
25
  #include "src/core/call/metadata_batch.h"
31
26
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
32
27
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
@@ -38,6 +33,11 @@
38
33
  #include "src/core/util/grpc_check.h"
39
34
  #include "src/core/util/shared_bit_gen.h"
40
35
  #include "src/core/util/status_helper.h"
36
+ #include "absl/log/log.h"
37
+ #include "absl/random/distributions.h"
38
+ #include "absl/status/status.h"
39
+ #include "absl/strings/str_cat.h"
40
+ #include "absl/strings/str_format.h"
41
41
 
42
42
  using grpc_core::http2::Http2ErrorCode;
43
43
 
@@ -19,13 +19,13 @@
19
19
  #include <cstddef>
20
20
  #include <cstdint>
21
21
 
22
- #include "absl/status/status.h"
23
22
  #include "src/core/ext/transport/chttp2/transport/internal.h"
24
23
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
25
24
  #include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
26
25
  #include "src/core/lib/slice/slice.h"
27
26
  #include "src/core/lib/slice/slice_buffer.h"
28
27
  #include "src/core/lib/transport/transport_framing_endpoint_extension.h"
28
+ #include "absl/status/status.h"
29
29
 
30
30
  absl::Status grpc_chttp2_security_frame_parser_parse(void* parser,
31
31
  grpc_chttp2_transport* t,
@@ -24,10 +24,6 @@
24
24
 
25
25
  #include <string>
26
26
 
27
- #include "absl/base/attributes.h"
28
- #include "absl/log/log.h"
29
- #include "absl/status/status.h"
30
- #include "absl/strings/str_format.h"
31
27
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
32
28
  #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
33
29
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
@@ -40,6 +36,10 @@
40
36
  #include "src/core/telemetry/stats.h"
41
37
  #include "src/core/util/debug_location.h"
42
38
  #include "src/core/util/useful.h"
39
+ #include "absl/base/attributes.h"
40
+ #include "absl/log/log.h"
41
+ #include "absl/status/status.h"
42
+ #include "absl/strings/str_format.h"
43
43
 
44
44
  using grpc_core::http2::Http2ErrorCode;
45
45
 
@@ -135,21 +135,13 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
135
135
  t->http2_ztrace_collector.Append(
136
136
  []() { return grpc_core::H2SettingsTrace<false>{true, {}}; });
137
137
  *parser->target_settings = *parser->incoming_settings;
138
+ t->MaybeNotifyStateWatcherOfPeerMaxConcurrentStreamsLocked();
138
139
  t->num_pending_induced_frames++;
139
140
  grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
140
141
  grpc_chttp2_initiate_write(t,
141
142
  GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK);
142
- if (t->notify_on_receive_settings != nullptr) {
143
- if (t->interested_parties_until_recv_settings != nullptr) {
144
- grpc_endpoint_delete_from_pollset_set(
145
- t->ep.get(), t->interested_parties_until_recv_settings);
146
- t->interested_parties_until_recv_settings = nullptr;
147
- }
148
- grpc_core::ExecCtx::Run(DEBUG_LOCATION,
149
- t->notify_on_receive_settings,
150
- absl::OkStatus());
151
- t->notify_on_receive_settings = nullptr;
152
- }
143
+ t->MaybeNotifyOnReceiveSettingsLocked(
144
+ parser->target_settings->max_concurrent_streams());
153
145
  }
154
146
  return absl::OkStatus();
155
147
  }
@@ -21,9 +21,6 @@
21
21
  #include <grpc/support/port_platform.h>
22
22
  #include <stddef.h>
23
23
 
24
- #include "absl/status/status.h"
25
- #include "absl/strings/str_cat.h"
26
- #include "absl/strings/str_format.h"
27
24
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
28
25
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
29
26
  #include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
@@ -32,6 +29,9 @@
32
29
  #include "src/core/telemetry/stats.h"
33
30
  #include "src/core/util/grpc_check.h"
34
31
  #include "src/core/util/time.h"
32
+ #include "absl/status/status.h"
33
+ #include "absl/strings/str_cat.h"
34
+ #include "absl/strings/str_format.h"
35
35
 
36
36
  grpc_slice grpc_chttp2_window_update_create(
37
37
  uint32_t id, uint32_t window_delta,