grpc 1.64.3 → 1.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -58
  3. data/include/grpc/event_engine/event_engine.h +13 -6
  4. data/include/grpc/impl/channel_arg_names.h +7 -3
  5. data/include/grpc/module.modulemap +1 -0
  6. data/include/grpc/passive_listener.h +62 -0
  7. data/include/grpc/support/log.h +7 -17
  8. data/include/grpc/support/port_platform.h +3 -0
  9. data/src/core/channelz/channel_trace.cc +1 -1
  10. data/src/core/channelz/channel_trace.h +1 -1
  11. data/src/core/channelz/channelz.cc +3 -3
  12. data/src/core/channelz/channelz.h +7 -7
  13. data/src/core/channelz/channelz_registry.cc +4 -3
  14. data/src/core/client_channel/backup_poller.cc +4 -5
  15. data/src/core/client_channel/client_channel.cc +1324 -0
  16. data/src/core/client_channel/client_channel.h +243 -0
  17. data/src/core/client_channel/client_channel_filter.cc +266 -709
  18. data/src/core/client_channel/client_channel_filter.h +11 -64
  19. data/src/core/client_channel/client_channel_internal.h +16 -5
  20. data/src/core/client_channel/client_channel_plugin.cc +1 -14
  21. data/src/core/client_channel/client_channel_service_config.h +3 -3
  22. data/src/core/client_channel/config_selector.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +1 -1
  24. data/src/core/client_channel/dynamic_filters.cc +3 -3
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
  27. data/src/core/client_channel/load_balanced_call_destination.h +49 -0
  28. data/src/core/client_channel/retry_filter.cc +2 -9
  29. data/src/core/client_channel/retry_filter.h +2 -7
  30. data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
  31. data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
  32. data/src/core/client_channel/retry_service_config.cc +4 -5
  33. data/src/core/client_channel/retry_service_config.h +3 -3
  34. data/src/core/client_channel/subchannel.cc +220 -112
  35. data/src/core/client_channel/subchannel.h +31 -18
  36. data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
  37. data/src/core/client_channel/subchannel_pool_interface.h +2 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +36 -49
  39. data/src/core/client_channel/subchannel_stream_client.h +2 -4
  40. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
  41. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
  42. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  43. data/src/core/ext/filters/census/grpc_context.cc +2 -4
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  50. data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
  51. data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
  52. data/src/core/ext/filters/http/client_authority_filter.h +1 -0
  53. data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
  54. data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
  55. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
  56. data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
  58. data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
  59. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
  60. data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
  61. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  62. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  63. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
  64. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
  65. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  66. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  67. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
  68. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
  70. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  71. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
  73. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
  74. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
  75. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
  76. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
  78. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
  79. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
  80. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
  82. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
  84. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  85. data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
  86. data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
  87. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
  88. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
  89. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
  95. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
  97. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  98. data/src/core/handshaker/handshaker.cc +6 -14
  99. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
  100. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
  101. data/src/core/handshaker/security/secure_endpoint.cc +38 -32
  102. data/src/core/handshaker/security/secure_endpoint.h +0 -2
  103. data/src/core/handshaker/security/security_handshaker.cc +25 -37
  104. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
  105. data/src/core/lib/address_utils/parse_address.cc +27 -39
  106. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
  107. data/src/core/lib/avl/avl.h +1 -1
  108. data/src/core/lib/channel/channel_args.cc +13 -17
  109. data/src/core/lib/channel/channel_args.h +19 -8
  110. data/src/core/lib/channel/channel_stack.cc +5 -63
  111. data/src/core/lib/channel/channel_stack.h +13 -37
  112. data/src/core/lib/channel/channel_stack_builder.h +0 -5
  113. data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
  114. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
  115. data/src/core/lib/channel/connected_channel.cc +37 -676
  116. data/src/core/lib/channel/promise_based_filter.cc +41 -47
  117. data/src/core/lib/channel/promise_based_filter.h +124 -477
  118. data/src/core/lib/channel/status_util.cc +1 -1
  119. data/src/core/lib/compression/compression.cc +1 -1
  120. data/src/core/lib/compression/message_compress.cc +6 -6
  121. data/src/core/lib/config/config_vars.cc +3 -8
  122. data/src/core/lib/config/config_vars.h +1 -5
  123. data/src/core/lib/debug/event_log.h +1 -1
  124. data/src/core/lib/debug/trace.cc +43 -59
  125. data/src/core/lib/debug/trace.h +2 -97
  126. data/src/core/lib/debug/trace_flags.cc +255 -0
  127. data/src/core/lib/debug/trace_flags.h +133 -0
  128. data/src/core/lib/debug/trace_impl.h +115 -0
  129. data/src/core/lib/event_engine/ares_resolver.cc +5 -7
  130. data/src/core/lib/event_engine/ares_resolver.h +1 -3
  131. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  132. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
  133. data/src/core/lib/event_engine/event_engine.cc +29 -4
  134. data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
  135. data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
  136. data/src/core/lib/event_engine/forkable.cc +4 -5
  137. data/src/core/lib/event_engine/forkable.h +0 -11
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
  139. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
  140. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
  142. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
  143. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
  144. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
  146. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
  148. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
  149. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
  150. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
  151. data/src/core/lib/event_engine/shim.cc +1 -1
  152. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  153. data/src/core/lib/event_engine/thread_local.h +1 -1
  154. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  155. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
  156. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
  157. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
  158. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
  159. data/src/core/lib/event_engine/trace.h +6 -17
  160. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  161. data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
  162. data/src/core/lib/event_engine/windows/win_socket.h +4 -5
  163. data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
  164. data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
  165. data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
  166. data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
  167. data/src/core/lib/experiments/experiments.cc +35 -151
  168. data/src/core/lib/experiments/experiments.h +12 -45
  169. data/src/core/lib/gprpp/bitset.h +1 -1
  170. data/src/core/lib/gprpp/crash.cc +2 -3
  171. data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
  172. data/src/core/lib/gprpp/dump_args.cc +54 -0
  173. data/src/core/lib/gprpp/dump_args.h +69 -0
  174. data/src/core/lib/gprpp/glob.cc +70 -0
  175. data/src/core/lib/gprpp/glob.h +29 -0
  176. data/src/core/lib/gprpp/per_cpu.cc +1 -1
  177. data/src/core/lib/gprpp/posix/stat.cc +3 -4
  178. data/src/core/lib/gprpp/posix/thd.cc +8 -9
  179. data/src/core/lib/gprpp/ref_counted.h +30 -22
  180. data/src/core/lib/gprpp/single_set_ptr.h +5 -3
  181. data/src/core/lib/gprpp/status_helper.cc +11 -30
  182. data/src/core/lib/gprpp/status_helper.h +3 -31
  183. data/src/core/lib/gprpp/time.cc +3 -4
  184. data/src/core/lib/gprpp/time.h +3 -2
  185. data/src/core/lib/gprpp/unique_type_name.h +1 -1
  186. data/src/core/lib/gprpp/validation_errors.cc +10 -1
  187. data/src/core/lib/gprpp/validation_errors.h +11 -0
  188. data/src/core/lib/gprpp/windows/stat.cc +3 -4
  189. data/src/core/lib/gprpp/windows/thd.cc +3 -2
  190. data/src/core/lib/gprpp/work_serializer.cc +48 -57
  191. data/src/core/lib/iomgr/buffer_list.cc +4 -2
  192. data/src/core/lib/iomgr/call_combiner.cc +18 -27
  193. data/src/core/lib/iomgr/call_combiner.h +1 -3
  194. data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
  195. data/src/core/lib/iomgr/closure.h +2 -4
  196. data/src/core/lib/iomgr/combiner.cc +6 -8
  197. data/src/core/lib/iomgr/combiner.h +0 -2
  198. data/src/core/lib/iomgr/endpoint.cc +0 -6
  199. data/src/core/lib/iomgr/endpoint.h +0 -2
  200. data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
  201. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  202. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  203. data/src/core/lib/iomgr/error.cc +13 -21
  204. data/src/core/lib/iomgr/error.h +1 -1
  205. data/src/core/lib/iomgr/ev_apple.cc +3 -5
  206. data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
  207. data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
  208. data/src/core/lib/iomgr/ev_posix.cc +8 -9
  209. data/src/core/lib/iomgr/ev_posix.h +10 -7
  210. data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
  211. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
  212. data/src/core/lib/iomgr/exec_ctx.cc +2 -2
  213. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  214. data/src/core/lib/iomgr/executor.cc +6 -15
  215. data/src/core/lib/iomgr/executor.h +1 -1
  216. data/src/core/lib/iomgr/fork_posix.cc +8 -10
  217. data/src/core/lib/iomgr/fork_windows.cc +3 -1
  218. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
  219. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
  220. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  221. data/src/core/lib/iomgr/iocp_windows.cc +4 -3
  222. data/src/core/lib/iomgr/iomgr.cc +13 -17
  223. data/src/core/lib/iomgr/lockfree_event.cc +3 -5
  224. data/src/core/lib/iomgr/pollset.h +0 -2
  225. data/src/core/lib/iomgr/pollset_windows.cc +0 -2
  226. data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
  227. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  228. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  229. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  230. data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
  231. data/src/core/lib/iomgr/socket_windows.cc +4 -6
  232. data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
  233. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
  234. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
  235. data/src/core/lib/iomgr/tcp_posix.cc +57 -84
  236. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  237. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  238. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
  239. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
  240. data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
  241. data/src/core/lib/iomgr/tcp_windows.cc +25 -41
  242. data/src/core/lib/iomgr/timer_generic.cc +17 -20
  243. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  244. data/src/core/lib/iomgr/timer_manager.cc +17 -30
  245. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  246. data/src/core/lib/iomgr/vsock.cc +1 -1
  247. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
  248. data/src/core/lib/promise/activity.h +27 -4
  249. data/src/core/lib/promise/cancel_callback.h +24 -0
  250. data/src/core/lib/promise/context.h +11 -0
  251. data/src/core/lib/promise/detail/basic_seq.h +1 -2
  252. data/src/core/lib/promise/detail/join_state.h +354 -398
  253. data/src/core/lib/promise/detail/promise_like.h +6 -5
  254. data/src/core/lib/promise/detail/seq_state.h +1178 -1178
  255. data/src/core/lib/promise/for_each.h +6 -6
  256. data/src/core/lib/promise/interceptor_list.h +6 -7
  257. data/src/core/lib/promise/latch.h +9 -9
  258. data/src/core/lib/promise/map.h +17 -0
  259. data/src/core/lib/promise/observable.h +182 -0
  260. data/src/core/lib/promise/party.cc +7 -8
  261. data/src/core/lib/promise/party.h +10 -8
  262. data/src/core/lib/promise/pipe.h +16 -35
  263. data/src/core/lib/promise/promise.h +1 -0
  264. data/src/core/lib/promise/status_flag.h +2 -0
  265. data/src/core/lib/resource_quota/arena.cc +56 -79
  266. data/src/core/lib/resource_quota/arena.h +118 -209
  267. data/src/core/lib/resource_quota/memory_quota.cc +12 -13
  268. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  269. data/src/core/lib/resource_quota/periodic_update.cc +1 -1
  270. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  271. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  272. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  273. data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
  274. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
  275. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
  276. data/src/core/lib/security/authorization/matchers.cc +3 -3
  277. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  278. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
  279. data/src/core/lib/security/context/security_context.cc +12 -13
  280. data/src/core/lib/security/context/security_context.h +31 -8
  281. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  282. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
  283. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
  284. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
  285. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  286. data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
  287. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  288. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
  289. data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
  290. data/src/core/lib/security/credentials/credentials.cc +6 -6
  291. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
  292. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  293. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
  294. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  295. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
  296. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
  297. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
  299. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  300. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
  301. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
  302. data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
  303. data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
  304. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  305. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
  307. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
  308. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  309. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  310. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  312. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  313. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
  314. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
  315. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  316. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
  317. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
  318. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
  319. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
  320. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
  321. data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
  322. data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
  323. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
  324. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
  325. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
  326. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
  327. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
  328. data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
  329. data/src/core/lib/security/security_connector/security_connector.cc +1 -4
  330. data/src/core/lib/security/security_connector/security_connector.h +1 -3
  331. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
  332. data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
  333. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
  334. data/src/core/lib/security/transport/auth_filters.h +1 -0
  335. data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
  336. data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
  337. data/src/core/lib/security/util/json_util.h +1 -1
  338. data/src/core/lib/slice/slice.h +1 -1
  339. data/src/core/lib/slice/slice_refcount.h +2 -4
  340. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  341. data/src/core/lib/surface/api_trace.h +1 -3
  342. data/src/core/lib/surface/call.cc +64 -3738
  343. data/src/core/lib/surface/call.h +41 -143
  344. data/src/core/lib/surface/call_log_batch.cc +1 -1
  345. data/src/core/lib/surface/call_utils.cc +276 -0
  346. data/src/core/lib/surface/call_utils.h +449 -0
  347. data/src/core/lib/surface/channel.cc +8 -3
  348. data/src/core/lib/surface/channel.h +10 -7
  349. data/src/core/lib/surface/channel_create.cc +14 -6
  350. data/src/core/lib/surface/channel_create.h +3 -2
  351. data/src/core/lib/surface/channel_init.cc +21 -77
  352. data/src/core/lib/surface/channel_init.h +19 -97
  353. data/src/core/lib/surface/client_call.cc +419 -0
  354. data/src/core/lib/surface/client_call.h +180 -0
  355. data/src/core/lib/surface/completion_queue.cc +28 -33
  356. data/src/core/lib/surface/completion_queue.h +0 -8
  357. data/src/core/lib/surface/filter_stack_call.cc +1157 -0
  358. data/src/core/lib/surface/filter_stack_call.h +369 -0
  359. data/src/core/lib/surface/init.cc +7 -6
  360. data/src/core/lib/surface/lame_client.cc +1 -1
  361. data/src/core/lib/surface/legacy_channel.cc +40 -27
  362. data/src/core/lib/surface/legacy_channel.h +9 -18
  363. data/src/core/lib/surface/server_call.cc +222 -0
  364. data/src/core/lib/surface/server_call.h +167 -0
  365. data/src/core/lib/surface/version.cc +2 -2
  366. data/src/core/lib/transport/bdp_estimator.cc +3 -5
  367. data/src/core/lib/transport/bdp_estimator.h +2 -4
  368. data/src/core/lib/transport/call_arena_allocator.h +9 -7
  369. data/src/core/lib/transport/call_destination.h +76 -0
  370. data/src/core/lib/transport/call_filters.cc +28 -10
  371. data/src/core/lib/transport/call_filters.h +128 -22
  372. data/src/core/lib/transport/call_spine.cc +5 -6
  373. data/src/core/lib/transport/call_spine.h +159 -334
  374. data/src/core/lib/transport/connectivity_state.cc +8 -10
  375. data/src/core/lib/transport/connectivity_state.h +0 -2
  376. data/src/core/lib/transport/interception_chain.cc +155 -0
  377. data/src/core/lib/transport/interception_chain.h +236 -0
  378. data/src/core/lib/transport/metadata_batch.h +10 -1
  379. data/src/core/lib/transport/metadata_info.h +1 -1
  380. data/src/core/lib/transport/transport.cc +3 -6
  381. data/src/core/lib/transport/transport.h +43 -40
  382. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  383. data/src/core/load_balancing/endpoint_list.cc +5 -5
  384. data/src/core/load_balancing/endpoint_list.h +1 -1
  385. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
  386. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
  387. data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
  388. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
  389. data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
  390. data/src/core/load_balancing/health_check_client.cc +10 -13
  391. data/src/core/load_balancing/lb_policy.cc +5 -8
  392. data/src/core/load_balancing/lb_policy.h +19 -3
  393. data/src/core/load_balancing/lb_policy_factory.h +1 -1
  394. data/src/core/load_balancing/lb_policy_registry.cc +2 -3
  395. data/src/core/load_balancing/lb_policy_registry.h +1 -1
  396. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  397. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
  398. data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
  399. data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
  400. data/src/core/load_balancing/priority/priority.cc +26 -28
  401. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
  402. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  403. data/src/core/load_balancing/rls/rls.cc +82 -82
  404. data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
  405. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
  406. data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
  407. data/src/core/load_balancing/xds/cds.cc +14 -16
  408. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
  409. data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
  410. data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
  411. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  412. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  413. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
  414. data/src/core/resolver/binder/binder_resolver.cc +3 -2
  415. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
  416. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  417. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
  418. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
  419. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  420. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
  421. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
  422. data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
  423. data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
  424. data/src/core/resolver/endpoint_addresses.cc +1 -1
  425. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  426. data/src/core/resolver/fake/fake_resolver.h +1 -1
  427. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  428. data/src/core/resolver/polling_resolver.cc +30 -35
  429. data/src/core/resolver/resolver.cc +2 -6
  430. data/src/core/resolver/resolver.h +0 -2
  431. data/src/core/resolver/resolver_registry.cc +6 -8
  432. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
  433. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
  434. data/src/core/resolver/xds/xds_resolver.cc +13 -15
  435. data/src/core/server/server.cc +269 -389
  436. data/src/core/server/server.h +37 -19
  437. data/src/core/server/server_call_tracer_filter.cc +7 -14
  438. data/src/core/server/server_config_selector.h +1 -1
  439. data/src/core/server/server_config_selector_filter.cc +3 -3
  440. data/src/core/server/server_interface.h +2 -0
  441. data/src/core/server/xds_channel_stack_modifier.cc +1 -1
  442. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  443. data/src/core/server/xds_server_config_fetcher.cc +1 -4
  444. data/src/core/service_config/service_config.h +1 -1
  445. data/src/core/service_config/service_config_call_data.h +13 -11
  446. data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
  447. data/src/core/service_config/service_config_impl.cc +5 -5
  448. data/src/core/service_config/service_config_impl.h +1 -1
  449. data/src/core/service_config/service_config_parser.cc +3 -6
  450. data/src/core/service_config/service_config_parser.h +1 -1
  451. data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
  452. data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
  453. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  454. data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
  455. data/src/core/telemetry/metrics.cc +178 -0
  456. data/src/core/telemetry/metrics.h +562 -0
  457. data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
  458. data/src/core/{lib/debug → telemetry}/stats.h +5 -5
  459. data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
  460. data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
  461. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
  462. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
  463. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
  464. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
  465. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  466. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
  467. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  468. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
  469. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  470. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
  471. data/src/core/tsi/fake_transport_security.cc +14 -17
  472. data/src/core/tsi/local_transport_security.cc +6 -5
  473. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
  474. data/src/core/tsi/ssl_transport_security.cc +76 -81
  475. data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
  476. data/src/core/tsi/ssl_transport_security_utils.h +11 -0
  477. data/src/core/tsi/transport_security.cc +0 -4
  478. data/src/core/tsi/transport_security.h +0 -2
  479. data/src/core/tsi/transport_security_interface.h +0 -4
  480. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  481. data/src/core/{lib/gpr → util}/android/log.cc +0 -19
  482. data/src/core/{lib/gpr → util}/atm.cc +1 -1
  483. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
  484. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
  485. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
  486. data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
  487. data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
  488. data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
  489. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
  490. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
  491. data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
  492. data/src/core/{lib/http → util/http_client}/parser.h +5 -6
  493. data/src/core/{lib → util}/json/json.h +5 -4
  494. data/src/core/{lib → util}/json/json_args.h +5 -5
  495. data/src/core/{lib → util}/json/json_channel_args.h +6 -6
  496. data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
  497. data/src/core/{lib → util}/json/json_object_loader.h +7 -7
  498. data/src/core/{lib → util}/json/json_reader.cc +3 -2
  499. data/src/core/{lib → util}/json/json_reader.h +6 -6
  500. data/src/core/{lib → util}/json/json_util.cc +4 -4
  501. data/src/core/{lib → util}/json/json_util.h +6 -6
  502. data/src/core/{lib → util}/json/json_writer.cc +3 -3
  503. data/src/core/{lib → util}/json/json_writer.h +6 -6
  504. data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
  505. data/src/core/util/log.cc +165 -0
  506. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
  507. data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
  508. data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
  509. data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
  510. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
  511. data/src/core/{lib/gpr → util}/spinlock.h +3 -3
  512. data/src/core/{lib/gpr → util}/string.cc +2 -2
  513. data/src/core/{lib/gpr → util}/string.h +3 -3
  514. data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
  515. data/src/core/{lib/gpr → util}/time_precise.h +3 -3
  516. data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
  517. data/src/core/{lib/gpr → util}/useful.h +3 -3
  518. data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
  519. data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
  520. data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
  521. data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
  522. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
  523. data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
  524. data/src/core/xds/grpc/certificate_provider_store.h +4 -4
  525. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  526. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
  527. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  528. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
  529. data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
  530. data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
  531. data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
  532. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  533. data/src/core/xds/grpc/xds_cluster.cc +4 -5
  534. data/src/core/xds/grpc/xds_cluster.h +1 -1
  535. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  536. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  537. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  538. data/src/core/xds/grpc/xds_common_types.h +1 -1
  539. data/src/core/xds/grpc/xds_endpoint.cc +4 -5
  540. data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
  541. data/src/core/xds/grpc/xds_http_filters.h +2 -2
  542. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
  543. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
  544. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  545. data/src/core/xds/grpc/xds_listener.cc +4 -6
  546. data/src/core/xds/grpc/xds_route_config.cc +7 -8
  547. data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
  548. data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
  549. data/src/core/xds/xds_client/xds_api.cc +5 -9
  550. data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
  551. data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
  552. data/src/core/xds/xds_client/xds_client.cc +39 -45
  553. data/src/core/xds/xds_client/xds_client.h +0 -3
  554. data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
  555. data/src/core/xds/xds_client/xds_client_stats.h +2 -2
  556. data/src/ruby/bin/math_pb.rb +1 -22
  557. data/src/ruby/ext/grpc/rb_call.c +8 -1
  558. data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
  559. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  560. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  561. data/src/ruby/ext/grpc/rb_server.c +39 -22
  562. data/src/ruby/lib/grpc/version.rb +1 -1
  563. data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
  564. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
  565. data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
  566. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
  567. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
  568. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
  569. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  571. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  572. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  573. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  576. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  577. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
  584. data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  589. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  590. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  593. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
  594. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
  595. metadata +103 -93
  596. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  597. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  598. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  599. data/src/core/handshaker/security/tsi_error.cc +0 -31
  600. data/src/core/handshaker/security/tsi_error.h +0 -30
  601. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  602. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  603. data/src/core/lib/channel/context.h +0 -105
  604. data/src/core/lib/channel/metrics.cc +0 -334
  605. data/src/core/lib/channel/metrics.h +0 -365
  606. data/src/core/lib/event_engine/trace.cc +0 -25
  607. data/src/core/lib/gpr/log.cc +0 -166
  608. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  609. data/src/core/lib/promise/trace.cc +0 -20
  610. data/src/core/lib/promise/trace.h +0 -24
  611. data/src/core/lib/resource_quota/trace.cc +0 -19
  612. data/src/core/lib/resource_quota/trace.h +0 -24
  613. data/src/core/lib/slice/slice_refcount.cc +0 -20
  614. data/src/core/lib/surface/api_trace.cc +0 -25
  615. data/src/core/lib/surface/call_trace.h +0 -24
  616. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  617. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  618. data/src/core/lib/transport/batch_builder.cc +0 -172
  619. data/src/core/lib/transport/batch_builder.h +0 -474
  620. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  621. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  622. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  623. /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
  624. /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
  625. /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
  626. /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
  627. /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
  628. /data/src/core/{lib/gpr → util}/sync.cc +0 -0
  629. /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
  630. /data/src/core/{lib/gpr → util}/time.cc +0 -0
  631. /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
  632. /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -30,6 +30,7 @@
