grpc 1.75.0.pre1 → 1.76.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 (387) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +18 -5
  3. data/include/grpc/credentials.h +21 -5
  4. data/src/core/call/call_filters.cc +4 -4
  5. data/src/core/call/call_filters.h +36 -36
  6. data/src/core/call/call_spine.h +27 -27
  7. data/src/core/call/client_call.cc +6 -5
  8. data/src/core/call/filter_fusion.h +5 -5
  9. data/src/core/call/metadata_batch.h +3 -3
  10. data/src/core/call/security_context.cc +1 -1
  11. data/src/core/call/server_call.cc +4 -4
  12. data/src/core/call/server_call.h +1 -1
  13. data/src/core/channelz/channelz.cc +12 -18
  14. data/src/core/channelz/channelz.h +32 -16
  15. data/src/core/channelz/channelz_registry.h +11 -0
  16. data/src/core/channelz/property_list.cc +18 -0
  17. data/src/core/channelz/property_list.h +10 -1
  18. data/src/core/channelz/text_encode.cc +66 -0
  19. data/src/core/channelz/text_encode.h +29 -0
  20. data/src/core/channelz/v2tov1/convert.cc +11 -0
  21. data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
  22. data/src/core/channelz/ztrace_collector.h +247 -86
  23. data/src/core/client_channel/backup_poller.cc +5 -6
  24. data/src/core/client_channel/client_channel.cc +20 -13
  25. data/src/core/client_channel/client_channel_filter.cc +53 -45
  26. data/src/core/client_channel/client_channel_filter.h +2 -2
  27. data/src/core/client_channel/client_channel_internal.h +3 -4
  28. data/src/core/client_channel/config_selector.h +3 -3
  29. data/src/core/client_channel/dynamic_filters.cc +3 -3
  30. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  31. data/src/core/client_channel/global_subchannel_pool.h +0 -27
  32. data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
  33. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  34. data/src/core/client_channel/retry_filter.h +3 -3
  35. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  36. data/src/core/client_channel/subchannel.cc +8 -8
  37. data/src/core/client_channel/subchannel_stream_client.cc +4 -4
  38. data/src/core/config/config_vars.cc +30 -1
  39. data/src/core/config/config_vars.h +21 -0
  40. data/src/core/config/core_configuration.cc +5 -5
  41. data/src/core/config/core_configuration.h +7 -7
  42. data/src/core/config/load_config.cc +12 -0
  43. data/src/core/config/load_config.h +2 -0
  44. data/src/core/credentials/call/call_credentials.h +2 -2
  45. data/src/core/credentials/call/call_creds_util.cc +4 -3
  46. data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
  47. data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
  48. data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
  49. data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
  50. data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
  51. data/src/core/credentials/call/jwt/json_token.cc +3 -3
  52. data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
  53. data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
  54. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
  55. data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
  56. data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
  57. data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
  58. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
  59. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  60. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  61. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  62. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +5 -5
  63. data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
  64. data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
  65. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  66. data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
  67. data/src/core/credentials/transport/security_connector.cc +5 -5
  68. data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
  69. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  70. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
  71. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  72. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
  73. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
  74. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
  75. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
  76. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
  77. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
  78. data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
  79. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
  80. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
  81. data/src/core/credentials/transport/transport_credentials.cc +2 -2
  82. data/src/core/credentials/transport/transport_credentials.h +2 -2
  83. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  84. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
  85. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
  86. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  87. data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
  88. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
  89. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
  92. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
  95. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  96. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
  97. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
  98. data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
  99. data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
  101. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
  102. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
  103. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
  104. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
  105. data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
  106. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
  107. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
  108. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  109. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
  110. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
  111. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
  112. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  114. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
  115. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
  116. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
  117. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
  118. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
  119. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
  120. data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
  121. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
  122. data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
  123. data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
  124. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
  125. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
  127. data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
  128. data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
  129. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
  130. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
  131. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  132. data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
  133. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  134. data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
  135. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
  137. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
  138. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
  139. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  140. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  141. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  142. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  143. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  144. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  145. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  146. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  147. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  148. data/src/core/filter/auth/server_auth_filter.cc +2 -2
  149. data/src/core/handshaker/handshaker.cc +3 -3
  150. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
  151. data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
  152. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
  153. data/src/core/handshaker/security/secure_endpoint.cc +16 -6
  154. data/src/core/handshaker/security/security_handshaker.cc +3 -3
  155. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
  156. data/src/core/lib/channel/channel_stack.cc +8 -5
  157. data/src/core/lib/channel/channel_stack.h +3 -0
  158. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
  159. data/src/core/lib/channel/connected_channel.cc +2 -2
  160. data/src/core/lib/channel/promise_based_filter.cc +69 -64
  161. data/src/core/lib/channel/promise_based_filter.h +16 -15
  162. data/src/core/lib/compression/compression_internal.cc +2 -2
  163. data/src/core/lib/compression/message_compress.cc +7 -7
  164. data/src/core/lib/event_engine/ares_resolver.cc +22 -20
  165. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
  166. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
  167. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
  168. data/src/core/lib/event_engine/extensions/channelz.h +2 -2
  169. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  170. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
  171. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
  172. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
  173. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
  174. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
  175. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
  176. data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
  177. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
  178. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
  179. data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
  180. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  181. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +3 -3
  182. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  183. data/src/core/lib/event_engine/shim.cc +8 -11
  184. data/src/core/lib/event_engine/shim.h +2 -1
  185. data/src/core/lib/event_engine/slice.cc +2 -2
  186. data/src/core/lib/event_engine/tcp_socket_utils.cc +11 -11
  187. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
  188. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
  189. data/src/core/lib/event_engine/windows/iocp.cc +10 -10
  190. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  191. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
  192. data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
  193. data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
  194. data/src/core/lib/experiments/experiments.cc +105 -18
  195. data/src/core/lib/experiments/experiments.h +43 -11
  196. data/src/core/lib/iomgr/call_combiner.cc +3 -3
  197. data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
  198. data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
  199. data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
  200. data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
  201. data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
  202. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
  203. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  204. data/src/core/lib/iomgr/iocp_windows.cc +8 -8
  205. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  206. data/src/core/lib/iomgr/lockfree_event.cc +2 -2
  207. data/src/core/lib/iomgr/polling_entity.cc +3 -3
  208. data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
  209. data/src/core/lib/iomgr/socket_windows.cc +4 -4
  210. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
  211. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  212. data/src/core/lib/iomgr/tcp_posix.cc +42 -42
  213. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  214. data/src/core/lib/iomgr/tcp_server.h +7 -0
  215. data/src/core/lib/iomgr/tcp_server_posix.cc +47 -27
  216. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  217. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
  218. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  219. data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
  220. data/src/core/lib/iomgr/tcp_windows.cc +7 -7
  221. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  222. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  223. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  224. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  225. data/src/core/lib/promise/activity.cc +2 -2
  226. data/src/core/lib/promise/activity.h +6 -6
  227. data/src/core/lib/promise/context.h +2 -2
  228. data/src/core/lib/promise/detail/join_state.h +9 -9
  229. data/src/core/lib/promise/detail/seq_state.h +13 -13
  230. data/src/core/lib/promise/detail/status.h +2 -2
  231. data/src/core/lib/promise/for_each.h +5 -5
  232. data/src/core/lib/promise/interceptor_list.h +2 -2
  233. data/src/core/lib/promise/latch.h +7 -7
  234. data/src/core/lib/promise/mpsc.cc +26 -26
  235. data/src/core/lib/promise/mpsc.h +2 -2
  236. data/src/core/lib/promise/observable.h +4 -4
  237. data/src/core/lib/promise/party.cc +32 -25
  238. data/src/core/lib/promise/party.h +16 -19
  239. data/src/core/lib/promise/pipe.h +15 -15
  240. data/src/core/lib/promise/poll.h +5 -4
  241. data/src/core/lib/promise/promise.h +0 -2
  242. data/src/core/lib/promise/sleep.cc +3 -1
  243. data/src/core/lib/promise/status_flag.h +7 -7
  244. data/src/core/lib/promise/try_join.h +2 -2
  245. data/src/core/lib/promise/try_seq.h +2 -2
  246. data/src/core/lib/resource_quota/arena.h +15 -2
  247. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  248. data/src/core/lib/resource_quota/memory_quota.cc +45 -24
  249. data/src/core/lib/resource_quota/memory_quota.h +48 -16
  250. data/src/core/lib/resource_quota/telemetry.h +54 -0
  251. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  252. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  253. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  254. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  255. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  256. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  257. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  258. data/src/core/lib/surface/call.cc +16 -14
  259. data/src/core/lib/surface/call.h +1 -1
  260. data/src/core/lib/surface/call_utils.cc +2 -2
  261. data/src/core/lib/surface/call_utils.h +2 -2
  262. data/src/core/lib/surface/channel.cc +4 -4
  263. data/src/core/lib/surface/channel_create.cc +10 -6
  264. data/src/core/lib/surface/channel_init.cc +80 -23
  265. data/src/core/lib/surface/channel_init.h +26 -11
  266. data/src/core/lib/surface/completion_queue.cc +17 -16
  267. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  268. data/src/core/lib/surface/connection_context.h +45 -2
  269. data/src/core/lib/surface/filter_stack_call.cc +12 -23
  270. data/src/core/lib/surface/filter_stack_call.h +3 -4
  271. data/src/core/lib/surface/legacy_channel.cc +7 -7
  272. data/src/core/lib/surface/validate_metadata.h +2 -2
  273. data/src/core/lib/surface/version.cc +2 -2
  274. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  275. data/src/core/lib/transport/bdp_estimator.h +3 -3
  276. data/src/core/lib/transport/promise_endpoint.cc +3 -3
  277. data/src/core/lib/transport/promise_endpoint.h +8 -8
  278. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  279. data/src/core/load_balancing/child_policy_handler.cc +4 -4
  280. data/src/core/load_balancing/endpoint_list.cc +2 -2
  281. data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
  282. data/src/core/load_balancing/health_check_client.cc +4 -4
  283. data/src/core/load_balancing/health_check_client_internal.h +2 -2
  284. data/src/core/load_balancing/lb_policy_registry.cc +2 -2
  285. data/src/core/load_balancing/oob_backend_metric.cc +4 -4
  286. data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
  287. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  288. data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
  289. data/src/core/load_balancing/priority/priority.cc +23 -24
  290. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
  291. data/src/core/load_balancing/rls/rls.cc +13 -13
  292. data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
  293. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  294. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -26
  295. data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
  296. data/src/core/load_balancing/xds/cds.cc +76 -32
  297. data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
  298. data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
  299. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  300. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
  301. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
  302. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
  303. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
  304. data/src/core/resolver/endpoint_addresses.cc +3 -3
  305. data/src/core/resolver/endpoint_addresses.h +3 -0
  306. data/src/core/resolver/fake/fake_resolver.cc +2 -2
  307. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
  308. data/src/core/resolver/polling_resolver.cc +3 -3
  309. data/src/core/resolver/resolver_registry.cc +5 -4
  310. data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
  311. data/src/core/resolver/xds/xds_resolver.cc +9 -9
  312. data/src/core/server/server.cc +38 -38
  313. data/src/core/server/server_call_tracer_filter.h +4 -4
  314. data/src/core/server/server_config_selector_filter.cc +2 -2
  315. data/src/core/server/xds_server_config_fetcher.cc +9 -8
  316. data/src/core/service_config/service_config_impl.h +2 -2
  317. data/src/core/telemetry/call_tracer.cc +39 -49
  318. data/src/core/telemetry/call_tracer.h +199 -22
  319. data/src/core/telemetry/histogram.h +205 -0
  320. data/src/core/telemetry/instrument.cc +719 -0
  321. data/src/core/telemetry/instrument.h +932 -0
  322. data/src/core/telemetry/metrics.cc +13 -5
  323. data/src/core/telemetry/metrics.h +3 -1
  324. data/src/core/telemetry/stats_data.cc +0 -19
  325. data/src/core/telemetry/stats_data.h +0 -19
  326. data/src/core/transport/auth_context.cc +2 -2
  327. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  329. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -31
  331. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
  332. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
  335. data/src/core/tsi/fake_transport_security.cc +4 -4
  336. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
  338. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
  339. data/src/core/tsi/ssl_transport_security.cc +26 -25
  340. data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
  341. data/src/core/util/chunked_vector.h +4 -4
  342. data/src/core/util/event_log.cc +2 -2
  343. data/src/core/util/gcp_metadata_query.cc +2 -2
  344. data/src/core/util/grpc_check.cc +22 -0
  345. data/src/core/util/grpc_check.h +103 -0
  346. data/src/core/util/http_client/httpcli.cc +3 -3
  347. data/src/core/util/http_client/parser.cc +4 -4
  348. data/src/core/util/latent_see.h +7 -4
  349. data/src/core/util/lru_cache.h +4 -4
  350. data/src/core/util/memory_usage.h +16 -0
  351. data/src/core/util/posix/directory_reader.cc +3 -2
  352. data/src/core/util/posix/sync.cc +24 -24
  353. data/src/core/util/postmortem_emit.cc +52 -0
  354. data/src/core/util/postmortem_emit.h +30 -0
  355. data/src/core/util/ref_counted_ptr.h +5 -0
  356. data/src/core/util/trie_lookup.h +170 -0
  357. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  358. data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
  359. data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
  360. data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
  361. data/src/core/xds/grpc/xds_client_grpc.h +4 -1
  362. data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
  363. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  364. data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
  365. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  366. data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
  367. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  368. data/src/core/xds/grpc/xds_matcher.h +432 -0
  369. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  370. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  371. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  372. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  373. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  374. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  375. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  376. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  377. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  378. data/src/core/xds/grpc/xds_route_config_parser.cc +6 -6
  379. data/src/core/xds/grpc/xds_routing.cc +3 -3
  380. data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
  381. data/src/core/xds/xds_client/lrs_client.cc +6 -6
  382. data/src/core/xds/xds_client/xds_client.cc +9 -9
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  384. data/src/ruby/lib/grpc/version.rb +1 -1
  385. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  386. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  387. metadata +37 -2
