grpc 1.55.3 → 1.56.0.pre3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -18,13 +18,12 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <utility>
22
-
23
21
  #include <grpc/support/atm.h>
24
22
 
25
23
  // FIXME: "posix" files shouldn't be depending on _GNU_SOURCE
26
24
  #ifndef _GNU_SOURCE
27
25
  #define _GNU_SOURCE
26
+ #include <grpc/event_engine/event_engine.h>
28
27
  #endif
29
28
 
30
29
  #include "src/core/lib/iomgr/port.h"
@@ -49,7 +48,6 @@
49
48
 
50
49
  #include <grpc/byte_buffer.h>
51
50
  #include <grpc/event_engine/endpoint_config.h>
52
- #include <grpc/event_engine/event_engine.h>
53
51
  #include <grpc/support/alloc.h>
54
52
  #include <grpc/support/log.h>
55
53
  #include <grpc/support/sync.h>
@@ -80,8 +78,6 @@
80
78
  #include "src/core/lib/transport/error_utils.h"
81
79
 
82
80
  static std::atomic<int64_t> num_dropped_connections{0};
83
- static constexpr grpc_core::Duration kRetryAcceptWaitTime{
84
- grpc_core::Duration::Seconds(1)};
85
81
 
86
82
  using ::grpc_event_engine::experimental::EndpointConfig;
87
83
  using ::grpc_event_engine::experimental::EventEngine;
@@ -93,99 +89,118 @@ using ::grpc_event_engine::experimental::SliceBuffer;
93
89
  static grpc_error_handle CreateEventEngineListener(
94
90
  grpc_tcp_server* s, grpc_closure* shutdown_complete,
95
91
  const EndpointConfig& config, grpc_tcp_server** server) {
96
- PosixEventEngineWithFdSupport::PosixAcceptCallback accept_cb =
97
- [s](int listener_fd, std::unique_ptr<EventEngine::Endpoint> ep,
98
- bool is_external, MemoryAllocator /*allocator*/,
99
- SliceBuffer* pending_data) {
100
- grpc_core::ApplicationCallbackExecCtx app_ctx;
101
- grpc_core::ExecCtx exec_ctx;
102
- grpc_tcp_server_acceptor* acceptor =
103
- static_cast<grpc_tcp_server_acceptor*>(
104
- gpr_malloc(sizeof(*acceptor)));
105
- acceptor->from_server = s;
106
- acceptor->port_index = -1;
107
- acceptor->fd_index = -1;
108
- if (!is_external) {
109
- auto it = s->listen_fd_to_index_map.find(listener_fd);
110
- if (it != s->listen_fd_to_index_map.end()) {
111
- acceptor->port_index = std::get<0>(it->second);
112
- acceptor->fd_index = std::get<1>(it->second);
92
+ absl::StatusOr<std::unique_ptr<EventEngine::Listener>> listener;
93
+ if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
94
+ PosixEventEngineWithFdSupport::PosixAcceptCallback accept_cb =
95
+ [s](int listener_fd, std::unique_ptr<EventEngine::Endpoint> ep,
96
+ bool is_external, MemoryAllocator /*allocator*/,
97
+ SliceBuffer* pending_data) {
98
+ grpc_core::ApplicationCallbackExecCtx app_ctx;
99
+ grpc_core::ExecCtx exec_ctx;
100
+ grpc_tcp_server_acceptor* acceptor =
101
+ static_cast<grpc_tcp_server_acceptor*>(
102
+ gpr_malloc(sizeof(*acceptor)));
103
+ acceptor->from_server = s;
104
+ acceptor->port_index = -1;
105
+ acceptor->fd_index = -1;
106
+ if (!is_external) {
107
+ auto it = s->listen_fd_to_index_map.find(listener_fd);
108
+ if (it != s->listen_fd_to_index_map.end()) {
109
+ acceptor->port_index = std::get<0>(it->second);
110
+ acceptor->fd_index = std::get<1>(it->second);
111
+ }
112
+ } else {
113
+ // External connection handling.
114
+ grpc_resolved_address addr;
115
+ memset(&addr, 0, sizeof(addr));
116
+ addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
117
+ // Get the fd of the socket connected to peer.
118
+ int fd = reinterpret_cast<grpc_event_engine::experimental::
119
+ PosixEndpointWithFdSupport*>(ep.get())
120
+ ->GetWrappedFd();
121
+ if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
122
+ &(addr.len)) < 0) {
123
+ gpr_log(GPR_ERROR, "Failed getpeername: %s",
124
+ grpc_core::StrError(errno).c_str());
125
+ close(fd);
126
+ return;
127
+ }
128
+ (void)grpc_set_socket_no_sigpipe_if_possible(fd);
129
+ auto addr_uri = grpc_sockaddr_to_uri(&addr);
130
+ if (!addr_uri.ok()) {
131
+ gpr_log(GPR_ERROR, "Invalid address: %s",
132
+ addr_uri.status().ToString().c_str());
133
+ return;
134
+ }
135
+ if (grpc_tcp_trace.enabled()) {
136
+ gpr_log(GPR_INFO,
137
+ "SERVER_CONNECT: incoming external connection: %s",
138
+ addr_uri->c_str());
139
+ }
113
140
  }
114
- } else {
115
- // External connection handling.
116
- grpc_resolved_address addr;
117
- memset(&addr, 0, sizeof(addr));
118
- addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
119
- // Get the fd of the socket connected to peer.
120
- int fd =
121
- reinterpret_cast<
122
- grpc_event_engine::experimental::PosixEndpointWithFdSupport*>(
123
- ep.get())
124
- ->GetWrappedFd();
125
- if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
126
- &(addr.len)) < 0) {
127
- gpr_log(GPR_ERROR, "Failed getpeername: %s",
128
- grpc_core::StrError(errno).c_str());
129
- close(fd);
130
- return;
141
+ grpc_pollset* read_notifier_pollset =
142
+ (*(s->pollsets))[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
143
+ &s->next_pollset_to_assign, 1)) %
144
+ s->pollsets->size()];
145
+ acceptor->external_connection = is_external;
146
+ acceptor->listener_fd = listener_fd;
147
+ grpc_byte_buffer* buf = nullptr;
148
+ if (pending_data != nullptr && pending_data->Length() > 0) {
149
+ buf = grpc_raw_byte_buffer_create(nullptr, 0);
150
+ grpc_slice_buffer_swap(&buf->data.raw.slice_buffer,
151
+ pending_data->c_slice_buffer());
152
+ pending_data->Clear();
131
153
  }