30
30
 
31
31
  #include "absl/base/thread_annotations.h"
32
32
  #include "absl/log/check.h"
33
+ #include "absl/log/log.h"
33
34
  #include "absl/status/status.h"
34
35
  #include "absl/status/statusor.h"
35
36
  #include "absl/strings/str_cat.h"
@@ -42,9 +43,9 @@
42
43
  #include <grpc/grpc.h>
43
44
  #include <grpc/grpc_posix.h>
44
45
  #include <grpc/impl/channel_arg_names.h>
46
+ #include <grpc/passive_listener.h>
45
47
  #include <grpc/slice_buffer.h>
46
48
  #include <grpc/support/alloc.h>
47
- #include <grpc/support/log.h>
48
49
  #include <grpc/support/port_platform.h>
49
50
 
50
51
  #include "src/core/channelz/channelz.h"
@@ -58,6 +59,8 @@
58
59
  #include "src/core/lib/config/core_configuration.h"
59
60
  #include "src/core/lib/debug/trace.h"
60
61
  #include "src/core/lib/event_engine/channel_args_endpoint_config.h"
62
+ #include "src/core/lib/event_engine/extensions/supports_fd.h"
63
+ #include "src/core/lib/event_engine/query_extensions.h"
61
64
  #include "src/core/lib/gprpp/debug_location.h"