@@ -21,13 +21,14 @@
21
21
  #include <string>
22
22
  #include <utility>
23
23
 
24
- #include "absl/log/check.h"
25
24
  #include "absl/status/status.h"
26
25
  #include "absl/strings/str_cat.h"
27
26
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
28
27
  #include "src/core/lib/slice/slice.h"
29
28
  #include "src/core/lib/slice/slice_buffer.h"
30
29
  #include "src/core/util/crash.h"
30
+ #include "src/core/util/grpc_check.h"
31
+ #include "src/core/util/memory_usage.h"
31
32
 
32
33
  // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
33
34
  // framing code
@@ -119,7 +120,7 @@ uint16_t Read2b(const uint8_t* input) {
119
120
  }
120
121
 
121
122
  void Write3b(uint32_t x, uint8_t* output) {
122
- CHECK_LT(x, 16777216u);
123
+ GRPC_CHECK_LT(x, 16777216u);
123
124
  output[0] = static_cast<uint8_t>(x >> 16);
124
125
  output[1] = static_cast<uint8_t>(x >> 8);
125
126
  output[2] = static_cast<uint8_t>(x);
@@ -206,9 +207,11 @@ class SerializeExtraBytesRequired {
206
207
 
207
208
  class SerializeHeaderAndPayload {
208
209
  public:
209
- SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out)
210
+ SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out,
211
+ SerializeReturn& serialize_return)
210
212
  : out_(out),
211
- extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)) {}
213
+ extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)),
214
+ serialize_return_(serialize_return) {}
212
215
 