132
- (void)grpc_set_socket_no_sigpipe_if_possible(fd);
133
- auto addr_uri = grpc_sockaddr_to_uri(&addr);
134
- if (!addr_uri.ok()) {
135
- gpr_log(GPR_ERROR, "Invalid address: %s",
136
- addr_uri.status().ToString().c_str());
137
- return;
138
- }
139
- if (grpc_tcp_trace.enabled()) {
140
- gpr_log(GPR_INFO,
141
- "SERVER_CONNECT: incoming external connection: %s",
142
- addr_uri->c_str());
143
- }
144
- }
145
- grpc_pollset* read_notifier_pollset =
146
- (*(s->pollsets))[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
147
- &s->next_pollset_to_assign, 1)) %
148
- s->pollsets->size()];
149
- acceptor->external_connection = is_external;
150
- acceptor->listener_fd = listener_fd;
151
- grpc_byte_buffer* buf = nullptr;
152
- if (pending_data != nullptr && pending_data->Length() > 0) {
153
- buf = grpc_raw_byte_buffer_create(nullptr, 0);
154
- grpc_slice_buffer_swap(&buf->data.raw.slice_buffer,
155
- pending_data->c_slice_buffer());
156
- pending_data->Clear();
157
- }
158
- acceptor->pending_data = buf;
159
- s->on_accept_cb(
160
- s->on_accept_cb_arg,
161
- grpc_event_engine::experimental::grpc_event_engine_endpoint_create(
162
- std::move(ep)),
163
- read_notifier_pollset, acceptor);
164
- };
165
- auto on_shutdown_complete_cb =
166
- grpc_event_engine::experimental::GrpcClosureToStatusCallback(
167
- shutdown_complete);
168
- PosixEventEngineWithFdSupport* engine_ptr =
169
- reinterpret_cast<PosixEventEngineWithFdSupport*>(
170
- config.GetVoidPointer(GRPC_INTERNAL_ARG_EVENT_ENGINE));
171
- // Keeps the engine alive for some tests that have not otherwise instantiated
172
- // an EventEngine
173
- std::shared_ptr<EventEngine> keeper;
174
- if (engine_ptr == nullptr) {
175
- keeper = grpc_event_engine::experimental::GetDefaultEventEngine();
176
- engine_ptr = reinterpret_cast<PosixEventEngineWithFdSupport*>(keeper.get());
177
- }
178
- auto listener = engine_ptr->CreatePosixListener(
179
- std::move(accept_cb),
180
- [s, shutdown_complete](absl::Status status) {
181
- grpc_event_engine::experimental::RunEventEngineClosure(
182
- shutdown_complete, absl_status_to_grpc_error(status));
183
- delete s->fd_handler;
184
- delete s;
185
- },
186
- config,
187
- std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
188
- s->memory_quota));
154
+ acceptor->pending_data = buf;
155
+ s->on_accept_cb(s->on_accept_cb_arg,
156
+ grpc_event_engine::experimental::
157
+ grpc_event_engine_endpoint_create(std::move(ep)),
158
+ read_notifier_pollset, acceptor);
159
+ };
160
+ PosixEventEngineWithFdSupport* engine_ptr =
161
+ reinterpret_cast<PosixEventEngineWithFdSupport*>(
162
+ config.GetVoidPointer(GRPC_INTERNAL_ARG_EVENT_ENGINE));
163
+ // Keeps the engine alive for some tests that have not otherwise
164
+ // instantiated an EventEngine
165
+ std::shared_ptr<EventEngine> keeper;
166
+ if (engine_ptr == nullptr) {
167
+ keeper = grpc_event_engine::experimental::GetDefaultEventEngine();
168
+ engine_ptr =
169
+ reinterpret_cast<PosixEventEngineWithFdSupport*>(keeper.get());
170
+ }
171
+ listener = engine_ptr->CreatePosixListener(
172
+ std::move(accept_cb),
173
+ [s, shutdown_complete](absl::Status status) {
174
+ grpc_event_engine::experimental::RunEventEngineClosure(
175
+ shutdown_complete, absl_status_to_grpc_error(status));
176
+ delete s->fd_handler;
177
+ delete s;
178
+ },
179
+ config,
180
+ std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
181
+ s->memory_quota));
182
+ } else {
183
+ EventEngine::Listener::AcceptCallback accept_cb =
184
+ [s](std::unique_ptr<EventEngine::Endpoint> ep, MemoryAllocator) {
185
+ s->on_accept_cb(s->on_accept_cb_arg,
186
+ grpc_event_engine::experimental::
187
+ grpc_event_engine_endpoint_create(std::move(ep)),
188
+ nullptr, nullptr);
189
+ };
190
+ auto ee = grpc_event_engine::experimental::GetDefaultEventEngine();
191
+ listener = ee->CreateListener(
192
+ std::move(accept_cb),
193
+ [s, ee, shutdown_complete](absl::Status status) {
194
+ GPR_ASSERT(gpr_atm_no_barrier_load(&s->refs.count) == 0);
195
+ grpc_event_engine::experimental::RunEventEngineClosure(
196
+ shutdown_complete, absl_status_to_grpc_error(status));
197
+ delete s->fd_handler;
198
+ delete s;
199
+ },
200
+ config,
201
+ std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
202
+ s->memory_quota));
203
+ }
189
204
  if (!listener.ok()) {
190
205
  delete s;
191
206
  *server = nullptr;
@@ -346,38 +361,22 @@ static void on_read(void* arg, grpc_error_handle err) {
346
361
  if (fd < 0) {
347
362
  if (errno == EINTR) {
348
363
  continue;
349
- }
350
- // When the process runs out of fds, accept4() returns EMFILE. When this
351
- // happens, the connection is left in the accept queue until either a
352
- // read event triggers the on_read callback, or time has passed and the
353
- // accept should be re-tried regardless. This callback is not cancelled,
354
- // so a spurious wakeup may occur even when there's nothing to accept.
355
- // This is not a performant code path, but if an fd limit has been
356
- // reached, the system is likely in an unhappy state regardless.
357
- if (errno == EMFILE) {
358
- GRPC_LOG_EVERY_N_SEC(1, GPR_ERROR, "%s",
359
- "File descriptor limit reached. Retrying.");
360
- grpc_fd_notify_on_read(sp->emfd, &sp->read_closure);
361
- if (gpr_atm_full_xchg(&sp->retry_timer_armed, true)) return;
362
- grpc_timer_init(&sp->retry_timer,
363
- grpc_core::Timestamp::Now() + kRetryAcceptWaitTime,
364
- &sp->retry_closure);
365
- return;
366
- }
367
- if (errno == EAGAIN || errno == ECONNABORTED || errno == EWOULDBLOCK) {
364
+ } else if (errno == EAGAIN || errno == ECONNABORTED ||
365
+ errno == EWOULDBLOCK) {
368
366
  grpc_fd_notify_on_read(sp->emfd, &sp->read_closure);
369
367
  return;
370
- }
371
- gpr_mu_lock(&sp->server->mu);
372
- if (!sp->server->shutdown_listeners) {
373
- gpr_log(GPR_ERROR, "Failed accept4: %s",
374
- grpc_core::StrError(errno).c_str());
375
368
  } else {
376
- // if we have shutdown listeners, accept4 could fail, and we
377
- // needn't notify users
369
+ gpr_mu_lock(&sp->server->mu);
370
+ if (!sp->server->shutdown_listeners) {
371
+ gpr_log(GPR_ERROR, "Failed accept4: %s",
372
+ grpc_core::StrError(errno).c_str());
373
+ } else {
374
+ // if we have shutdown listeners, accept4 could fail, and we
375
+ // needn't notify users
376
+ }
377
+ gpr_mu_unlock(&sp->server->mu);
378
+ goto error;
378
379
  }
379
- gpr_mu_unlock(&sp->server->mu);
380
- goto error;
381
380
  }
382
381
 
383
382
  if (sp->server->memory_quota->IsMemoryPressureHigh()) {
@@ -570,7 +569,6 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
570
569
  sp->port_index = listener->port_index;
571
570
  sp->fd_index = listener->fd_index + count - i;
572
571
  GPR_ASSERT(sp->emfd);
573
- grpc_tcp_server_listener_initialize_retry_timer(sp);
574
572
  while (listener->server->tail->next != nullptr) {
575
573
  listener->server->tail = listener->server->tail->next;
576
574
  }
@@ -589,16 +587,27 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
589
587
  return absl::UnknownError("Server already shutdown");
590
588
  }
591
589
  int fd_index = 0;
592
- auto port = s->ee_listener->BindWithFd(
593
- grpc_event_engine::experimental::CreateResolvedAddress(*addr),
594
- [s, &fd_index](absl::StatusOr<int> listen_fd) {
595
- if (!listen_fd.ok()) {
596
- return;
597
- }
598
- GPR_DEBUG_ASSERT(*listen_fd > 0);
599
- s->listen_fd_to_index_map.insert_or_assign(
600
- *listen_fd, std::make_tuple(s->n_bind_ports, fd_index++));
601
- });
590
+ absl::StatusOr<int> port;
591
+ if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
592
+ port =
593
+ static_cast<
594
+ grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
595
+ s->ee_listener.get())
596
+ ->BindWithFd(
597
+ grpc_event_engine::experimental::CreateResolvedAddress(*addr),
598
+ [s, &fd_index](absl::StatusOr<int> listen_fd) {
599
+ if (!listen_fd.ok()) {
600
+ return;
601
+ }
602
+ GPR_DEBUG_ASSERT(*listen_fd > 0);
603
+ s->listen_fd_to_index_map.insert_or_assign(
604
+ *listen_fd,
605
+ std::make_tuple(s->n_bind_ports, fd_index++));
606
+ });
607
+ } else {
608
+ port = s->ee_listener->Bind(
609
+ grpc_event_engine::experimental::CreateResolvedAddress(*addr));
610
+ }
602
611
  if (port.ok()) {
603
612
  s->n_bind_ports++;
604
613
  *out_port = *port;
@@ -798,13 +807,16 @@ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
798
807
  gpr_mu_lock(&s->mu);
799
808
  s->shutdown_listeners = true;
800
809
  if (grpc_event_engine::experimental::UseEventEngineListener()) {
801
- s->ee_listener->ShutdownListeningFds();
810
+ if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
811
+ static_cast<grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
812
+ s->ee_listener.get())
813
+ ->ShutdownListeningFds();
814
+ }
802
815
  }