62
65
  #include "src/core/lib/gprpp/orphanable.h"
63
66
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -67,6 +70,7 @@
67
70
  #include "src/core/lib/gprpp/unique_type_name.h"
68
71
  #include "src/core/lib/iomgr/closure.h"
69
72
  #include "src/core/lib/iomgr/endpoint.h"
73
+ #include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
70
74
  #include "src/core/lib/iomgr/iomgr_fwd.h"
71
75
  #include "src/core/lib/iomgr/pollset_set.h"
72
76
  #include "src/core/lib/iomgr/resolve_address.h"
@@ -93,9 +97,11 @@
93
97
  #endif // GPR_SUPPORT_CHANNELS_FROM_FD
94
98
 
95
99
  namespace grpc_core {
96
- namespace {
97
100
 
98
- using ::grpc_event_engine::experimental::EventEngine;
101
+ using grpc_event_engine::experimental::ChannelArgsEndpointConfig;
102
+ using grpc_event_engine::experimental::EventEngine;
103
+ using grpc_event_engine::experimental::EventEngineSupportsFdExtension;
104
+ using grpc_event_engine::experimental::QueryExtension;
99
105
 
100
106
  const char kUnixUriPrefix[] = "unix:";
101
107
  const char kUnixAbstractUriPrefix[] = "unix-abstract:";
@@ -112,14 +118,23 @@ class Chttp2ServerListener : public Server::ListenerInterface {
112
118
  Server* server, const char* name, const ChannelArgs& args,
113
119
  Chttp2ServerArgsModifier args_modifier);
114
120
 
121
+ static Chttp2ServerListener* CreateForPassiveListener(
122
+ Server* server, const ChannelArgs& args,
123
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener);
124
+
115
125
  // Do not instantiate directly. Use one of the factory methods above.
116
126
  Chttp2ServerListener(Server* server, const ChannelArgs& args,
117
- Chttp2ServerArgsModifier args_modifier);
127
+ Chttp2ServerArgsModifier args_modifier,
128
+ grpc_server_config_fetcher* config_fetcher,
129
+ std::shared_ptr<experimental::PassiveListenerImpl>
130
+ passive_listener = nullptr);
118
131
  ~Chttp2ServerListener() override;
119
132
 
120
133
  void Start(Server* server,
121
134
  const std::vector<grpc_pollset*>* pollsets) override;
122
135
 
136
+ void AcceptConnectedEndpoint(std::unique_ptr<EventEngine::Endpoint> endpoint);
137
+
123
138
  channelz::ListenSocketNode* channelz_listen_socket_node() const override {
124
139
  return channelz_listen_socket_.get();
125
140
  }
@@ -129,6 +144,8 @@ class Chttp2ServerListener : public Server::ListenerInterface {
129
144
  void Orphan() override;
130
145
 
131
146
  private:
147
+ friend class experimental::PassiveListenerImpl;
148
+
132
149
  class ConfigFetcherWatcher
133
150
  : public grpc_server_config_fetcher::WatcherInterface {
134
151
  public:
@@ -235,34 +252,8 @@ class Chttp2ServerListener : public Server::ListenerInterface {
235
252
  static void DestroyListener(Server* /*server*/, void* arg,
236
253
  grpc_closure* destroy_done);
237
254
 
238
- // The interface required by RefCountedPtr<> has been manually implemented
239
- // here to take a ref on tcp_server_ instead. Note that, the handshaker
240
- // needs tcp_server_ to exist for the lifetime of the handshake since it's
241
- // needed by acceptor. Sharing refs between the listener and tcp_server_ is
242
- // just an optimization to avoid taking additional refs on the listener,
243
- // since TcpServerShutdownComplete already holds a ref to the listener.
244
- void IncrementRefCount() { grpc_tcp_server_ref(tcp_server_); }
245
- void IncrementRefCount(const DebugLocation& /* location */,
246
- const char* /* reason */) {
247
- IncrementRefCount();
248
- }
249
-
250
- GRPC_MUST_USE_RESULT RefCountedPtr<Chttp2ServerListener> Ref() {
251
- IncrementRefCount();
252
- return RefCountedPtr<Chttp2ServerListener>(this);
253
- }
254
- GRPC_MUST_USE_RESULT RefCountedPtr<Chttp2ServerListener> Ref(
255
- const DebugLocation& /* location */, const char* /* reason */) {
256
- return Ref();
257
- }
258
-
259
- void Unref() { grpc_tcp_server_unref(tcp_server_); }
260
- void Unref(const DebugLocation& /* location */, const char* /* reason */) {
261
- Unref();
262
- }
263
-
264
- Server* const server_;
265
- grpc_tcp_server* tcp_server_;
255
+ Server* const server_ = nullptr;
256
+ grpc_tcp_server* tcp_server_ = nullptr;
266
257
  grpc_resolved_address resolved_address_;
267
258
  Chttp2ServerArgsModifier const args_modifier_;
268
259
  ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
@@ -285,6 +276,10 @@ class Chttp2ServerListener : public Server::ListenerInterface {
285
276
  RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
286
277
  MemoryQuotaRefPtr memory_quota_;
287
278
  ConnectionQuotaRefPtr connection_quota_;
279
+ grpc_server_config_fetcher* config_fetcher_ = nullptr;
280
+ // TODO(yashykt): consider using absl::variant<> to minimize memory usage for
281
+ // disjoint cases where different fields are used.
282
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener_;
288
283
  };
289
284
 
290
285
  //
@@ -331,8 +326,7 @@ void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
331
326
  grpc_error_handle error = grpc_tcp_server_add_port(
332
327
  listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
333
328
  if (!error.ok()) {
334
- gpr_log(GPR_ERROR, "Error adding port to server: %s",
335
- StatusToString(error).c_str());
329
+ LOG(ERROR) << "Error adding port to server: " << StatusToString(error);
336
330
  // TODO(yashykt): We wouldn't need to assert here if we bound to the
337
331
  // port earlier during AddPort.
338
332
  CHECK(0);
@@ -381,13 +375,17 @@ Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
381
375
  handshake_mgr_(MakeRefCounted<HandshakeManager>()),
382
376
  deadline_(GetConnectionDeadline(args)),
383
377
  interested_parties_(grpc_pollset_set_create()) {
384
- grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
378
+ if (accepting_pollset != nullptr) {
379
+ grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
380
+ }
385
381
  CoreConfiguration::Get().handshaker_registry().AddHandshakers(
386
382
  HANDSHAKER_SERVER, args, interested_parties_, handshake_mgr_.get());
387
383
  }
388
384
 
389
385
  Chttp2ServerListener::ActiveConnection::HandshakingState::~HandshakingState() {
390
- grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
386
+ if (accepting_pollset_ != nullptr) {
387
+ grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
388
+ }
391
389
  grpc_pollset_set_destroy(interested_parties_);
392
390
  gpr_free(acceptor_);
393
391
  }
@@ -462,11 +460,6 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
462
460
  if (error.ok() && args->endpoint != nullptr) {
463
461
  // We were shut down or stopped serving after handshaking completed
464
462
  // successfully, so destroy the endpoint here.
465
- // TODO(ctiller): It is currently necessary to shutdown endpoints
466
- // before destroying them, even if we know that there are no
467
- // pending read/write callbacks. This should be fixed, at which
468
- // point this can be removed.
469
- grpc_endpoint_shutdown(args->endpoint, absl::OkStatus());
470
463
  grpc_endpoint_destroy(args->endpoint);
471
464
  grpc_slice_buffer_destroy(args->read_buffer);
472
465
  gpr_free(args->read_buffer);
@@ -476,23 +469,18 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
476
469
  // handshaker may have handed off the connection to some external
477
470
  // code, so we can just clean up here without creating a transport.
478
471
  if (args->endpoint != nullptr) {
479
- Transport* transport =
480
- grpc_create_chttp2_transport(args->args, args->endpoint, false);
472
+ RefCountedPtr<Transport> transport =
473
+ grpc_create_chttp2_transport(args->args, args->endpoint, false)
474
+ ->Ref();
481
475
  grpc_error_handle channel_init_err =
482
476
  self->connection_->listener_->server_->SetupTransport(
483
- transport, self->accepting_pollset_, args->args,
484
- grpc_chttp2_transport_get_socket_node(transport));
477
+ transport.get(), self->accepting_pollset_, args->args,
478
+ grpc_chttp2_transport_get_socket_node(transport.get()));
485
479
  if (channel_init_err.ok()) {
486
480
  // Use notify_on_receive_settings callback to enforce the
487
481
  // handshake deadline.
488
- // Note: The reinterpret_cast<>s here are safe, because
489
- // grpc_chttp2_transport is a C-style extension of
490
- // Transport, so this is morally equivalent of a
491
- // static_cast<> to a derived class.
492
- // TODO(roth): Change to static_cast<> when we C++-ify the
493
- // transport API.
494
482
  self->connection_->transport_ =
495
- reinterpret_cast<grpc_chttp2_transport*>(transport)->Ref();
483
+ DownCast<grpc_chttp2_transport*>(transport.get())->Ref();
496
484
  self->Ref().release(); // Held by OnReceiveSettings().
497
485
  GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings,
498
486
  self, grpc_schedule_on_exec_ctx);
@@ -522,9 +510,9 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
522
510
  grpc_schedule_on_exec_ctx_);
523
511
  cleanup_connection = true;
524
512
  }
525
- grpc_chttp2_transport_start_reading(transport, args->read_buffer,
526
- &self->on_receive_settings_,
527
- on_close);
513
+ grpc_chttp2_transport_start_reading(
514
+ transport.get(), args->read_buffer, &self->on_receive_settings_,
515
+ nullptr, on_close);
528
516
  self->timer_handle_ = self->connection_->event_engine_->RunAfter(
529
517
  self->deadline_ - Timestamp::Now(),
530
518
  [self = self->Ref()]() mutable {
@@ -536,8 +524,8 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
536
524
  });
537
525
  } else {
538
526
  // Failed to create channel from transport. Clean up.
539
- gpr_log(GPR_ERROR, "Failed to create channel: %s",
540
- StatusToString(channel_init_err).c_str());
527
+ LOG(ERROR) << "Failed to create channel: "
528
+ << StatusToString(channel_init_err);
541
529
  transport->Orphan();
542
530
  grpc_slice_buffer_destroy(args->read_buffer);
543
531
  gpr_free(args->read_buffer);
@@ -589,7 +577,11 @@ Chttp2ServerListener::ActiveConnection::ActiveConnection(
589
577
  grpc_schedule_on_exec_ctx);
590
578
  }
591
579
 
592
- Chttp2ServerListener::ActiveConnection::~ActiveConnection() {}
580
+ Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
581
+ if (listener_ != nullptr && listener_->tcp_server_ != nullptr) {
582
+ grpc_tcp_server_unref(listener_->tcp_server_);
583
+ }
584
+ }
593
585
 
594
586
  void Chttp2ServerListener::ActiveConnection::Orphan() {
595
587
  OrphanablePtr<HandshakingState> handshaking_state;
@@ -637,6 +629,9 @@ void Chttp2ServerListener::ActiveConnection::Start(
637
629
  const ChannelArgs& args) {
638
630
  RefCountedPtr<HandshakingState> handshaking_state_ref;
639
631
  listener_ = std::move(listener);
632
+ if (listener_->tcp_server_ != nullptr) {
633
+ grpc_tcp_server_ref(listener_->tcp_server_);
634
+ }
640
635
  {
641
636
  ReleasableMutexLock lock(&mu_);
642
637
  if (shutdown_) {
@@ -645,7 +640,6 @@ void Chttp2ServerListener::ActiveConnection::Start(
645
640
  // owning Chttp2ServerListener and all associated ActiveConnections have
646
641
  // been orphaned. The generated endpoints need to be shutdown here to
647
642
  // ensure the tcp connections are closed appropriately.
648
- grpc_endpoint_shutdown(endpoint, absl::OkStatus());
649
643
  grpc_endpoint_destroy(endpoint);
650
644
  return;
651
645
  }
@@ -709,83 +703,82 @@ void Chttp2ServerListener::ActiveConnection::OnDrainGraceTimeExpiry() {
709
703
  grpc_error_handle Chttp2ServerListener::Create(
710
704
  Server* server, grpc_resolved_address* addr, const ChannelArgs& args,
711
705
  Chttp2ServerArgsModifier args_modifier, int* port_num) {
712
- Chttp2ServerListener* listener = nullptr;
713
- // The bulk of this method is inside of a lambda to make cleanup
714
- // easier without using goto.
715
- grpc_error_handle error = [&]() {
716
- grpc_error_handle error;
717
- // Create Chttp2ServerListener.
718
- listener = new Chttp2ServerListener(server, args, args_modifier);
719
- error = grpc_tcp_server_create(
720
- &listener->tcp_server_shutdown_complete_,
721
- grpc_event_engine::experimental::ChannelArgsEndpointConfig(args),
722
- OnAccept, listener, &listener->tcp_server_);
706
+ // Create Chttp2ServerListener.
707
+ OrphanablePtr<Chttp2ServerListener> listener =
708
+ MakeOrphanable<Chttp2ServerListener>(server, args, args_modifier,
709
+ server->config_fetcher());
710
+ // The tcp_server will be unreffed when the listener is orphaned, which could
711
+ // be at the end of this function if the listener was not added to the
712
+ // server's set of listeners.
713
+ grpc_error_handle error = grpc_tcp_server_create(
714
+ &listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
715
+ OnAccept, listener.get(), &listener->tcp_server_);
716
+ if (!error.ok()) return error;
717
+ if (listener->config_fetcher_ != nullptr) {
718
+ listener->resolved_address_ = *addr;
719
+ // TODO(yashykt): Consider binding so as to be able to return the port
720
+ // number.
721
+ } else {
722
+ error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
723
723
  if (!error.ok()) return error;
724
- if (server->config_fetcher() != nullptr) {
725
- listener->resolved_address_ = *addr;
726
- // TODO(yashykt): Consider binding so as to be able to return the port
727
- // number.
728
- } else {
729
- error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
730
- if (!error.ok()) return error;
731
- }
732
- // Create channelz node.
733
- if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
734
- .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
735
- auto string_address = grpc_sockaddr_to_uri(addr);
736
- if (!string_address.ok()) {
737
- return GRPC_ERROR_CREATE(string_address.status().ToString());
738
- }
739
- listener->channelz_listen_socket_ =
740
- MakeRefCounted<channelz::ListenSocketNode>(
741
- *string_address,
742
- absl::StrCat("chttp2 listener ", *string_address));
743
- }
744
- // Register with the server only upon success
745
- server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
746
- return absl::OkStatus();
747
- }();
748
- if (!error.ok()) {
749
- if (listener != nullptr) {
750
- if (listener->tcp_server_ != nullptr) {
751
- // listener is deleted when tcp_server_ is shutdown.
752
- grpc_tcp_server_unref(listener->tcp_server_);
753
- } else {
754
- delete listener;
755
- }
724
+ }
725
+ // Create channelz node.
726
+ if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
727
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
728
+ auto string_address = grpc_sockaddr_to_uri(addr);
729
+ if (!string_address.ok()) {
730
+ return GRPC_ERROR_CREATE(string_address.status().ToString());
756
731
  }
732
+ listener->channelz_listen_socket_ =
733
+ MakeRefCounted<channelz::ListenSocketNode>(
734
+ *string_address, absl::StrCat("chttp2 listener ", *string_address));
757
735
  }
758
- return error;
736
+ // Register with the server only upon success
737
+ server->AddListener(std::move(listener));
738
+ return absl::OkStatus();
759
739
  }
760
740
 
761
741
  grpc_error_handle Chttp2ServerListener::CreateWithAcceptor(
762
742
  Server* server, const char* name, const ChannelArgs& args,
763
743
  Chttp2ServerArgsModifier args_modifier) {
764
- Chttp2ServerListener* listener =
765
- new Chttp2ServerListener(server, args, args_modifier);
744
+ auto listener = MakeOrphanable<Chttp2ServerListener>(
745
+ server, args, args_modifier, server->config_fetcher());
766
746
  grpc_error_handle error = grpc_tcp_server_create(
767
- &listener->tcp_server_shutdown_complete_,
768
- grpc_event_engine::experimental::ChannelArgsEndpointConfig(args),
769
- OnAccept, listener, &listener->tcp_server_);
770
- if (!error.ok()) {
771
- delete listener;
772
- return error;
773
- }
747
+ &listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
748
+ OnAccept, listener.get(), &listener->tcp_server_);
749
+ if (!error.ok()) return error;
774
750
  // TODO(yangg) channelz
775
751
  TcpServerFdHandler** arg_val = args.GetPointer<TcpServerFdHandler*>(name);
776
752
  *arg_val = grpc_tcp_server_create_fd_handler(listener->tcp_server_);
777
- server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
753
+ server->AddListener(std::move(listener));
778
754
  return absl::OkStatus();
779
755
  }
780
756
 
757
+ Chttp2ServerListener* Chttp2ServerListener::CreateForPassiveListener(
758
+ Server* server, const ChannelArgs& args,
759
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener) {
760
+ // TODO(hork): figure out how to handle channelz in this case
761
+ auto listener = MakeOrphanable<Chttp2ServerListener>(
762
+ server, args, /*args_modifier=*/
763
+ [](const ChannelArgs& args, grpc_error_handle*) { return args; }, nullptr,
764
+ std::move(passive_listener));
765
+ auto listener_ptr = listener.get();
766
+ server->AddListener(std::move(listener));
767
+ return listener_ptr;
768
+ }
769
+
781
770
  Chttp2ServerListener::Chttp2ServerListener(
782
771
  Server* server, const ChannelArgs& args,
783
- Chttp2ServerArgsModifier args_modifier)
772
+ Chttp2ServerArgsModifier args_modifier,
773
+ grpc_server_config_fetcher* config_fetcher,
774
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener)
784
775
  : server_(server),
785
776
  args_modifier_(args_modifier),
786
777
  args_(args),
787
778
  memory_quota_(args.GetObject<ResourceQuota>()->memory_quota()),
788
- connection_quota_(MakeRefCounted<ConnectionQuota>()) {
779
+ connection_quota_(MakeRefCounted<ConnectionQuota>()),
780
+ config_fetcher_(config_fetcher),
781
+ passive_listener_(std::move(passive_listener)) {
789
782
  auto max_allowed_incoming_connections =
790
783
  args.GetInt(GRPC_ARG_MAX_ALLOWED_INCOMING_CONNECTIONS);
791
784
  if (max_allowed_incoming_connections.has_value()) {
@@ -800,6 +793,9 @@ Chttp2ServerListener::~Chttp2ServerListener() {
800
793
  // Flush queued work before destroying handshaker factory, since that
801
794
  // may do a synchronous unref.
802
795
  ExecCtx::Get()->Flush();
796
+ if (passive_listener_ != nullptr) {
797
+ passive_listener_->ListenerDestroyed();
798
+ }
803
799
  if (on_destroy_done_ != nullptr) {
804
800
  ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, absl::OkStatus());
805
801
  ExecCtx::Get()->Flush();
@@ -809,10 +805,11 @@ Chttp2ServerListener::~Chttp2ServerListener() {
809
805
  // Server callback: start listening on our ports
810
806
  void Chttp2ServerListener::Start(
811
807
  Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
812
- if (server_->config_fetcher() != nullptr) {
813
- auto watcher = std::make_unique<ConfigFetcherWatcher>(Ref());
808
+ if (config_fetcher_ != nullptr) {
809
+ auto watcher = std::make_unique<ConfigFetcherWatcher>(
810
+ RefAsSubclass<Chttp2ServerListener>());
814
811
  config_fetcher_watcher_ = watcher.get();
815
- server_->config_fetcher()->StartWatch(
812
+ config_fetcher_->StartWatch(
816
813
  grpc_sockaddr_to_string(&resolved_address_, false).value(),
817
814
  std::move(watcher));
818
815
  } else {
@@ -826,7 +823,9 @@ void Chttp2ServerListener::Start(
826
823
  }
827
824
 
828
825
  void Chttp2ServerListener::StartListening() {
829
- grpc_tcp_server_start(tcp_server_, &server_->pollsets());
826
+ if (tcp_server_ != nullptr) {
827
+ grpc_tcp_server_start(tcp_server_, &server_->pollsets());
828
+ }
830
829
  }
831
830
 
832
831
  void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
@@ -834,6 +833,12 @@ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
834
833
  on_destroy_done_ = on_destroy_done;
835
834
  }
836
835
 
836
+ void Chttp2ServerListener::AcceptConnectedEndpoint(
837
+ std::unique_ptr<EventEngine::Endpoint> endpoint) {
838
+ OnAccept(this, grpc_event_engine_endpoint_create(std::move(endpoint)),
839
+ /*accepting_pollset=*/nullptr, /*acceptor=*/nullptr);
840
+ }
841
+
837
842
  void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
838
843
  grpc_pollset* accepting_pollset,
839
844
  grpc_tcp_server_acceptor* acceptor) {
@@ -845,36 +850,30 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
845
850
  MutexLock lock(&self->mu_);
846
851
  connection_manager = self->connection_manager_;
847
852
  }
848
- auto endpoint_cleanup = [&](grpc_error_handle error) {
849
- grpc_endpoint_shutdown(tcp, error);
853
+ auto endpoint_cleanup = [&]() {
850
854
  grpc_endpoint_destroy(tcp);
851
855
  gpr_free(acceptor);
852
856
  };
853
857
  if (!self->connection_quota_->AllowIncomingConnection(
854
858
  self->memory_quota_, grpc_endpoint_get_peer(tcp))) {
855
- grpc_error_handle error = GRPC_ERROR_CREATE(
856
- "Rejected incoming connection because configured connection quota "
857
- "limits have been exceeded.");
858
- endpoint_cleanup(error);
859
+ endpoint_cleanup();
859
860
  return;
860
861
  }
861
- if (self->server_->config_fetcher() != nullptr) {
862
+ if (self->config_fetcher_ != nullptr) {
862
863
  if (connection_manager == nullptr) {
863
- grpc_error_handle error = GRPC_ERROR_CREATE(
864
- "No ConnectionManager configured. Closing connection.");
865
- endpoint_cleanup(error);
864
+ endpoint_cleanup();
866
865
  return;
867
866
  }
868
867
  absl::StatusOr<ChannelArgs> args_result =
869
868
  connection_manager->UpdateChannelArgsForConnection(args, tcp);
870
869
  if (!args_result.ok()) {
871
- endpoint_cleanup(GRPC_ERROR_CREATE(args_result.status().ToString()));
870
+ endpoint_cleanup();
872
871
  return;
873
872
  }
874
873
  grpc_error_handle error;
875
874
  args = self->args_modifier_(*args_result, &error);
876
875
  if (!error.ok()) {
877
- endpoint_cleanup(error);
876
+ endpoint_cleanup();
878
877
  return;
879
878
  }
880
879
  }
@@ -899,12 +898,12 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
899
898
  // heap-use-after-free issues where `Ref()` is invoked when the ref of
900
899
  // tcp_server_ has already reached 0. (Ref() implementation of
901
900
  // Chttp2ServerListener is grpc_tcp_server_ref().)
902
- listener_ref = self->Ref();
901
+ listener_ref = self->RefAsSubclass<Chttp2ServerListener>();
903
902
  self->connections_.emplace(connection.get(), std::move(connection));
904
903
  }
905
904
  }
906
905
  if (connection != nullptr) {
907
- endpoint_cleanup(absl::OkStatus());
906
+ endpoint_cleanup();
908
907
  } else {
909
908
  connection_ref->Start(std::move(listener_ref), tcp, args);
910
909
  }
@@ -914,7 +913,7 @@ void Chttp2ServerListener::TcpServerShutdownComplete(
914
913
  void* arg, grpc_error_handle /*error*/) {
915
914
  Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
916
915
  self->channelz_listen_socket_.reset();
917
- delete self;
916
+ self->Unref();
918
917
  }
919
918
 
920
919
  // Server callback: destroy the tcp listener (so we don't generate further
@@ -923,7 +922,8 @@ void Chttp2ServerListener::Orphan() {
923
922
  // Cancel the watch before shutting down so as to avoid holding a ref to the
924
923
  // listener in the watcher.
925
924
  if (config_fetcher_watcher_ != nullptr) {
926
- server_->config_fetcher()->CancelWatch(config_fetcher_watcher_);
925
+ CHECK_NE(config_fetcher_, nullptr);
926
+ config_fetcher_->CancelWatch(config_fetcher_watcher_);
927
927
  }
928
928
  std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
929
929
  grpc_tcp_server* tcp_server;
@@ -941,12 +941,14 @@ void Chttp2ServerListener::Orphan() {
941
941
  }
942
942
  tcp_server = tcp_server_;
943
943
  }
944
- grpc_tcp_server_shutdown_listeners(tcp_server);
945
- grpc_tcp_server_unref(tcp_server);
944
+ if (tcp_server != nullptr) {
945
+ grpc_tcp_server_shutdown_listeners(tcp_server);
946
+ grpc_tcp_server_unref(tcp_server);
947
+ } else {
948
+ Unref();
949
+ }
946
950
  }
947
951
 
948
- } // namespace
949
-
950
952
  //
951
953
  // Chttp2ServerAddPort()
952
954
  //
@@ -1018,7 +1020,7 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
1018
1020
  resolved_or->size() - error_list.size(), resolved_or->size());
1019
1021
  error = GRPC_ERROR_CREATE_REFERENCING(msg.c_str(), error_list.data(),
1020
1022
  error_list.size());
1021
- gpr_log(GPR_INFO, "WARNING: %s", StatusToString(error).c_str());
1023
+ LOG(INFO) << "WARNING: " << StatusToString(error);
1022
1024
  // we managed to bind some addresses: continue without error
1023
1025
  }
1024
1026
  return absl::OkStatus();
@@ -1047,6 +1049,50 @@ ChannelArgs ModifyArgsForConnection(const ChannelArgs& args,
1047
1049
  }
1048
1050
 
1049
1051
  } // namespace
1052
+
1053
+ namespace experimental {
1054
+
1055
+ absl::Status PassiveListenerImpl::AcceptConnectedEndpoint(
1056
+ std::unique_ptr<EventEngine::Endpoint> endpoint) {
1057
+ CHECK_NE(server_.get(), nullptr);
1058
+ RefCountedPtr<Chttp2ServerListener> listener;
1059
+ {
1060
+ MutexLock lock(&mu_);
1061
+ if (listener_ != nullptr) {
1062
+ listener =
1063
+ listener_->RefIfNonZero().TakeAsSubclass<Chttp2ServerListener>();
1064
+ }
1065
+ }
1066
+ if (listener == nullptr) {
1067
+ return absl::UnavailableError("passive listener already shut down");
1068
+ }
1069
+ ExecCtx exec_ctx;
1070
+ listener->AcceptConnectedEndpoint(std::move(endpoint));
1071
+ return absl::OkStatus();
1072
+ }
1073
+
1074
+ absl::Status PassiveListenerImpl::AcceptConnectedFd(int fd) {
1075
+ CHECK_NE(server_.get(), nullptr);
1076
+ ExecCtx exec_ctx;
1077
+ auto& args = server_->channel_args();
1078
+ auto* supports_fd = QueryExtension<EventEngineSupportsFdExtension>(
1079
+ /*engine=*/args.GetObjectRef<EventEngine>().get());
1080
+ if (supports_fd == nullptr) {
1081
+ return absl::UnimplementedError(
1082
+ "The server's EventEngine does not support adding endpoints from "
1083
+ "connected file descriptors.");
1084
+ }
1085
+ auto endpoint =
1086
+ supports_fd->CreateEndpointFromFd(fd, ChannelArgsEndpointConfig(args));
1087
+ return AcceptConnectedEndpoint(std::move(endpoint));
1088
+ }
1089
+
1090
+ void PassiveListenerImpl::ListenerDestroyed() {
1091
+ MutexLock lock(&mu_);
1092
+ listener_ = nullptr;
1093
+ }
1094
+
1095
+ } // namespace experimental
1050
1096
  } // namespace grpc_core
1051
1097
 
1052
1098
  int grpc_server_add_http2_port(grpc_server* server, const char* addr,
@@ -1094,7 +1140,7 @@ int grpc_server_add_http2_port(grpc_server* server, const char* addr,
1094
1140
  done:
1095
1141
  sc.reset(DEBUG_LOCATION, "server");
1096
1142
  if (!err.ok()) {
1097
- gpr_log(GPR_ERROR, "%s", grpc_core::StatusToString(err).c_str());
1143
+ LOG(ERROR) << grpc_core::StatusToString(err);
1098
1144
  }
1099
1145
  return port_num;
1100
1146
  }
@@ -1105,7 +1151,7 @@ void grpc_server_add_channel_from_fd(grpc_server* server, int fd,
1105
1151
  // For now, we only support insecure server credentials
1106
1152
  if (creds == nullptr ||
1107
1153
  creds->type() != grpc_core::InsecureServerCredentials::Type()) {
1108
- gpr_log(GPR_ERROR, "Failed to create channel due to invalid creds");
1154
+ LOG(ERROR) << "Failed to create channel due to invalid creds";
1109
1155
  return;
1110
1156
  }
1111
1157
  grpc_core::ExecCtx exec_ctx;
@@ -1119,19 +1165,20 @@ void grpc_server_add_channel_from_fd(grpc_server* server, int fd,
1119
1165
  grpc_fd_create(fd, name.c_str(), true),
1120
1166
  grpc_event_engine::experimental::ChannelArgsEndpointConfig(server_args),
1121
1167
  name);
1168
+ for (grpc_pollset* pollset : core_server->pollsets()) {
1169
+ grpc_endpoint_add_to_pollset(server_endpoint, pollset);
1170
+ }
1122
1171
  grpc_core::Transport* transport = grpc_create_chttp2_transport(
1123
1172
  server_args, server_endpoint, false // is_client
1124
1173
  );
1125
1174
  grpc_error_handle error =
1126
1175
  core_server->SetupTransport(transport, nullptr, server_args, nullptr);
1127
1176
  if (error.ok()) {
1128
- for (grpc_pollset* pollset : core_server->pollsets()) {
1129
- grpc_endpoint_add_to_pollset(server_endpoint, pollset);
1130
- }
1131
- grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
1177
+ grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr,
1178
+ nullptr);
1132
1179
  } else {
1133
- gpr_log(GPR_ERROR, "Failed to create channel: %s",
1134
- grpc_core::StatusToString(error).c_str());
1180
+ LOG(ERROR) << "Failed to create channel: "
1181
+ << grpc_core::StatusToString(error);
1135
1182
  transport->Orphan();
1136
1183
  }
1137
1184
  }
@@ -1144,3 +1191,31 @@ void grpc_server_add_channel_from_fd(grpc_server* /* server */, int /* fd */,
1144
1191
  }
1145
1192
 
1146
1193
  #endif // GPR_SUPPORT_CHANNELS_FROM_FD
1194
+
1195
+ absl::Status grpc_server_add_passive_listener(
1196
+ grpc_core::Server* server, grpc_server_credentials* credentials,
1197
+ std::shared_ptr<grpc_core::experimental::PassiveListenerImpl>
1198
+ passive_listener) {
1199
+ grpc_core::ExecCtx exec_ctx;
1200
+ GRPC_API_TRACE("grpc_server_add_passive_listener(server=%p, credentials=%p)",
1201
+ 2, (server, credentials));
1202
+ // Create security context.
1203
+ if (credentials == nullptr) {
1204
+ return absl::UnavailableError(
1205
+ "No credentials specified for passive listener");
1206
+ }
1207
+ auto sc = credentials->create_security_connector(grpc_core::ChannelArgs());
1208
+ if (sc == nullptr) {
1209
+ return absl::UnavailableError(
1210
+ absl::StrCat("Unable to create secure server with credentials of type ",
1211
+ credentials->type().name()));
1212
+ }
1213
+ auto args = server->channel_args()
1214
+ .SetObject(credentials->Ref())
1215
+ .SetObject(std::move(sc));
1216
+ passive_listener->listener_ =
1217
+ grpc_core::Chttp2ServerListener::CreateForPassiveListener(
1218
+ server, args, passive_listener);
1219
+ passive_listener->server_ = server->Ref();
1220
+ return absl::OkStatus();
1221
+ }