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
@@ -46,7 +46,6 @@
46
46
  #include <unordered_map>
47
47
 
48
48
  #include "absl/base/thread_annotations.h"
49
- #include "absl/log/check.h"
50
49
  #include "absl/log/log.h"
51
50
  #include "absl/status/status.h"
52
51
  #include "absl/strings/str_cat.h"
@@ -70,6 +69,7 @@
70
69
  #include "src/core/telemetry/stats_data.h"
71
70
  #include "src/core/util/crash.h"
72
71
  #include "src/core/util/event_log.h"
72
+ #include "src/core/util/grpc_check.h"
73
73
  #include "src/core/util/strerror.h"
74
74
  #include "src/core/util/string.h"
75
75
  #include "src/core/util/sync.h"
@@ -155,7 +155,7 @@ class TcpZerocopySendRecord {
155
155
  // sendmsg() failed or when tcp_write() is done.
156
156
  bool Unref() {
157
157
  const intptr_t prior = ref_.fetch_sub(1, std::memory_order_acq_rel);
158
- DCHECK_GT(prior, 0);
158
+ GRPC_DCHECK_GT(prior, 0);
159
159
  if (prior == 1) {
160
160
  AllSendsComplete();
161
161
  return true;
@@ -170,9 +170,9 @@ class TcpZerocopySendRecord {
170
170
  };
171
171
 
172
172
  void AssertEmpty() {
173
- DCHECK_EQ(buf_.count, 0u);
174
- DCHECK_EQ(buf_.length, 0u);
175
- DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
173
+ GRPC_DCHECK_EQ(buf_.count, 0u);
174
+ GRPC_DCHECK_EQ(buf_.length, 0u);
175
+ GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
176
176
  }
177
177
 
178
178
  // When all sendmsg() calls associated with this tcp_write() have been
@@ -180,7 +180,7 @@ class TcpZerocopySendRecord {
180
180
  // for each sendmsg()) and all reference counts have been dropped, drop our
181
181
  // reference to the underlying data since we no longer need it.
182
182
  void AllSendsComplete() {
183
- DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
183
+ GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
184
184
  grpc_slice_buffer_reset_and_unref(&buf_);
185
185
  }
186
186
 
@@ -260,7 +260,7 @@ class TcpZerocopySendCtx {
260
260
  --last_send_;
261
261
  if (ReleaseSendRecord(last_send_)->Unref()) {
262
262
  // We should still be holding the ref taken by tcp_write().
263
- DCHECK(0);
263
+ GRPC_DCHECK(0);
264
264
  }
265
265
  }
266
266
 
@@ -296,8 +296,8 @@ class TcpZerocopySendCtx {
296
296
  // max_sends_ tcp_write() instances with zerocopy enabled in flight at the
297
297
  // same time.
298
298
  void PutSendRecord(TcpZerocopySendRecord* record) {
299
- DCHECK(record >= send_records_);
300
- DCHECK(record < send_records_ + max_sends_);
299
+ GRPC_DCHECK(record >= send_records_);
300
+ GRPC_DCHECK(record < send_records_ + max_sends_);
301
301
  MutexLock guard(&lock_);
302
302
  PutSendRecordLocked(record);
303
303
  }
@@ -316,7 +316,7 @@ class TcpZerocopySendCtx {
316
316
  bool enabled() const { return enabled_; }
317
317
 
318
318
  void set_enabled(bool enabled) {
319
- DCHECK(!enabled || !memory_limited());
319
+ GRPC_DCHECK(!enabled || !memory_limited());
320
320
  enabled_ = enabled;
321
321
  }
322
322
 
@@ -354,7 +354,7 @@ class TcpZerocopySendCtx {
354
354
  zcopy_enobuf_state_ = OMemState::CHECK;
355
355
  return false;
356
356
  }
357
- DCHECK(zcopy_enobuf_state_ != OMemState::CHECK);
357
+ GRPC_DCHECK(zcopy_enobuf_state_ != OMemState::CHECK);
358
358
  if (zcopy_enobuf_state_ == OMemState::FULL) {
359
359
  // A previous sendmsg attempt was blocked by ENOBUFS. Return true to
360
360
  // mark the fd as writable so the next write attempt could be made.
@@ -428,7 +428,7 @@ class TcpZerocopySendCtx {
428
428
 
429
429
  TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
430
430
  auto iter = ctx_lookup_.find(seq);
431
- DCHECK(iter != ctx_lookup_.end());
431
+ GRPC_DCHECK(iter != ctx_lookup_.end());
432
432
  TcpZerocopySendRecord* record = iter->second;
433
433
  ctx_lookup_.erase(iter);
434
434
  return record;
@@ -446,7 +446,7 @@ class TcpZerocopySendCtx {
446
446
  }
447
447
 
448
448
  void PutSendRecordLocked(TcpZerocopySendRecord* record) {
449
- DCHECK(free_send_records_size_ < max_sends_);
449
+ GRPC_DCHECK(free_send_records_size_ < max_sends_);
450
450
  free_send_records_[free_send_records_size_] = record;
451
451
  free_send_records_size_++;
452
452
  }
@@ -635,7 +635,7 @@ static void run_poller(backup_poller* p) {
635
635
  g_backup_poller_mu->Lock();
636
636
  // last "uncovered" notification is the ref that keeps us polling
637
637
  if (g_uncovered_notifications_pending == 1) {
638
- CHECK(g_backup_poller == p);
638
+ GRPC_CHECK(g_backup_poller == p);
639
639
  g_backup_poller = nullptr;
640
640
  g_uncovered_notifications_pending = 0;
641
641
  g_backup_poller_mu->Unlock();
@@ -660,7 +660,7 @@ static void drop_uncovered(grpc_tcp* /*tcp*/) {
660
660
  p = g_backup_poller;
661
661
  old_count = g_uncovered_notifications_pending--;
662
662
  g_backup_poller_mu->Unlock();
663
- CHECK_GT(old_count, 1);
663
+ GRPC_CHECK_GT(old_count, 1);
664
664
  GRPC_TRACE_LOG(tcp, INFO) << "BACKUP_POLLER:" << p << " uncover cnt "
665
665
  << old_count << "->" << old_count - 1;
666
666
  }
@@ -914,8 +914,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
914
914
  iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
915
915
  }
916
916
 
917
- CHECK_NE(tcp->incoming_buffer->length, 0u);
918
- DCHECK_GT(tcp->min_progress_size, 0);
917
+ GRPC_CHECK_NE(tcp->incoming_buffer->length, 0u);
918
+ GRPC_DCHECK_GT(tcp->min_progress_size, 0);
919
919
 
920
920
  do {
921
921
  // Assume there is something on the queue. If we receive TCP_INQ from
@@ -981,12 +981,12 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
981
981
 
982
982
  grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
983
983
  add_to_estimate(tcp, static_cast<size_t>(read_bytes));
984
- DCHECK((size_t)read_bytes <=
985
- tcp->incoming_buffer->length - total_read_bytes);
984
+ GRPC_DCHECK((size_t)read_bytes <=
985
+ tcp->incoming_buffer->length - total_read_bytes);
986
986
 
987
987
  #ifdef GRPC_HAVE_TCP_INQ
988
988
  if (tcp->inq_capable) {
989
- DCHECK(!(msg.msg_flags & MSG_CTRUNC));
989
+ GRPC_DCHECK(!(msg.msg_flags & MSG_CTRUNC));
990
990
  struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
991
991
  for (; cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
992
992
  if (cmsg->cmsg_level == SOL_TCP && cmsg->cmsg_type == TCP_CM_INQ &&
@@ -1029,7 +1029,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
1029
1029
  finish_estimate(tcp);
1030
1030
  }
1031
1031
 
1032
- DCHECK_GT(total_read_bytes, 0u);
1032
+ GRPC_DCHECK_GT(total_read_bytes, 0u);
1033
1033
  *error = absl::OkStatus();
1034
1034
  if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
1035
1035
  // Update min progress size based on the total number of bytes read in
@@ -1146,7 +1146,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
1146
1146
  static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
1147
1147
  grpc_closure* cb, bool urgent, int min_progress_size) {
1148
1148
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1149
- CHECK_EQ(tcp->read_cb, nullptr);
1149
+ GRPC_CHECK_EQ(tcp->read_cb, nullptr);
1150
1150
  tcp->read_cb = cb;
1151
1151
  tcp->read_mu.Lock();
1152
1152
  tcp->incoming_buffer = incoming_buffer;
@@ -1228,8 +1228,8 @@ static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
1228
1228
  }
1229
1229
  if (zerocopy_send_record != nullptr) {
1230
1230
  zerocopy_send_record->PrepareForSends(buf);
1231
- DCHECK_EQ(buf->count, 0u);
1232
- DCHECK_EQ(buf->length, 0u);
1231
+ GRPC_DCHECK_EQ(buf->count, 0u);
1232
+ GRPC_DCHECK_EQ(buf->length, 0u);
1233
1233
  tcp->outgoing_byte_idx = 0;
1234
1234
  tcp->outgoing_buffer = nullptr;
1235
1235
  }
@@ -1290,10 +1290,10 @@ static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
1290
1290
  uint32_t seq, const char* tag);
1291
1291
  // Reads \a cmsg to process zerocopy control messages.
1292
1292
  static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1293
- DCHECK(cmsg);
1293
+ GRPC_DCHECK(cmsg);
1294
1294
  auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(cmsg));
1295
- DCHECK_EQ(serr->ee_errno, 0u);
1296
- DCHECK(serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY);
1295
+ GRPC_DCHECK_EQ(serr->ee_errno, 0u);
1296
+ GRPC_DCHECK(serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY);
1297
1297
  const uint32_t lo = serr->ee_info;
1298
1298
  const uint32_t hi = serr->ee_data;
1299
1299
  for (uint32_t seq = lo; seq <= hi; ++seq) {
@@ -1303,7 +1303,7 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1303
1303
  // both; if so, batch the unref/put.
1304
1304
  TcpZerocopySendRecord* record =
1305
1305
  tcp->tcp_zerocopy_send_ctx.ReleaseSendRecord(seq);
1306
- DCHECK(record);
1306
+ GRPC_DCHECK(record);
1307
1307
  UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
1308
1308
  }
1309
1309
  if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
@@ -1488,14 +1488,14 @@ static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1488
1488
  int* /* saved_errno */,
1489
1489
  int /*additional_flags*/) {
1490
1490
  LOG(ERROR) << "Write with timestamps not supported for this platform";
1491
- CHECK(0);
1491
+ GRPC_CHECK(0);
1492
1492
  return false;
1493
1493
  }
1494
1494
 
1495
1495
  static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
1496
1496
  grpc_error_handle /*error*/) {
1497
1497
  LOG(ERROR) << "Error handling is not supported for this platform";
1498
- CHECK(0);
1498
+ GRPC_CHECK(0);
1499
1499
  }
1500
1500
  #endif // GRPC_LINUX_ERRQUEUE
1501
1501
 
@@ -1534,7 +1534,7 @@ msg_iovlen_type TcpZerocopySendRecord::PopulateIovs(size_t* unwind_slice_idx,
1534
1534
  ++(out_offset_.slice_idx);
1535
1535
  out_offset_.byte_idx = 0;
1536
1536
  }
1537
- DCHECK_GT(iov_size, 0u);
1537
+ GRPC_DCHECK_GT(iov_size, 0u);
1538
1538
  return iov_size;
1539
1539
  }
1540
1540
 
@@ -1685,7 +1685,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1685
1685
  outgoing_slice_idx++;
1686
1686
  tcp->outgoing_byte_idx = 0;
1687
1687
  }
1688
- CHECK_GT(iov_size, 0u);
1688
+ GRPC_CHECK_GT(iov_size, 0u);
1689
1689
 
1690
1690
  msg.msg_name = nullptr;
1691
1691
  msg.msg_namelen = 0;
@@ -1733,7 +1733,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1733
1733
  }
1734
1734
  }
1735
1735
 
1736
- CHECK_EQ(tcp->outgoing_byte_idx, 0u);
1736
+ GRPC_CHECK_EQ(tcp->outgoing_byte_idx, 0u);
1737
1737
  grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
1738
1738
  tcp->bytes_counter += sent_length;
1739
1739
  trailing = sending_length - static_cast<size_t>(sent_length);
@@ -1783,7 +1783,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1783
1783
  GRPC_TRACE_LOG(tcp, INFO) << "write: delayed";
1784
1784
  notify_on_write(tcp);
1785
1785
  // tcp_flush does not populate error if it has returned false.
1786
- DCHECK(error.ok());
1786
+ GRPC_DCHECK(error.ok());
1787
1787
  } else {
1788
1788
  cb = tcp->write_cb;
1789
1789
  tcp->write_cb = nullptr;
@@ -1818,8 +1818,8 @@ static void tcp_write(
1818
1818
  }
1819
1819
  }
1820
1820
 
1821
- CHECK_EQ(tcp->write_cb, nullptr);
1822
- DCHECK_EQ(tcp->current_zerocopy_send, nullptr);
1821
+ GRPC_CHECK_EQ(tcp->write_cb, nullptr);
1822
+ GRPC_DCHECK_EQ(tcp->current_zerocopy_send, nullptr);
1823
1823
 
1824
1824
  if (buf->length == 0) {
1825
1825
  grpc_core::Closure::Run(DEBUG_LOCATION, cb,
@@ -1839,7 +1839,7 @@ static void tcp_write(
1839
1839
  tcp->outgoing_buffer_arg =
1840
1840
  args.TakeDeprecatedAndDiscouragedGoogleSpecificPointer();
1841
1841
  if (tcp->outgoing_buffer_arg) {
1842
- CHECK(grpc_event_engine_can_track_errors());
1842
+ GRPC_CHECK(grpc_event_engine_can_track_errors());
1843
1843
  }
1844
1844
 
1845
1845
  bool flush_result =
@@ -1944,10 +1944,10 @@ grpc_endpoint* grpc_tcp_create(
1944
1944
  grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1945
1945
  const grpc_core::PosixTcpOptions& options,
1946
1946
  absl::string_view peer_string) {
1947
- CHECK(!grpc_event_engine::experimental::UsePollsetAlternative())
1947
+ GRPC_CHECK(!grpc_event_engine::experimental::UsePollsetAlternative())
1948
1948
  << "This function must not be called when the pollset_alternative "
1949
1949
  "experiment is enabled. This is a bug.";
1950
- CHECK(
1950
+ GRPC_CHECK(
1951
1951
  !grpc_core::IsEventEngineForAllOtherEndpointsEnabled() ||
1952
1952
  grpc_event_engine::experimental::EventEngineExperimentDisabledForPython())
1953
1953
  << "The event_engine_for_all_other_endpoints experiment should prevent "
@@ -1956,7 +1956,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1956
1956
  tcp->base.vtable = &vtable;
1957
1957
  tcp->peer_string = std::string(peer_string);
1958
1958
  tcp->fd = grpc_fd_wrapped_fd(em_fd);
1959
- CHECK(options.resource_quota != nullptr);
1959
+ GRPC_CHECK(options.resource_quota != nullptr);
1960
1960
  tcp->memory_owner =
1961
1961
  options.resource_quota->memory_quota()->CreateMemoryOwner();
1962
1962
  tcp->self_reservation = tcp->memory_owner.MakeReservation(sizeof(grpc_tcp));
@@ -2047,7 +2047,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
2047
2047
 
2048
2048
  int grpc_tcp_fd(grpc_endpoint* ep) {
2049
2049
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
2050
- CHECK(ep->vtable == &vtable);
2050
+ GRPC_CHECK(ep->vtable == &vtable);
2051
2051
  return grpc_fd_wrapped_fd(tcp->em_fd);
2052
2052
  }
2053
2053
 
@@ -2058,7 +2058,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
2058
2058
  grpc_event_engine_endpoint_destroy_and_release_fd(ep, fd, done);
2059
2059
  }
2060
2060
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
2061
- CHECK(ep->vtable == &vtable);
2061
+ GRPC_CHECK(ep->vtable == &vtable);
2062
2062
  tcp->release_fd = fd;
2063
2063
  tcp->release_fd_cb = done;
2064
2064
  grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
@@ -65,6 +65,11 @@ void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
65
65
  grpc_tcp_server_impl->shutdown_starting_add(s, shutdown_starting);
66
66
  }
67
67
 
68
+ void grpc_tcp_server_shutdown_ending_add(grpc_tcp_server* s,
69
+ grpc_closure* shutdown_ending) {
70
+ grpc_tcp_server_impl->shutdown_ending_add(s, shutdown_ending);
71
+ }
72
+
68
73
  void grpc_tcp_server_unref(grpc_tcp_server* s) {
69
74
  grpc_tcp_server_impl->unref(s);
70
75
  }
@@ -78,6 +78,8 @@ typedef struct grpc_tcp_server_vtable {
78
78
  grpc_tcp_server* (*ref)(grpc_tcp_server* s);
79
79
  void (*shutdown_starting_add)(grpc_tcp_server* s,
80
80
  grpc_closure* shutdown_starting);
81
+ void (*shutdown_ending_add)(grpc_tcp_server* s,
82
+ grpc_closure* shutdown_ending);
81
83
  void (*unref)(grpc_tcp_server* s);
82
84
  void (*shutdown_listeners)(grpc_tcp_server* s);
83
85
  int (*pre_allocated_fd)(grpc_tcp_server* s);
@@ -135,6 +137,11 @@ grpc_tcp_server* grpc_tcp_server_ref(grpc_tcp_server* s);
135
137
  void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
136
138
  grpc_closure* shutdown_starting);
137
139
 
140
+ // shutdown_ending is called when ref count has reached zero and the server
141
+ // has just been destroyed. Calling grpc_tcp_server_ref() from it has no effect.
142
+ void grpc_tcp_server_shutdown_ending_add(grpc_tcp_server* s,
143
+ grpc_closure* shutdown_ending);
144
+
138
145
  // If the refcount drops to zero, enqueue calls on exec_ctx to
139
146
  // shutdown_listeners and delete s.
140
147
  void grpc_tcp_server_unref(grpc_tcp_server* s);
@@ -50,12 +50,12 @@
50
50
 
51
51
  #include <string>
52
52
 
53
- #include "absl/log/check.h"
54
53
  #include "absl/log/log.h"
55
54
  #include "absl/strings/str_cat.h"
56
55
  #include "absl/strings/str_format.h"
57
56
  #include "src/core/lib/address_utils/sockaddr_utils.h"
58
57
  #include "src/core/lib/event_engine/default_event_engine.h"
58
+ #include "src/core/lib/event_engine/extensions/supports_fd.h"
59
59
  #include "src/core/lib/event_engine/memory_allocator_factory.h"
60
60
  #include "src/core/lib/event_engine/posix_engine/posix_endpoint.h"
61
61
  #include "src/core/lib/event_engine/query_extensions.h"
@@ -74,6 +74,7 @@
74
74
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
75
75
  #include "src/core/lib/iomgr/vsock.h"
76
76
  #include "src/core/lib/transport/error_utils.h"
77
+ #include "src/core/util/grpc_check.h"
77
78
  #include "src/core/util/strerror.h"
78
79
 
79
80
  static std::atomic<int64_t> num_dropped_connections{0};
@@ -89,7 +90,8 @@ using ::grpc_event_engine::experimental::SliceBuffer;
89
90
 
90
91
  static void finish_shutdown(grpc_tcp_server* s) {
91
92
  gpr_mu_lock(&s->mu);
92
- CHECK(s->shutdown);
93
+ GRPC_CHECK(s->shutdown);
94
+ grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &s->shutdown_ending);
93
95
  gpr_mu_unlock(&s->mu);
94
96
  if (s->shutdown_complete != nullptr) {
95
97
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->shutdown_complete,
@@ -157,10 +159,17 @@ static grpc_error_handle CreateEventEngineListener(
157
159
  addr.len =
158
160
  static_cast<socklen_t>(sizeof(struct sockaddr_storage));
159
161
  // Get the fd of the socket connected to peer.
160
- int fd =
161
- reinterpret_cast<
162
- grpc_event_engine::experimental::PosixEndpoint*>(ep.get())
163
- ->GetWrappedFd();
162
+ auto* supports_fd =
163
+ grpc_event_engine::experimental::QueryExtension<
164
+ grpc_event_engine::experimental::
165
+ EndpointSupportsFdExtension>(ep.get());
166
+ if (supports_fd == nullptr) {
167
+ LOG(ERROR)
168
+ << "SERVER_CONNECT ERROR: unsupported endpoint created. "
169
+ "Endpoint doesn't support file descriptor extension. ";
170
+ return;
171
+ }
172
+ int fd = supports_fd->GetWrappedFd();
164
173
  if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
165
174
  &(addr.len)) < 0) {
166
175
  LOG(ERROR) << "Failed getpeername: "
@@ -230,7 +239,7 @@ static grpc_error_handle CreateEventEngineListener(
230
239
  listener = engine->CreateListener(
231
240
  std::move(accept_cb),
232
241
  [s, ee = keeper, shutdown_complete](absl::Status status) {
233
- CHECK_EQ(gpr_atm_no_barrier_load(&s->refs.count), 0);
242
+ GRPC_CHECK_EQ(gpr_atm_no_barrier_load(&s->refs.count), 0);
234
243
  grpc_event_engine::experimental::RunEventEngineClosure(
235
244
  shutdown_complete, absl_status_to_grpc_error(status));
236
245
  finish_shutdown(s);
@@ -283,8 +292,8 @@ static grpc_error_handle tcp_server_create(grpc_closure* shutdown_complete,
283
292
  s->nports = 0;
284
293
  s->options = ::TcpOptionsFromEndpointConfig(config);
285
294
  s->fd_handler = nullptr;
286
- CHECK(s->options.resource_quota != nullptr);
287
- CHECK(s->on_accept_cb);
295
+ GRPC_CHECK(s->options.resource_quota != nullptr);
296
+ GRPC_CHECK(s->on_accept_cb);
288
297
  s->memory_quota = s->options.resource_quota->memory_quota();
289
298
  s->pre_allocated_fd = -1;
290
299
  gpr_atm_no_barrier_store(&s->next_pollset_to_assign, 0);
@@ -306,7 +315,7 @@ static void destroyed_port(void* server, grpc_error_handle /*error*/) {
306
315
  gpr_mu_unlock(&s->mu);
307
316
  finish_shutdown(s);
308
317
  } else {
309
- CHECK(s->destroyed_ports < s->nports);
318
+ GRPC_CHECK(s->destroyed_ports < s->nports);
310
319
  gpr_mu_unlock(&s->mu);
311
320
  }
312
321
  }
@@ -318,7 +327,7 @@ static void deactivated_all_ports(grpc_tcp_server* s) {
318
327
  // delete ALL the things
319
328
  gpr_mu_lock(&s->mu);
320
329
 
321
- CHECK(s->shutdown);
330
+ GRPC_CHECK(s->shutdown);
322
331
 
323
332
  if (s->head) {
324
333
  grpc_tcp_listener* sp;
@@ -347,7 +356,7 @@ static void deactivated_all_ports(grpc_tcp_server* s) {
347
356
 
348
357
  static void tcp_server_destroy(grpc_tcp_server* s) {
349
358
  gpr_mu_lock(&s->mu);
350
- CHECK(!s->shutdown);
359
+ GRPC_CHECK(!s->shutdown);
351
360
  s->shutdown = true;
352
361
  // shutdown all fd's
353
362
  if (s->active_ports) {
@@ -413,7 +422,8 @@ static void on_read(void* arg, grpc_error_handle err) {
413
422
  goto error;
414
423
  }
415
424
 
416
- if (sp->server->memory_quota->IsMemoryPressureHigh()) {
425
+ if (sp->server->memory_quota
426
+ ->RejectNewConnectionsUnderHighMemoryPressure()) {
417
427
  int64_t dropped_connections_count =
418
428
  num_dropped_connections.fetch_add(1, std::memory_order_relaxed) + 1;
419
429
  if (dropped_connections_count % 1000 == 1) {
@@ -550,8 +560,8 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
550
560
  } else {
551
561
  grpc_error_handle root_err =
552
562
  GRPC_ERROR_CREATE("Failed to add any wildcard listeners");
553
- CHECK(!v6_err.ok());
554
- CHECK(!v4_err.ok());
563
+ GRPC_CHECK(!v6_err.ok());
564
+ GRPC_CHECK(!v4_err.ok());
555
565
  root_err = grpc_error_add_child(root_err, v6_err);
556
566
  root_err = grpc_error_add_child(root_err, v4_err);
557
567
  return root_err;
@@ -602,7 +612,7 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
602
612
  sp->port = port;
603
613
  sp->port_index = listener->port_index;
604
614
  sp->fd_index = listener->fd_index + count - i;
605
- CHECK(sp->emfd);
615
+ GRPC_CHECK(sp->emfd);
606
616
  grpc_tcp_server_listener_initialize_retry_timer(sp);
607
617
  while (listener->server->tail->next != nullptr) {
608
618
  listener->server->tail = listener->server->tail->next;
@@ -634,7 +644,7 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
634
644
  if (!listen_fd.ok()) {
635
645
  return;
636
646
  }
637
- DCHECK_GT(*listen_fd, 0);
647
+ GRPC_DCHECK_GT(*listen_fd, 0);
638
648
  s->listen_fd_to_index_map.insert_or_assign(
639
649
  *listen_fd, std::tuple(s->n_bind_ports, fd_index++));
640
650
  });
@@ -649,7 +659,7 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
649
659
  gpr_mu_unlock(&s->mu);
650
660
  return port.status();
651
661
  }
652
- CHECK(addr->len <= GRPC_MAX_SOCKADDR_SIZE);
662
+ GRPC_CHECK(addr->len <= GRPC_MAX_SOCKADDR_SIZE);
653
663
  grpc_tcp_listener* sp;
654
664
  grpc_resolved_address sockname_temp;
655
665
  grpc_resolved_address addr6_v4mapped;
@@ -777,12 +787,12 @@ static void tcp_server_start(grpc_tcp_server* s,
777
787
  size_t i;
778
788
  grpc_tcp_listener* sp;
779
789
  gpr_mu_lock(&s->mu);
780
- CHECK(s->on_accept_cb);
781
- CHECK_EQ(s->active_ports, 0u);
790
+ GRPC_CHECK(s->on_accept_cb);
791
+ GRPC_CHECK_EQ(s->active_ports, 0u);
782
792
  s->pollsets = pollsets;
783
793
  if (grpc_event_engine::experimental::UseEventEngineListener()) {
784
- CHECK(!s->shutdown_listeners);
785
- CHECK(GRPC_LOG_IF_ERROR("listener_start", s->ee_listener->Start()));
794
+ GRPC_CHECK(!s->shutdown_listeners);
795
+ GRPC_CHECK(GRPC_LOG_IF_ERROR("listener_start", s->ee_listener->Start()));
786
796
  gpr_mu_unlock(&s->mu);
787
797
  return;
788
798
  }
@@ -790,7 +800,7 @@ static void tcp_server_start(grpc_tcp_server* s,
790
800
  while (sp != nullptr) {
791
801
  if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr) &&
792
802
  !grpc_is_vsock(&sp->addr) && pollsets->size() > 1) {
793
- CHECK(GRPC_LOG_IF_ERROR(
803
+ GRPC_CHECK(GRPC_LOG_IF_ERROR(
794
804
  "clone_port", clone_port(sp, (unsigned)(pollsets->size() - 1))));
795
805
  for (i = 0; i < pollsets->size(); i++) {
796
806
  grpc_pollset_add_fd((*pollsets)[i], sp->emfd);
@@ -827,6 +837,14 @@ static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
827
837
  gpr_mu_unlock(&s->mu);
828
838
  }
829
839
 
840
+ static void tcp_server_shutdown_ending_add(grpc_tcp_server* s,
841
+ grpc_closure* shutdown_ending) {
842
+ gpr_mu_lock(&s->mu);
843
+ grpc_closure_list_append(&s->shutdown_ending, shutdown_ending,
844
+ absl::OkStatus());
845
+ gpr_mu_unlock(&s->mu);
846
+ }
847
+
830
848
  static void tcp_server_unref(grpc_tcp_server* s) {
831
849
  if (gpr_unref(&s->refs)) {
832
850
  grpc_tcp_server_shutdown_listeners(s);
@@ -882,16 +900,17 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
882
900
  grpc_event_engine::experimental::QueryExtension<
883
901
  grpc_event_engine::experimental::ListenerSupportsFdExtension>(
884
902
  s_->ee_listener.get());
885
- CHECK_NE(listener_supports_fd, nullptr);
903
+ GRPC_CHECK_NE(listener_supports_fd, nullptr);
886
904
  grpc_event_engine::experimental::SliceBuffer pending_data;
887
905
  if (buf != nullptr) {
888
906
  pending_data =
889
907
  grpc_event_engine::experimental::SliceBuffer::TakeCSliceBuffer(
890
908
  buf->data.raw.slice_buffer);
891
909
  }
892
- CHECK(GRPC_LOG_IF_ERROR("listener_handle_external_connection",
893
- listener_supports_fd->HandleExternalConnection(
894
- listener_fd, fd, &pending_data)));
910
+ GRPC_CHECK(
911
+ GRPC_LOG_IF_ERROR("listener_handle_external_connection",
912
+ listener_supports_fd->HandleExternalConnection(
913
+ listener_fd, fd, &pending_data)));
895
914
  return;
896
915
  }
897
916
  grpc_pollset* read_notifier_pollset;
@@ -960,6 +979,7 @@ grpc_tcp_server_vtable grpc_posix_tcp_server_vtable = {
960
979
  tcp_server_port_fd,
961
980
  tcp_server_ref,
962
981
  tcp_server_shutdown_starting_add,
982
+ tcp_server_shutdown_ending_add,
963
983
  tcp_server_unref,
964
984
  tcp_server_shutdown_listeners,
965
985
  tcp_server_pre_allocated_fd,
@@ -90,6 +90,9 @@ struct grpc_tcp_server {
90
90
  // List of closures passed to shutdown_starting_add().
91
91
  grpc_closure_list shutdown_starting{nullptr, nullptr};
92
92
 
93
+ // List of closures passed to shutdown_ending_add().
94
+ grpc_closure_list shutdown_ending{nullptr, nullptr};
95
+
93
96
  // shutdown callback
94
97
  grpc_closure* shutdown_complete = nullptr;
95
98
 
@@ -33,7 +33,6 @@
33
33
 
34
34
  #include <string>
35
35
 
36
- #include "absl/log/check.h"
37
36
  #include "absl/log/log.h"
38
37
  #include "absl/strings/str_cat.h"
39
38
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -43,6 +42,7 @@
43
42
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
44
43
  #include "src/core/lib/iomgr/vsock.h"
45
44
  #include "src/core/util/crash.h"
45
+ #include "src/core/util/grpc_check.h"
46
46
 
47
47
  #define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
48
48
 
@@ -109,7 +109,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
109
109
  grpc_error_handle err =
110
110
  grpc_tcp_server_prepare_socket(s, fd, addr, s->so_reuseport, &port);
111
111
  if (!err.ok()) return err;
112
- CHECK_GT(port, 0);
112
+ GRPC_CHECK_GT(port, 0);
113
113
  absl::StatusOr<std::string> addr_str = grpc_sockaddr_to_string(addr, true);
114
114
  if (!addr_str.ok()) {
115
115
  return GRPC_ERROR_CREATE(addr_str.status().ToString());
@@ -142,7 +142,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
142
142
  sp->fd_index = fd_index;
143
143
  sp->is_sibling = 0;
144
144
  sp->sibling = nullptr;
145
- CHECK(sp->emfd);
145
+ GRPC_CHECK(sp->emfd);
146
146
  gpr_mu_unlock(&s->mu);
147
147
 
148
148
  *listener = sp;
@@ -206,7 +206,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
206
206
  grpc_resolved_address sockname_temp;
207
207
  grpc_error_handle err;
208
208
 
209
- CHECK_GE(fd, 0);
209
+ GRPC_CHECK_GE(fd, 0);
210
210
 
211
211
  if (so_reuseport && !grpc_is_unix_socket(addr) && !grpc_is_vsock(addr)) {
212
212
  err = grpc_set_socket_reuse_port(fd, 1);
@@ -269,7 +269,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
269
269
  return absl::OkStatus();
270
270
 
271
271
  error:
272
- CHECK(!err.ok());
272
+ GRPC_CHECK(!err.ok());
273
273
  if (fd >= 0) {
274
274
  close(fd);
275
275
  }
@@ -31,7 +31,6 @@
31
31
 
32
32
  #include <string>
33
33
 
34
- #include "absl/log/check.h"
35
34
  #include "absl/log/log.h"
36
35
  #include "absl/strings/str_cat.h"
37
36
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -39,6 +38,7 @@
39
38
  #include "src/core/lib/iomgr/sockaddr.h"
40
39
  #include "src/core/lib/iomgr/tcp_server_utils_posix.h"
41
40
  #include "src/core/util/crash.h"
41
+ #include "src/core/util/grpc_check.h"
42
42
 
43
43
  // Return the listener in s with address addr or NULL.
44
44
  static grpc_tcp_listener* find_listener_with_addr(grpc_tcp_server* s,
@@ -165,7 +165,7 @@ grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
165
165
  err = grpc_error_add_child(root_err, err);
166
166
  break;
167
167
  } else {
168
- CHECK(requested_port == new_sp->port);
168
+ GRPC_CHECK(requested_port == new_sp->port);
169
169
  ++fd_index;
170
170
  if (sp != nullptr) {
171
171
  new_sp->is_sibling = 1;