803
816
  /* shutdown all fd's */
804
817
  if (s->active_ports) {
805
818
  grpc_tcp_listener* sp;
806
819
  for (sp = s->head; sp; sp = sp->next) {
807
- grpc_timer_cancel(&sp->retry_timer);
808
820
  grpc_fd_shutdown(sp->emfd, GRPC_ERROR_CREATE("Server shutdown"));
809
821
  }
810
822
  }
@@ -829,15 +841,19 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
829
841
  // TODO(yangg) resolve duplicate code with on_read
830
842
  void Handle(int listener_fd, int fd, grpc_byte_buffer* buf) override {
831
843
  if (grpc_event_engine::experimental::UseEventEngineListener()) {
844
+ GPR_ASSERT(grpc_event_engine::experimental::EventEngineSupportsFd());
832
845
  grpc_event_engine::experimental::SliceBuffer pending_data;
833
846
  if (buf != nullptr) {
834
847
  pending_data =
835
848
  grpc_event_engine::experimental::SliceBuffer::TakeCSliceBuffer(
836
849
  buf->data.raw.slice_buffer);
837
850
  }
838
- GPR_ASSERT(GRPC_LOG_IF_ERROR("listener_handle_external_connection",
839
- s_->ee_listener->HandleExternalConnection(
840
- listener_fd, fd, &pending_data)));
851
+ GPR_ASSERT(GRPC_LOG_IF_ERROR(
852
+ "listener_handle_external_connection",
853
+ static_cast<
854
+ grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
855
+ s_->ee_listener.get())
856
+ ->HandleExternalConnection(listener_fd, fd, &pending_data)));
841
857
  return;
842
858
  }