213
216
  void operator()(Http2DataFrame& frame) {
214
217
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
@@ -219,6 +222,7 @@ class SerializeHeaderAndPayload {
219
222
  .Serialize(hdr.begin());
220
223
  out_.AppendIndexed(Slice(std::move(hdr)));
221
224
  out_.TakeAndAppend(frame.payload);
225
+ serialize_return_.should_reset_ping_clock = true;
222
226
  }
223
227
 
224
228
  void operator()(Http2HeaderFrame& frame) {
@@ -232,6 +236,7 @@ class SerializeHeaderAndPayload {
232
236
  .Serialize(hdr.begin());
233
237
  out_.AppendIndexed(Slice(std::move(hdr)));
234
238
  out_.TakeAndAppend(frame.payload);
239
+ serialize_return_.should_reset_ping_clock = true;
235
240
  }
236
241
 
237
242
  void operator()(Http2ContinuationFrame& frame) {
@@ -244,6 +249,7 @@ class SerializeHeaderAndPayload {
244
249
  .Serialize(hdr.begin());
245
250
  out_.AppendIndexed(Slice(std::move(hdr)));
246
251
  out_.TakeAndAppend(frame.payload);
252
+ serialize_return_.should_reset_ping_clock = true;
247
253
  }
248
254
 
249
255
  void operator()(Http2RstStreamFrame& frame) {
@@ -311,6 +317,7 @@ class SerializeHeaderAndPayload {
311
317
  }
312
318
  Write31bits(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize);
313
319
  out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
320
+ serialize_return_.should_reset_ping_clock = true;
314
321
  }
315
322
 
316
323
  void operator()(Http2SecurityFrame& frame) {
@@ -329,6 +336,7 @@ class SerializeHeaderAndPayload {
329
336
  private:
330
337
  SliceBuffer& out_;
331
338
  MutableSlice extra_bytes_;
339
+ SerializeReturn& serialize_return_;
332
340
  };
333
341
 
334
342
  Http2Status StripPadding(const Http2FrameHeader& hdr, SliceBuffer& payload) {
@@ -642,23 +650,26 @@ std::string Http2FrameHeader::ToString() const {
642
650
  ", length=", length, "}");
643
651
  }
644
652
 
645
- void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
653
+ SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
646
654
  size_t buffer_needed = 0;
655
+ SerializeReturn serialize_return{/*should_reset_ping_clock=*/false};
647
656
  for (auto& frame : frames) {
648
657
  // Bytes needed for framing
649
658
  buffer_needed += kFrameHeaderSize;
650
659
  // Bytes needed for frame payload
651
660
  buffer_needed += std::visit(SerializeExtraBytesRequired(), frame);
652
661
  }
653
- SerializeHeaderAndPayload serialize(buffer_needed, out);
662
+ SerializeHeaderAndPayload serialize(buffer_needed, out, serialize_return);
654
663
  for (auto& frame : frames) {
655
664
  std::visit(serialize, frame);
656
665
  }
666
+
667
+ return serialize_return;
657
668
  }
658
669
 
659
670
  http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
660
671
  const Http2FrameHeader& hdr, SliceBuffer payload) {
661
- CHECK(payload.Length() == hdr.length);
672
+ GRPC_CHECK(payload.Length() == hdr.length);
662
673
 
663
674
  switch (static_cast<FrameType>(hdr.type)) {
664
675
  case FrameType::kData:
@@ -688,9 +699,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
688
699
  }
689
700
  }
690
701
 
691
- http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
702
+ http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(
703
+ const uint32_t error_code) {
692
704
  if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
693
- LOG(ERROR) << "Http2ErrorCodeFromRstFrameErrorCode: Invalid error code "
705
+ LOG(ERROR) << "RstFrameErrorCodeToHttp2ErrorCode: Invalid error code "
694
706
  "received from RST_STREAM frame: "
695
707
  << error_code;
696
708
  return http2::Http2ErrorCode::kInternalError;
@@ -698,11 +710,21 @@ http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
698
710
  return static_cast<http2::Http2ErrorCode>(error_code);
699
711
  }
700
712
 
713
+ uint32_t Http2ErrorCodeToRstFrameErrorCode(
714
+ const http2::Http2ErrorCode error_code) {
715
+ DCHECK_LE(static_cast<uint8_t>(error_code), http2::GetMaxHttp2ErrorCode());
716
+ return static_cast<uint32_t>(error_code);
717
+ }
718
+
719
+ size_t GetFrameMemoryUsage(const Http2Frame& frame) {
720
+ return MemoryUsageOf(frame);
721
+ }
722
+
701
723
  ///////////////////////////////////////////////////////////////////////////////
702
724
  // GRPC Header
703
725
 
704
726
  GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
705
- CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
727
+ GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
706
728
  uint8_t buffer[kGrpcHeaderSizeInBytes];
707
729
  payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
708
730
  GrpcMessageHeader header;
@@ -224,6 +224,10 @@ struct Http2FrameHeader {
224
224
  ///////////////////////////////////////////////////////////////////////////////
225
225
  // Parsing & serialization
226
226
 
227
+ struct SerializeReturn {
228
+ bool should_reset_ping_clock;
229
+ };
230
+
227
231
  // Given a frame header and a payload, parse the payload into a frame and
228
232
  // return it.
229
233
  // If this function returns an error, that should be considered a connection
@@ -236,9 +240,13 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
236
240
 
237
241
  // Serialize frame and append to out, leaves frames in an unknown state (may
238
242
  // move things out of frames)
239
- void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
243
+ SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
240
244
 
241
- http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code);
245
+ http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
246
+ uint32_t Http2ErrorCodeToRstFrameErrorCode(http2::Http2ErrorCode error_code);
247
+
248
+ // Returns approximate memory usage of the frame.
249
+ size_t GetFrameMemoryUsage(const Http2Frame& frame);
242
250
 
243
251
  ///////////////////////////////////////////////////////////////////////////////
244
252
  // GRPC Header
@@ -357,12 +365,18 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
357
365
  "RFC9113: The initial value is 2^14 (16,384) octets. The value advertised"
358
366
  " by an endpoint MUST be between this initial value and the maximum allowed"
359
367
  " frame size (2^24)-1 or 16,777,215 octets), inclusive. ";
368
+ inline constexpr absl::string_view kSettingsTimeout =
369
+ "Settings timeout. The HTTP2 settings frame was not ACKed within the "
370
+ "timeout. Connection will be closed";
360
371
 
361
372
  inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
362
373
  inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
363
374
  inline constexpr uint32_t kMinimumFrameSize = 16384;
364
375
  inline constexpr uint32_t kMaximumFrameSize = 16777215;
365
376
 
377
+ // Default Initial Window Size as per RFC 9113 Section 6.5.2
378
+ inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
379
+
366
380
  } // namespace RFC9113
367
381
  } // namespace grpc_core
