grpc 1.55.0 → 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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  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 +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -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/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +50 -14
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -28,7 +28,6 @@
28
28
  #include "absl/functional/any_invocable.h"
29
29
  #include "absl/status/status.h"
30
30
  #include "absl/status/statusor.h"
31
- #include "absl/synchronization/mutex.h"
32
31
 
33
32
  #include <grpc/event_engine/endpoint_config.h>
34
33
  #include <grpc/event_engine/event_engine.h>
@@ -36,6 +35,7 @@
36
35
  #include <grpc/event_engine/slice_buffer.h>
37
36
 
38
37
  #include "src/core/lib/event_engine/posix.h"
38
+ #include "src/core/lib/gprpp/sync.h"
39
39
  #include "src/core/lib/iomgr/port.h"
40
40
 
41
41
  #ifdef GRPC_POSIX_SOCKET_TCP
@@ -79,7 +79,7 @@ class PosixEngineListenerImpl
79
79
  // This class represents accepting for one bind fd belonging to the listener.
80
80
  // Each AsyncConnectionAcceptor takes a ref to the parent
81
81
  // PosixEngineListenerImpl object. So the PosixEngineListenerImpl can be
82
- // deleted only after all AsyncConnectionAcceptor's get destroyed.
82
+ // deleted only after all AsyncConnectionAcceptors get destroyed.
83
83
  class AsyncConnectionAcceptor {
84
84
  public:
85
85
  AsyncConnectionAcceptor(std::shared_ptr<EventEngine> engine,
@@ -143,12 +143,11 @@ class PosixEngineListenerImpl
143
143
  absl::StatusOr<ListenerSocket> Find(
144
144
  const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
145
145
  addr) override {
146
- for (auto acceptor = acceptors_.begin(); acceptor != acceptors_.end();
147
- ++acceptor) {
148
- if ((*acceptor)->Socket().addr.size() == addr.size() &&
149
- memcmp((*acceptor)->Socket().addr.address(), addr.address(),
146
+ for (auto* acceptor : acceptors_) {
147
+ if (acceptor->Socket().addr.size() == addr.size() &&
148
+ memcmp(acceptor->Socket().addr.address(), addr.address(),
150
149
  addr.size()) == 0) {
151
- return (*acceptor)->Socket();
150
+ return acceptor->Socket();
152
151
  }
153
152
  }
154
153
  return absl::NotFoundError("Socket not found!");
@@ -172,7 +171,7 @@ class PosixEngineListenerImpl
172
171
  friend class AsyncConnectionAcceptor;
173
172
  // The mutex ensures thread safety when multiple threads try to call Bind
174
173
  // and Start in parallel.
175
- absl::Mutex mu_;
174
+ grpc_core::Mutex mu_;
176
175
  PosixEventPoller* poller_;
177
176
  PosixTcpOptions options_;
178
177
  std::shared_ptr<EventEngine> engine_;
@@ -33,7 +33,7 @@
33
33
 
34
34
  #include "src/core/lib/event_engine/forkable.h"
35
35
  #include "src/core/lib/event_engine/posix_engine/timer.h"
36
- #include "src/core/lib/event_engine/thread_pool.h"
36
+ #include "src/core/lib/event_engine/thread_pool/thread_pool.h"
37
37
  #include "src/core/lib/gprpp/notification.h"
38
38
  #include "src/core/lib/gprpp/sync.h"
39
39
  #include "src/core/lib/gprpp/thd.h"
@@ -22,6 +22,12 @@
22
22
  namespace grpc_event_engine {
23
23
  namespace experimental {
24
24
 
25
+ #if defined(GRPC_POSIX_SOCKET_TCP) && !defined(GRPC_CFSTREAM)
26
+ bool g_event_engine_supports_fd = true;
27
+ #else
28
+ bool g_event_engine_supports_fd = false;
29
+ #endif
30
+
25
31
  bool UseEventEngineClient() {
26
32
  // TODO(hork, eryu): Adjust the ifdefs accordingly when event engines become
27
33
  // available for other platforms.
@@ -48,7 +54,7 @@ bool UseEventEngineListener() {
48
54
 
49
55
  bool EventEngineSupportsFd() {
50
56
  #if defined(GRPC_POSIX_SOCKET_TCP) && !defined(GRPC_CFSTREAM)
51
- return true;
57
+ return g_event_engine_supports_fd;
52
58
  #else
53
59
  return false;
54
60
  #endif
@@ -18,7 +18,7 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "src/core/lib/event_engine/thread_pool.h"
21
+ #include "src/core/lib/event_engine/thread_pool/original_thread_pool.h"
22
22
 
23
23
  #include <atomic>
24
24
  #include <memory>
@@ -37,7 +37,7 @@
37
37
  namespace grpc_event_engine {
38
38
  namespace experimental {
39
39
 
40
- void ThreadPool::StartThread(StatePtr state, StartThreadReason reason) {
40
+ void OriginalThreadPool::StartThread(StatePtr state, StartThreadReason reason) {
41
41
  state->thread_count.Add();
42
42
  const auto now = grpc_core::Timestamp::Now();
43
43
  switch (reason) {
@@ -95,13 +95,13 @@ void ThreadPool::StartThread(StatePtr state, StartThreadReason reason) {
95
95
  .Start();
96
96
  }
97
97
 
98
- void ThreadPool::ThreadFunc(StatePtr state) {
98
+ void OriginalThreadPool::ThreadFunc(StatePtr state) {
99
99
  while (state->queue.Step()) {
100
100
  }
101
101
  state->thread_count.Remove();
102
102
  }
103
103
 
104
- bool ThreadPool::Queue::Step() {
104
+ bool OriginalThreadPool::Queue::Step() {
105
105
  grpc_core::ReleasableMutexLock lock(&queue_mu_);
106
106
  // Wait until work is available or we are shutting down.
107
107
  while (!shutdown_ && !forking_ && callbacks_.empty()) {
@@ -130,17 +130,19 @@ bool ThreadPool::Queue::Step() {
130
130
  return true;
131
131
  }
132
132
 
133
- ThreadPool::ThreadPool() {
134
- for (unsigned i = 0; i < reserve_threads_; i++) {
133
+ OriginalThreadPool::OriginalThreadPool(size_t reserve_threads)
134
+ : reserve_threads_(reserve_threads),
135
+ state_(std::make_shared<State>(reserve_threads)) {
136
+ for (unsigned i = 0; i < reserve_threads; i++) {
135
137
  StartThread(state_, StartThreadReason::kInitialPool);
136
138
  }
137
139
  }
138
140
 
139
- bool ThreadPool::IsThreadPoolThread() {
141
+ bool OriginalThreadPool::IsThreadPoolThread() {
140
142
  return ThreadLocal::IsEventEngineThread();
141
143
  }
142
144
 
143
- void ThreadPool::Quiesce() {
145
+ void OriginalThreadPool::Quiesce() {
144
146
  state_->queue.SetShutdown(true);
145
147
  // Wait until all threads are exited.
146
148
  // Note that if this is a threadpool thread then we won't exit this thread
@@ -151,22 +153,22 @@ void ThreadPool::Quiesce() {
151
153
  quiesced_.store(true, std::memory_order_relaxed);
152
154
  }
153
155
 
154
- ThreadPool::~ThreadPool() {
156
+ OriginalThreadPool::~OriginalThreadPool() {
155
157
  GPR_ASSERT(quiesced_.load(std::memory_order_relaxed));
156
158
  }
157
159
 
158
- void ThreadPool::Run(absl::AnyInvocable<void()> callback) {
160
+ void OriginalThreadPool::Run(absl::AnyInvocable<void()> callback) {
159
161
  GPR_DEBUG_ASSERT(quiesced_.load(std::memory_order_relaxed) == false);
160
162
  if (state_->queue.Add(std::move(callback))) {
161
163
  StartThread(state_, StartThreadReason::kNoWaitersWhenScheduling);
162
164
  }
163
165
  }
164
166
 
165
- void ThreadPool::Run(EventEngine::Closure* closure) {
167
+ void OriginalThreadPool::Run(EventEngine::Closure* closure) {
166
168
  Run([closure]() { closure->Run(); });
167
169
  }
168
170
 
169
- bool ThreadPool::Queue::Add(absl::AnyInvocable<void()> callback) {
171
+ bool OriginalThreadPool::Queue::Add(absl::AnyInvocable<void()> callback) {
170
172
  grpc_core::MutexLock lock(&queue_mu_);
171
173
  // Add works to the callbacks list
172
174
  callbacks_.push(std::move(callback));
@@ -175,13 +177,13 @@ bool ThreadPool::Queue::Add(absl::AnyInvocable<void()> callback) {
175
177
  return callbacks_.size() > threads_waiting_;
176
178
  }
177
179
 
178
- bool ThreadPool::Queue::IsBacklogged() {
180
+ bool OriginalThreadPool::Queue::IsBacklogged() {
179
181
  grpc_core::MutexLock lock(&queue_mu_);
180
182
  if (forking_) return false;
181
183
  return callbacks_.size() > 1;
182
184
  }
183
185
 
184
- void ThreadPool::Queue::SleepIfRunning() {
186
+ void OriginalThreadPool::Queue::SleepIfRunning() {
185
187
  grpc_core::MutexLock lock(&queue_mu_);
186
188
  auto end = grpc_core::Duration::Seconds(1) + grpc_core::Timestamp::Now();
187
189
  while (true) {
@@ -191,33 +193,33 @@ void ThreadPool::Queue::SleepIfRunning() {
191
193
  }
192
194
  }
193
195
 
194
- void ThreadPool::Queue::SetShutdown(bool is_shutdown) {
196
+ void OriginalThreadPool::Queue::SetShutdown(bool is_shutdown) {
195
197
  grpc_core::MutexLock lock(&queue_mu_);
196
198
  auto was_shutdown = std::exchange(shutdown_, is_shutdown);
197
199
  GPR_ASSERT(is_shutdown != was_shutdown);
198
200
  cv_.SignalAll();
199
201
  }
200
202
 
201
- void ThreadPool::Queue::SetForking(bool is_forking) {
203
+ void OriginalThreadPool::Queue::SetForking(bool is_forking) {
202
204
  grpc_core::MutexLock lock(&queue_mu_);
203
205
  auto was_forking = std::exchange(forking_, is_forking);
204
206
  GPR_ASSERT(is_forking != was_forking);
205
207
  cv_.SignalAll();
206
208
  }
207
209
 
208
- void ThreadPool::ThreadCount::Add() {
210
+ void OriginalThreadPool::ThreadCount::Add() {
209
211
  grpc_core::MutexLock lock(&thread_count_mu_);
210
212
  ++threads_;
211
213
  }
212
214
 
213
- void ThreadPool::ThreadCount::Remove() {
215
+ void OriginalThreadPool::ThreadCount::Remove() {
214
216
  grpc_core::MutexLock lock(&thread_count_mu_);
215
217
  --threads_;
216
218
  cv_.Signal();
217
219
  }
218
220
 
219
- void ThreadPool::ThreadCount::BlockUntilThreadCount(int threads,
220
- const char* why) {
221
+ void OriginalThreadPool::ThreadCount::BlockUntilThreadCount(int threads,
222
+ const char* why) {
221
223
  grpc_core::MutexLock lock(&thread_count_mu_);
222
224
  auto last_log = absl::Now();
223
225
  while (threads_ > threads) {
@@ -227,22 +229,23 @@ void ThreadPool::ThreadCount::BlockUntilThreadCount(int threads,
227
229
  // fork.
228
230
  cv_.WaitWithTimeout(&thread_count_mu_, absl::Seconds(3));
229
231
  if (threads_ > threads && absl::Now() - last_log > absl::Seconds(1)) {
230
- gpr_log(GPR_ERROR, "Waiting for thread pool to idle before %s", why);
232
+ gpr_log(GPR_ERROR, "Waiting for thread pool to idle before %s (%d to %d)",
233
+ why, threads_, threads);
231
234
  last_log = absl::Now();
232
235
  }
233
236
  }
234
237
  }
235
238
 
236
- void ThreadPool::PrepareFork() {
239
+ void OriginalThreadPool::PrepareFork() {
237
240
  state_->queue.SetForking(true);
238
241
  state_->thread_count.BlockUntilThreadCount(0, "forking");
239
242
  }
240
243
 
241
- void ThreadPool::PostforkParent() { Postfork(); }
244
+ void OriginalThreadPool::PostforkParent() { Postfork(); }
242
245
 
243
- void ThreadPool::PostforkChild() { Postfork(); }
246
+ void OriginalThreadPool::PostforkChild() { Postfork(); }
244
247
 
245
- void ThreadPool::Postfork() {
248
+ void OriginalThreadPool::Postfork() {
246
249
  state_->queue.SetForking(false);
247
250
  for (unsigned i = 0; i < reserve_threads_; i++) {
248
251
  StartThread(state_, StartThreadReason::kInitialPool);
@@ -15,12 +15,12 @@
15
15
  // limitations under the License.
16
16
  //
17
17
  //
18
-
19
- #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
20
- #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
18
+ #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_ORIGINAL_THREAD_POOL_H
19
+ #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_ORIGINAL_THREAD_POOL_H
21
20
 
22
21
  #include <grpc/support/port_platform.h>
23
22
 
23
+ #include <stddef.h>
24
24
  #include <stdint.h>
25
25
 
26
26
  #include <atomic>
@@ -31,23 +31,20 @@
31
31
  #include "absl/functional/any_invocable.h"
32
32
 
33
33
  #include <grpc/event_engine/event_engine.h>
34
- #include <grpc/support/cpu.h>
35
34
 
36
- #include "src/core/lib/event_engine/executor/executor.h"
37
- #include "src/core/lib/event_engine/forkable.h"
38
- #include "src/core/lib/gpr/useful.h"
35
+ #include "src/core/lib/event_engine/thread_pool/thread_pool.h"
39
36
  #include "src/core/lib/gprpp/sync.h"
40
37
 
41
38
  namespace grpc_event_engine {
42
39
  namespace experimental {
43
40
 
44
- class ThreadPool final : public Forkable, public Executor {
41
+ class OriginalThreadPool final : public ThreadPool {
45
42
  public:
46
- ThreadPool();
43
+ explicit OriginalThreadPool(size_t reserve_threads);
47
44
  // Asserts Quiesce was called.
48
- ~ThreadPool() override;
45
+ ~OriginalThreadPool() override;
49
46
 
50
- void Quiesce();
47
+ void Quiesce() override;
51
48
 
52
49
  // Run must not be called after Quiesce completes
53
50
  void Run(absl::AnyInvocable<void()> callback) override;
@@ -129,13 +126,12 @@ class ThreadPool final : public Forkable, public Executor {
129
126
  static void StartThread(StatePtr state, StartThreadReason reason);
130
127
  void Postfork();
131
128
 
132
- const unsigned reserve_threads_ =
133
- grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 32u);
134
- const StatePtr state_ = std::make_shared<State>(reserve_threads_);
129
+ const size_t reserve_threads_;
130
+ const StatePtr state_;
135
131
  std::atomic<bool> quiesced_{false};
136
132
  };
137
133
 
138
134
  } // namespace experimental
139
135
  } // namespace grpc_event_engine
140
136
 
141
- #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
137
+ #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_ORIGINAL_THREAD_POOL_H
@@ -0,0 +1,50 @@
1
+ // Copyright 2023 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_THREAD_POOL_H
15
+ #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_THREAD_POOL_H
16
+ #include <grpc/support/port_platform.h>
17
+
18
+ #include <stddef.h>
19
+
20
+ #include <memory>
21
+
22
+ #include "absl/functional/any_invocable.h"
23
+
24
+ #include <grpc/event_engine/event_engine.h>
25
+
26
+ #include "src/core/lib/event_engine/forkable.h"
27
+
28
+ namespace grpc_event_engine {
29
+ namespace experimental {
30
+
31
+ // Interface for all EventEngine ThreadPool implementations
32
+ class ThreadPool : public Forkable {
33
+ public:
34
+ // Asserts Quiesce was called.
35
+ ~ThreadPool() override = default;
36
+ // Shut down the pool, and wait for all threads to exit.
37
+ // This method is safe to call from within a ThreadPool thread.
38
+ virtual void Quiesce() = 0;
39
+ // Run must not be called after Quiesce completes
40
+ virtual void Run(absl::AnyInvocable<void()> callback) = 0;
41
+ virtual void Run(EventEngine::Closure* closure) = 0;
42
+ };
43
+
44
+ // Creates a default thread pool.
45
+ std::shared_ptr<ThreadPool> MakeThreadPool(size_t reserve_threads);
46
+
47
+ } // namespace experimental
48
+ } // namespace grpc_event_engine
49
+
50
+ #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_THREAD_POOL_H
@@ -1,4 +1,4 @@
1
- // Copyright 2022 gRPC authors.
1
+ // Copyright 2023 The gRPC Authors
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -11,28 +11,30 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
+ #include <grpc/support/port_platform.h>
14
15
 
15
- #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H
16
- #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H
16
+ #include <stddef.h>
17
17
 
18
- #include <grpc/support/port_platform.h>
18
+ #include <memory>
19
19
 
20
- #include "absl/functional/any_invocable.h"
20
+ #include <grpc/support/cpu.h>
21
21
 
22
- #include <grpc/event_engine/event_engine.h>
22
+ #include "src/core/lib/event_engine/thread_pool/original_thread_pool.h"
23
+ #include "src/core/lib/event_engine/thread_pool/thread_pool.h"
24
+ #include "src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h"
25
+ #include "src/core/lib/experiments/experiments.h"
26
+ #include "src/core/lib/gpr/useful.h"
23
27
 
24
28
  namespace grpc_event_engine {
25
29
  namespace experimental {
26
30
 
27
- // A subset of the EventEngine execution API. See event_engine.h for details
28
- class Executor {
29
- public:
30
- virtual ~Executor() = default;
31
- virtual void Run(EventEngine::Closure* closure) = 0;
32
- virtual void Run(absl::AnyInvocable<void()> closure) = 0;
33
- };
31
+ std::shared_ptr<ThreadPool> MakeThreadPool(size_t reserve_threads) {
32
+ if (grpc_core::IsWorkStealingEnabled()) {
33
+ return std::make_shared<WorkStealingThreadPool>(
34
+ grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 16u));
35
+ }
36
+ return std::make_shared<OriginalThreadPool>(reserve_threads);
37
+ }
34
38
 
35
39
  } // namespace experimental
36
40
  } // namespace grpc_event_engine
37
-
38
- #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H