843
859
  grpc_pollset* read_notifier_pollset;
@@ -30,7 +30,6 @@
30
30
  #include "src/core/lib/iomgr/resolve_address.h"
31
31
  #include "src/core/lib/iomgr/socket_utils_posix.h"
32
32
  #include "src/core/lib/iomgr/tcp_server.h"
33
- #include "src/core/lib/iomgr/timer.h"
34
33
  #include "src/core/lib/resource_quota/memory_quota.h"
35
34
 
36
35
  // one listening port
@@ -53,11 +52,6 @@ typedef struct grpc_tcp_listener {
53
52
  // identified while iterating through 'next'.
54
53
  struct grpc_tcp_listener* sibling;
55
54
  int is_sibling;
56
- // If an accept4() call fails, a timer is started to drain the accept queue in
57
- // case no further connection attempts reach the gRPC server.
58
- grpc_closure retry_closure;
59
- grpc_timer retry_timer;
60
- gpr_atm retry_timer_armed;
61
55
  } grpc_tcp_listener;
62
56
 
63
57
  // the overall server
@@ -113,7 +107,7 @@ struct grpc_tcp_server {
113
107
  /* used when event engine based servers are enabled */
114
108
  int n_bind_ports = 0;
115
109
  absl::flat_hash_map<int, std::tuple<int, int>> listen_fd_to_index_map;
116
- std::unique_ptr<grpc_event_engine::experimental::PosixListenerWithFdSupport>
110
+ std::unique_ptr<grpc_event_engine::experimental::EventEngine::Listener>
117
111
  ee_listener = nullptr;
118
112
  /* used to store a pre-allocated FD assigned to a socket */
119
113
  int pre_allocated_fd;
@@ -145,10 +139,4 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
145
139
  // Ruturn true if the platform supports ifaddrs
146
140
  bool grpc_tcp_server_have_ifaddrs(void);
147
141
 
148
- // Initialize (but don't start) the timer and callback to retry accept4() on a
149
- // listening socket after file descriptors have been exhausted. This must be
150
- // called when creating a new listener.
151
- void grpc_tcp_server_listener_initialize_retry_timer(
152
- grpc_tcp_listener* listener);
153
-
154
142
  #endif // GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
@@ -18,8 +18,6 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <grpc/support/atm.h>
22
-
23
21
  #include "src/core/lib/iomgr/port.h"
24
22
 
25
23
  #ifdef GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
@@ -83,24 +81,6 @@ static int get_max_accept_queue_size(void) {
83
81
  return s_max_accept_queue_size;
84
82
  }
85
83
 
86
- static void listener_retry_timer_cb(void* arg, grpc_error_handle err) {
87
- // Do nothing if cancelled.
88
- if (!err.ok()) return;
89
- grpc_tcp_listener* listener = static_cast<grpc_tcp_listener*>(arg);
90
- gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
91
- if (!grpc_fd_is_shutdown(listener->emfd)) {
92
- grpc_fd_set_readable(listener->emfd);
93
- }
94
- }
95
-
96
- void grpc_tcp_server_listener_initialize_retry_timer(
97
- grpc_tcp_listener* listener) {
98
- gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
99
- grpc_timer_init_unset(&listener->retry_timer);
100
- GRPC_CLOSURE_INIT(&listener->retry_closure, listener_retry_timer_cb, listener,
101
- grpc_schedule_on_exec_ctx);
102
- }
103
-
104
84
  static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
105
85
  const grpc_resolved_address* addr,
106
86
  unsigned port_index,
@@ -132,7 +112,6 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
132
112
  sp->server = s;
133
113
  sp->fd = fd;
134
114
  sp->emfd = grpc_fd_create(fd, name.c_str(), true);
135
- grpc_tcp_server_listener_initialize_retry_timer(sp);
136
115
 
137
116
  // Check and set fd as prellocated
138
117
  if (grpc_tcp_server_pre_allocated_fd(s) == fd) {
@@ -634,7 +634,7 @@ static grpc_error_handle event_engine_create(grpc_closure* shutdown_complete,
634
634
  engine_ptr->poller(), std::move(accept_cb), std::move(on_shutdown),
635
635
  std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
636
636
  resource_quota->memory_quota()),
637
- engine_ptr->shared_from_this(), engine_ptr->executor(), config);
637
+ engine_ptr->shared_from_this(), engine_ptr->thread_pool(), config);
638
638
  s->active_ports = -1;