368
382
 
@@ -22,7 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
  #include <stdlib.h>
24
24
 
25
- #include "absl/log/check.h"
26
25
  #include "absl/status/status.h"
27
26
  #include "absl/strings/str_format.h"
28
27
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
@@ -32,6 +31,7 @@
32
31
  #include "src/core/lib/slice/slice_buffer.h"
33
32
  #include "src/core/lib/transport/transport.h"
34
33
  #include "src/core/telemetry/stats.h"
34
+ #include "src/core/util/grpc_check.h"
35
35
  #include "src/core/util/status_helper.h"
36
36
 
37
37
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
@@ -63,7 +63,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
63
63
 
64
64
  hdr = GRPC_SLICE_MALLOC(header_size);
65
65
  p = GRPC_SLICE_START_PTR(hdr);
66
- CHECK(write_bytes < (1 << 24));
66
+ GRPC_CHECK(write_bytes < (1 << 24));
67
67
  *p++ = static_cast<uint8_t>(write_bytes >> 16);
68
68
  *p++ = static_cast<uint8_t>(write_bytes >> 8);
69
69
  *p++ = static_cast<uint8_t>(write_bytes);
@@ -24,11 +24,11 @@
24
24
  #include <string.h>
25
25
 
26
26
  #include "absl/base/attributes.h"