639
639
  s->on_accept_cb = [](void* /* arg */, grpc_endpoint* /* ep */,
640
640
  grpc_pollset* /* accepting_pollset */,
@@ -19,175 +19,11 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include <map>
23
- #include <string>
24
- #include <utility>
25
- #include <vector>
26
-
27
- #include "absl/types/variant.h"
22
+ #include <grpc/support/json.h>
28
23
 
29
24
  namespace grpc_core {
30
25
 
31
- // A JSON value, which can be any one of object, array, string,
32
- // number, true, false, or null.
33
- class Json {
34
- public:
35
- // TODO(roth): Currently, numbers are stored internally as strings,
36
- // which makes the API a bit cumbersome to use. When we have time,
37
- // consider whether there's a better alternative (e.g., maybe storing
38
- // each numeric type as the native C++ type and automatically converting
39
- // to string as needed).
40
- enum class Type { kNull, kTrue, kFalse, kNumber, kString, kObject, kArray };
41
-
42
- using Object = std::map<std::string, Json>;
43
- using Array = std::vector<Json>;
44
-
45
- Json() = default;
46
-
47
- // Copyable.
48
- Json(const Json& other) = default;
49
- Json& operator=(const Json& other) = default;
50
-
51
- // Moveable.
52
- Json(Json&& other) noexcept : value_(std::move(other.value_)) {
53
- other.value_ = absl::monostate();
54
- }
55
- Json& operator=(Json&& other) noexcept {
56
- value_ = std::move(other.value_);
57
- other.value_ = absl::monostate();
58
- return *this;
59
- }
60
-
61
- // Construct from copying a string.
62
- // If is_number is true, the type will be kNumber instead of kString.
63
- // NOLINTNEXTLINE(google-explicit-constructor)
64
- Json(const std::string& string, bool is_number = false)
65
- : value_(is_number ? Value(NumberValue{string}) : Value(string)) {}
66
- Json& operator=(const std::string& string) {
67
- value_ = string;
68
- return *this;
69
- }
70
-
71
- // Same thing for C-style strings, both const and mutable.
72
- // NOLINTNEXTLINE(google-explicit-constructor)
73
- Json(const char* string, bool is_number = false)
74
- : Json(std::string(string), is_number) {}
75
- Json& operator=(const char* string) {
76
- *this = std::string(string);
77
- return *this;
78
- }
79
- // NOLINTNEXTLINE(google-explicit-constructor)
80
- Json(char* string, bool is_number = false)
81
- : Json(std::string(string), is_number) {}
82
- Json& operator=(char* string) {
83
- *this = std::string(string);
84
- return *this;
85
- }
86
-
87
- // Construct by moving a string.
88
- // NOLINTNEXTLINE(google-explicit-constructor)
89
- Json(std::string&& string) : value_(Value(std::move(string))) {}
90
- Json& operator=(std::string&& string) {
91
- value_ = Value(std::move(string));
92
- return *this;
93
- }
94
-
95
- // Construct from bool.
96
- // NOLINTNEXTLINE(google-explicit-constructor)
97
- Json(bool b) : value_(b) {}
98
- Json& operator=(bool b) {
99
- value_ = b;
100
- return *this;
101
- }
102
-
103
- // Construct from any numeric type.
104
- template <typename NumericType>
105
- // NOLINTNEXTLINE(google-explicit-constructor)
106
- Json(NumericType number) : value_(NumberValue{std::to_string(number)}) {}
107
- template <typename NumericType>
108
- Json& operator=(NumericType number) {
109
- value_ = NumberValue{std::to_string(number)};
110
- return *this;
111
- }
112
-
113
- // Construct by copying object.
114
- // NOLINTNEXTLINE(google-explicit-constructor)
115
- Json(const Object& object) : value_(object) {}
116
- Json& operator=(const Object& object) {
117
- value_ = object;
118
- return *this;
119
- }
120
-
121
- // Construct by moving object.
122
- // NOLINTNEXTLINE(google-explicit-constructor)
123
- Json(Object&& object) : value_(std::move(object)) {}
124
- Json& operator=(Object&& object) {
125
- value_ = std::move(object);
126
- return *this;
127
- }
128
-
129
- // Construct by copying array.
130
- // NOLINTNEXTLINE(google-explicit-constructor)
131
- Json(const Array& array) : value_(array) {}
132
- Json& operator=(const Array& array) {
133
- value_ = array;
134
- return *this;
135
- }
136
-
137
- // Construct by moving array.
138
- // NOLINTNEXTLINE(google-explicit-constructor)
139
- Json(Array&& array) : value_(std::move(array)) {}
140
- Json& operator=(Array&& array) {
141
- value_ = std::move(array);
142
- return *this;
143
- }
144
-
145
- // Returns the JSON type.
146
- Type type() const {
147
- struct ValueFunctor {
148
- Json::Type operator()(const absl::monostate&) { return Type::kNull; }
149
- Json::Type operator()(bool value) {
150
- return value ? Type::kTrue : Type::kFalse;
151
- }
152
- Json::Type operator()(const NumberValue&) { return Type::kNumber; }
153
- Json::Type operator()(const std::string&) { return Type::kString; }
154
- Json::Type operator()(const Object&) { return Type::kObject; }
155
- Json::Type operator()(const Array&) { return Type::kArray; }
156
- };
157
- return absl::visit(ValueFunctor(), value_);
158
- }
159
-
160
- // Accessor methods.
161
- const std::string& string() const {
162
- const NumberValue* num = absl::get_if<NumberValue>(&value_);
163
- if (num != nullptr) return num->value;
164
- return absl::get<std::string>(value_);
165
- }
166
- const Object& object() const { return absl::get<Object>(value_); }
167
- const Array& array() const { return absl::get<Array>(value_); }
168
-
169
- bool operator==(const Json& other) const { return value_ == other.value_; }
170
- bool operator!=(const Json& other) const { return !(*this == other); }
171
-
172
- private:
173
- struct NumberValue {
174
- std::string value;
175
-
176
- bool operator==(const NumberValue& other) const {
177
- return value == other.value;
178
- }
179
- };
180
- using Value = absl::variant<absl::monostate, // kNull
181
- bool, // kTrue or kFalse
182
- NumberValue, // kNumber
183
- std::string, // kString
184
- Object, // kObject
185
- Array>; // kArray
186
-
187
- explicit Json(Value value) : value_(std::move(value)) {}
188
-
189
- Value value_;
190
- };
26
+ using Json = experimental::Json;
191
27
 
192
28
  } // namespace grpc_core
193
29