27
- #include "absl/log/check.h"
28
27
  #include "absl/status/status.h"
29
28
  #include "absl/strings/str_format.h"
30
29
  #include "absl/strings/string_view.h"
31
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;
@@ -134,7 +134,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
134
134
  memcpy(p->debug_data + p->debug_pos, cur,
135
135
  static_cast<size_t>(end - cur));
136
136
  }
137
- CHECK((size_t)(end - cur) < UINT32_MAX - p->debug_pos);
137
+ GRPC_CHECK((size_t)(end - cur) < UINT32_MAX - p->debug_pos);
138
138
  p->debug_pos += static_cast<uint32_t>(end - cur);
139
139
  p->state = GRPC_CHTTP2_GOAWAY_DEBUG;
140
140
  if (is_last) {
@@ -161,7 +161,7 @@ void grpc_chttp2_goaway_append(
161
161
  grpc_slice header = GRPC_SLICE_MALLOC(9 + 4 + 4);
162
162
  uint8_t* p = GRPC_SLICE_START_PTR(header);
163
163
  uint32_t frame_length;
164
- CHECK(GRPC_SLICE_LENGTH(debug_data) < UINT32_MAX - 4 - 4);
164
+ GRPC_CHECK(GRPC_SLICE_LENGTH(debug_data) < UINT32_MAX - 4 - 4);
165
165
  frame_length = 4 + 4 + static_cast<uint32_t> GRPC_SLICE_LENGTH(debug_data);
166
166
 
167
167
  ztrace_collector->Append([last_stream_id, error_code, debug_data]() {
@@ -193,7 +193,7 @@ void grpc_chttp2_goaway_append(
193
193
  *p++ = static_cast<uint8_t>(error_code >> 16);
194
194
  *p++ = static_cast<uint8_t>(error_code >> 8);
195
195
  *p++ = static_cast<uint8_t>(error_code);
196
- CHECK(p == GRPC_SLICE_END_PTR(header));
196
+ GRPC_CHECK(p == GRPC_SLICE_END_PTR(header));
197
197
  grpc_slice_buffer_add(slice_buffer, header);
198
198
  grpc_slice_buffer_add(slice_buffer, debug_data);
199
199
  }
@@ -26,7 +26,6 @@
26
26
  #include <algorithm>
27
27
 
28
28
  #include "absl/container/flat_hash_map.h"
29
- #include "absl/log/check.h"
30
29
  #include "absl/log/log.h"
31
30
  #include "absl/status/status.h"
32
31
  #include "absl/strings/str_format.h"
@@ -34,6 +33,7 @@
34
33
  #include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
35
34
  #include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
36
35
  #include "src/core/lib/debug/trace.h"
36
+ #include "src/core/util/grpc_check.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);
@@ -89,7 +89,7 @@ grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
89
89
  }
90
90
 
91
91
  if (p->byte == 8) {
92
- CHECK(is_last);
92
+ GRPC_CHECK(is_last);
93
93
  t->http2_ztrace_collector.Append(
94
94
  grpc_core::H2PingTrace<true>{p->is_ack != 0, p->opaque_8bytes});
95
95
  if (p->is_ack) {
@@ -22,7 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
  #include <stddef.h>
24
24
 
25
- #include "absl/log/check.h"
26
25
  #include "absl/log/log.h"
27
26
  #include "absl/random/distributions.h"
28
27
  #include "absl/status/status.h"
@@ -36,6 +35,7 @@
36
35
  #include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
37
36
  #include "src/core/lib/debug/trace.h"
38
37
  #include "src/core/lib/experiments/experiments.h"
38
+ #include "src/core/util/grpc_check.h"
39
39
  #include "src/core/util/shared_bit_gen.h"
40
40
  #include "src/core/util/status_helper.h"
41
41
 
@@ -113,7 +113,7 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
113
113
  s->call_tracer_wrapper.RecordIncomingBytes({framing_bytes, 0, 0});
114
114
 
115
115
  if (p->byte == 4) {
116
- CHECK(is_last);
116
+ GRPC_CHECK(is_last);
117
117
  uint32_t reason = ((static_cast<uint32_t>(p->reason_bytes[0])) << 24) |
118
118
  ((static_cast<uint32_t>(p->reason_bytes[1])) << 16) |
119
119
  ((static_cast<uint32_t>(p->reason_bytes[2])) << 8) |
@@ -21,7 +21,6 @@
21
21
  #include <grpc/support/port_platform.h>
22
22
  #include <stddef.h>
23
23
 
24
- #include "absl/log/check.h"
25
24
  #include "absl/status/status.h"
26
25
  #include "absl/strings/str_cat.h"
27
26
  #include "absl/strings/str_format.h"
@@ -31,6 +30,7 @@
31
30
  #include "src/core/ext/transport/chttp2/transport/internal.h"
32
31
  #include "src/core/ext/transport/chttp2/transport/stream_lists.h"
33
32
  #include "src/core/telemetry/stats.h"
33
+ #include "src/core/util/grpc_check.h"
34
34
  #include "src/core/util/time.h"
35
35
 
36
36
  grpc_slice grpc_chttp2_window_update_create(
@@ -43,7 +43,7 @@ grpc_slice grpc_chttp2_window_update_create(
43
43
  }
44
44
  uint8_t* p = GRPC_SLICE_START_PTR(slice);
45
45
 
46
- CHECK(window_delta);
46
+ GRPC_CHECK(window_delta);
47
47
 
48
48
  *p++ = 0;
49
49
  *p++ = 0;
@@ -100,7 +100,7 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
100
100
  return GRPC_ERROR_CREATE(
101
101
  absl::StrCat("invalid window update bytes: ", p->amount));
102
102
  }
103
- CHECK(is_last);
103
+ GRPC_CHECK(is_last);
104
104
 
105
105
  t->http2_ztrace_collector.Append(grpc_core::H2WindowUpdateTrace<true>{
106
106
  t->incoming_stream_id, received_update});
@@ -24,7 +24,6 @@
24
24
  #include <cstddef>
25
25
  #include <cstdint>
26
26
 
27
- #include "absl/log/check.h"
28
27
  #include "absl/log/log.h"
29
28
  #include "src/core/call/metadata_batch.h"
30
29
  #include "src/core/ext/transport/chttp2/transport/frame.h"
@@ -33,6 +32,7 @@
33
32
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
34
33
  #include "src/core/lib/slice/slice.h"
35
34
  #include "src/core/lib/slice/slice_buffer.h"
35
+ #include "src/core/util/grpc_check.h"
36
36
  #include "src/core/util/shared_bit_gen.h"
37
37
 
38
38
  // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
@@ -88,7 +88,7 @@ class HeaderAssembler {
88
88
  // The payload of the Http2HeaderFrame will be cleared in this function.
89
89
  Http2Status AppendHeaderFrame(Http2HeaderFrame&& frame) {
90
90
  // Validate input frame
91
- DCHECK_GT(frame.stream_id, 0u)
91
+ GRPC_DCHECK_GT(frame.stream_id, 0u)
92
92
  << "RFC9113 : HEADERS frames MUST be associated with a stream.";
93
93
 
94
94
  // Manage size constraints
@@ -145,7 +145,7 @@ class HeaderAssembler {
145
145
  ASSEMBLER_LOG << "ReadMetadata " << buffer_.Length() << " Bytes.";
146
146
 
147
147
  // Validate
148
- DCHECK_EQ(is_ready_, true);
148
+ GRPC_DCHECK_EQ(is_ready_, true);
149
149
 
150
150
  // Generate the gRPC Metadata from buffer_
151
151
  // RFC9113 : A receiver MUST terminate the connection with a connection
@@ -154,6 +154,14 @@ class HeaderAssembler {
154
154
  // connection error (Section 5.4.1) of type COMPRESSION_ERROR.
155
155
  Arena::PoolPtr<grpc_metadata_batch> metadata =
156
156
  Arena::MakePooledForOverwrite<grpc_metadata_batch>();
157
+ // TODO(tjagtap) : [PH2][P5] : Currently the transport does not enforce
158
+ // setting allow_true_binary_metadata_ sent to the peer.
159
+ // Ideally Hpack code must validate and enforce this setting but it is not
160
+ // doing so now. Given that this is complex code and also common between
161
+ // CHTTP2 and PH2, we must do this as a standalone project with an
162
+ // experiment of its own. For now we just honour allow_true_binary_metadata_
163
+ // while writing frames for the peer on the write path. We do not enforce it
164
+ // on the read path.
157
165
  parser.BeginFrame(
158
166
  /*grpc_metadata_batch*/ metadata.get(), max_header_list_size_soft_limit,
159
167
  max_header_list_size_hard_limit,
@@ -190,8 +198,12 @@ class HeaderAssembler {
190
198
  // This value MUST be checked before calling ReadMetadata()
191
199
  bool IsReady() const { return is_ready_; }
192
200
 
193
- explicit HeaderAssembler(const uint32_t stream_id)
194
- : header_in_progress_(false), is_ready_(false), stream_id_(stream_id) {}
201
+ explicit HeaderAssembler(const uint32_t stream_id,
202
+ const bool allow_true_binary_metadata_acked)
203
+ : header_in_progress_(false),
204
+ is_ready_(false),
205
+ allow_true_binary_metadata_acked_(allow_true_binary_metadata_acked),
206
+ stream_id_(stream_id) {}
195
207
 
196
208
  ~HeaderAssembler() = default;
197
209
 
@@ -209,6 +221,7 @@ class HeaderAssembler {
209
221
 
210
222
  bool header_in_progress_;
211
223
  bool is_ready_;
224
+ GRPC_UNUSED const bool allow_true_binary_metadata_acked_;
212
225
  const uint32_t stream_id_;
213
226
  SliceBuffer buffer_;
214
227
  };
@@ -223,16 +236,17 @@ class HeaderDisassembler {
223
236
  bool PrepareForSending(Arena::PoolPtr<grpc_metadata_batch>&& metadata,
224
237
  HPackCompressor& encoder) {
225
238
  // Validate disassembler state
226
- DCHECK(!is_done_);
239
+ GRPC_DCHECK(!is_done_);
227
240
  // Prepare metadata for sending
228
- return encoder.EncodeRawHeaders(*metadata.get(), buffer_);
241
+ return encoder.EncodeRawHeaders(*metadata.get(), buffer_,
242
+ allow_true_binary_metadata_peer_);
229
243
  }
230
244
 
231
245
  Http2Frame GetNextFrame(const uint32_t max_frame_length,
232
246
  bool& out_end_headers) {
233
247
  if (buffer_.Length() == 0 || is_done_) {
234
- DCHECK(false) << "Calling code must check size using HasMoreData() "
235
- "before GetNextFrame()";
248
+ GRPC_DCHECK(false) << "Calling code must check size using HasMoreData() "
249
+ "before GetNextFrame()";
236
250
  }
237
251
  out_end_headers = buffer_.Length() <= max_frame_length;
238
252
  SliceBuffer temp;
@@ -260,11 +274,13 @@ class HeaderDisassembler {
260
274
  // A separate HeaderDisassembler object MUST be made for Initial Metadata and
261
275
  // Trailing Metadata
262
276
  explicit HeaderDisassembler(const uint32_t stream_id,
263
- const bool is_trailing_metadata)
277
+ const bool is_trailing_metadata,
278
+ const bool allow_true_binary_metadata_peer)
264
279
  : stream_id_(stream_id),
265
280
  end_stream_(is_trailing_metadata),
266
281
  did_send_header_frame_(false),
267
- is_done_(false) {}
282
+ is_done_(false),
283
+ allow_true_binary_metadata_peer_(allow_true_binary_metadata_peer) {}
268
284
 
269
285
  ~HeaderDisassembler() = default;
270
286
 
@@ -280,7 +296,7 @@ class HeaderDisassembler {
280
296
  const bool end_stream_;
281
297
  bool did_send_header_frame_;
282
298
  bool is_done_; // Protect against the same disassembler from being used twice
283
-
299
+ const bool allow_true_binary_metadata_peer_;
284
300
  SliceBuffer buffer_;
285
301
  };
286
302
 
@@ -25,7 +25,6 @@
25
25
  #include <algorithm>
26
26
  #include <cstdint>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/log/log.h"
30
29
  #include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
31
30
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
@@ -36,6 +35,7 @@
36
35
  #include "src/core/lib/surface/validate_metadata.h"
37
36
  #include "src/core/lib/transport/timeout_encoding.h"
38
37
  #include "src/core/util/crash.h"
38
+ #include "src/core/util/grpc_check.h"
39
39
 
40
40
  namespace grpc_core {
41
41
 
@@ -61,7 +61,7 @@ static void FillHeader(uint8_t* p, uint8_t type, uint32_t id, size_t len,
61
61
  // max_frame_size is derived from GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
62
62
  // which has a max allowable value of 16777215 (see chttp_transport.cc).
63
63
  // Thus, the following assert can be a debug assert.
64
- DCHECK_LE(len, 16777216u);
64
+ GRPC_DCHECK_LE(len, 16777216u);
65
65
  *p++ = static_cast<uint8_t>(len >> 16);
66
66
  *p++ = static_cast<uint8_t>(len >> 8);
67
67
  *p++ = static_cast<uint8_t>(len);
@@ -369,8 +369,10 @@ class HPackCompressor {
369
369
  }
370
370
 
371
371
  template <typename HeaderSet>
372
- bool EncodeRawHeaders(const HeaderSet& headers, SliceBuffer& output) {
373
- hpack_encoder_detail::Encoder encoder(this, true, output);
372
+ bool EncodeRawHeaders(const HeaderSet& headers, SliceBuffer& output,
373
+ bool allow_true_binary_metadata) {
374
+ hpack_encoder_detail::Encoder encoder(this, allow_true_binary_metadata,
375
+ output);
374
376
  headers.Encode(&encoder);
375
377
  return !encoder.saw_encoding_errors();
376
378
  }
@@ -18,15 +18,15 @@
18
18
 
19
19
  #include <algorithm>
20
20
 
21
- #include "absl/log/check.h"
21
+ #include "src/core/util/grpc_check.h"
22
22
 
23
23
  namespace grpc_core {
24
24
 
25
25
  uint32_t HPackEncoderTable::AllocateIndex(size_t element_size) {
26
- DCHECK_GE(element_size, 32u);
26
+ GRPC_DCHECK_GE(element_size, 32u);
27
27
 
28
28
  uint32_t new_index = tail_remote_index_ + table_elems_ + 1;
29
- DCHECK(element_size <= MaxEntrySize());
29
+ GRPC_DCHECK_LE(element_size, MaxEntrySize());
30
30
 
31
31
  if (element_size > max_table_size_) {
32
32
  while (table_size_ > 0) {
@@ -41,7 +41,7 @@ uint32_t HPackEncoderTable::AllocateIndex(size_t element_size) {
41
41
  while (table_size_ + element_size > max_table_size_) {
42
42
  EvictOne();
43
43
  }
44
- CHECK(table_elems_ < elem_size_.size());
44
+ GRPC_CHECK(table_elems_ < elem_size_.size());
45
45
  elem_size_[new_index % elem_size_.size()] =
46
46
  static_cast<uint16_t>(element_size);
47
47
  table_size_ += element_size;
@@ -70,17 +70,17 @@ bool HPackEncoderTable::SetMaxSize(uint32_t max_table_size) {
70
70
 
71
71
  void HPackEncoderTable::EvictOne() {
72
72
  tail_remote_index_++;
73
- CHECK_GT(tail_remote_index_, 0u);
74
- CHECK_GT(table_elems_, 0u);
73
+ GRPC_CHECK_GT(tail_remote_index_, 0u);
74
+ GRPC_CHECK_GT(table_elems_, 0u);
75
75
  auto removing_size = elem_size_[tail_remote_index_ % elem_size_.size()];
76
- CHECK(table_size_ >= removing_size);
76
+ GRPC_CHECK(table_size_ >= removing_size);
77
77
  table_size_ -= removing_size;
78
78
  table_elems_--;
79
79
  }
80
80
 
81
81
  void HPackEncoderTable::Rebuild(uint32_t capacity) {
82
82
  decltype(elem_size_) new_elem_size(capacity);
83
- CHECK_LE(table_elems_, capacity);
83
+ GRPC_CHECK_LE(table_elems_, capacity);
84
84
  for (uint32_t i = 0; i < table_elems_; i++) {
85
85
  uint32_t ofs = tail_remote_index_ + i + 1;
86
86
  new_elem_size[ofs % capacity] = elem_size_[ofs % elem_size_.size()];
@@ -17,11 +17,11 @@
17
17
  #include <grpc/support/port_platform.h>
18
18
  #include <stddef.h>
19
19
 
20
- #include "absl/log/check.h"
21
20
  #include "absl/strings/str_format.h"
22
21
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
23
22
  #include "src/core/lib/iomgr/error.h"
24
23
  #include "src/core/lib/slice/slice.h"
24
+ #include "src/core/util/grpc_check.h"
25
25
  #include "src/core/util/status_helper.h"
26
26
 
27
27
  namespace grpc_core {
@@ -52,7 +52,7 @@ class MetadataSizeLimitExceededEncoder {
52
52
  };
53
53
 
54
54
  absl::Status MakeStreamError(absl::Status error) {
55
- DCHECK(!error.ok());
55
+ GRPC_DCHECK(!error.ok());
56
56
  return grpc_error_set_int(std::move(error), StatusIntProperty::kStreamId, 0);
57
57
  }
58
58
  } // namespace
@@ -23,13 +23,13 @@
23
23
  #include <string>
24
24
  #include <utility>
25
25
 
26
- #include "absl/log/check.h"
27
26
  #include "absl/status/status.h"
28
27
  #include "absl/strings/str_cat.h"
29
28
  #include "absl/strings/string_view.h"
30
29
  #include "src/core/call/metadata_batch.h"
31
30
  #include "src/core/lib/surface/validate_metadata.h"
32
31
  #include "src/core/util/crash.h"
32
+ #include "src/core/util/grpc_check.h"
33
33
  #include "src/core/util/ref_counted.h"
34
34
  #include "src/core/util/ref_counted_ptr.h"
35
35
 
@@ -191,7 +191,7 @@ class HpackParseResult {
191
191
 
192
192
  static HpackParseResult InvalidMetadataError(ValidateMetadataResult result,
193
193
  absl::string_view key) {
194
- DCHECK(result != ValidateMetadataResult::kOk);
194
+ GRPC_DCHECK(result != ValidateMetadataResult::kOk);
195
195
  HpackParseResult p{HpackParseStatus::kInvalidMetadata};
196
196
  p.state_->key = std::string(key);
197
197
  p.state_->validate_metadata_result = result;