grpc 1.50.0 → 1.51.0

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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stdint.h>
25
+
24
26
  #include <atomic>
25
27
  #include <memory>
26
28
  #include <queue>
@@ -28,19 +30,28 @@
28
30
  #include "absl/base/thread_annotations.h"
29
31
  #include "absl/functional/any_invocable.h"
30
32
 
33
+ #include <grpc/event_engine/event_engine.h>
34
+ #include <grpc/support/cpu.h>
35
+
36
+ #include "src/core/lib/event_engine/executor/executor.h"
31
37
  #include "src/core/lib/event_engine/forkable.h"
38
+ #include "src/core/lib/gpr/useful.h"
32
39
  #include "src/core/lib/gprpp/sync.h"
33
40
 
34
41
  namespace grpc_event_engine {
35
42
  namespace experimental {
36
43
 
37
- class ThreadPool final : public grpc_event_engine::experimental::Forkable {
44
+ class ThreadPool final : public Forkable, public Executor {
38
45
  public:
39
- explicit ThreadPool(int reserve_threads);
40
- // Ensures the thread pool is empty before destroying it.
46
+ ThreadPool();
47
+ // Asserts Quiesce was called.
41
48
  ~ThreadPool() override;
42
49
 
43
- void Add(absl::AnyInvocable<void()> callback);
50
+ void Quiesce();
51
+
52
+ // Run must not be called after Quiesce completes
53
+ void Run(absl::AnyInvocable<void()> callback) override;
54
+ void Run(EventEngine::Closure* closure) override;
44
55
 
45
56
  // Forkable
46
57
  // Ensures that the thread pool is empty before forking.
@@ -51,7 +62,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
51
62
  private:
52
63
  class Queue {
53
64
  public:
54
- explicit Queue(int reserve_threads) : reserve_threads_(reserve_threads) {}
65
+ explicit Queue(unsigned reserve_threads)
66
+ : reserve_threads_(reserve_threads) {}
55
67
  bool Step();
56
68
  void SetShutdown() { SetState(State::kShutdown); }
57
69
  void SetForking() { SetState(State::kForking); }
@@ -59,6 +71,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
59
71
  // Return true if we should also spin up a new thread.
60
72
  bool Add(absl::AnyInvocable<void()> callback);
61
73
  void Reset() { SetState(State::kRunning); }
74
+ bool IsBacklogged();
75
+ void SleepIfRunning();
62
76
 
63
77
  private:
64
78
  enum class State { kRunning, kShutdown, kForking };
@@ -68,8 +82,8 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
68
82
  grpc_core::Mutex mu_;
69
83
  grpc_core::CondVar cv_;
70
84
  std::queue<absl::AnyInvocable<void()>> callbacks_ ABSL_GUARDED_BY(mu_);
71
- int threads_waiting_ ABSL_GUARDED_BY(mu_) = 0;
72
- const int reserve_threads_;
85
+ unsigned threads_waiting_ ABSL_GUARDED_BY(mu_) = 0;
86
+ const unsigned reserve_threads_;
73
87
  State state_ ABSL_GUARDED_BY(mu_) = State::kRunning;
74
88
  };
75
89
 
@@ -92,20 +106,29 @@ class ThreadPool final : public grpc_event_engine::experimental::Forkable {
92
106
  // After pool creation we use this to rate limit creation of threads to one
93
107
  // at a time.
94
108
  std::atomic<bool> currently_starting_one_thread{false};
109
+ std::atomic<uint64_t> last_started_thread{0};
95
110
  };
96
111
 
97
112
  using StatePtr = std::shared_ptr<State>;
98
113
 
114
+ enum class StartThreadReason {
115
+ kInitialPool,
116
+ kNoWaitersWhenScheduling,
117
+ kNoWaitersWhenFinishedStarting,
118
+ };
119
+
99
120
  static void ThreadFunc(StatePtr state);
100
121
  // Start a new thread; throttled indicates whether the State::starting_thread
101
122
  // variable is being used to throttle this threads creation against others or
102
123
  // not: at thread pool startup we start several threads concurrently, but
103
124
  // after that we only start one at a time.
104
- static void StartThread(StatePtr state, bool throttled);
125
+ static void StartThread(StatePtr state, StartThreadReason reason);
105
126
  void Postfork();
106
127
 
107
- const int reserve_threads_;
128
+ const unsigned reserve_threads_ =
129
+ grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 32u);
108
130
  const StatePtr state_ = std::make_shared<State>(reserve_threads_);
131
+ std::atomic<bool> quiesced_{false};
109
132
  };
110
133
 
111
134
  } // namespace experimental
@@ -151,7 +151,7 @@ grpc_error_handle grpc_tcp_set_non_block(SOCKET sock) {
151
151
  status = WSAIoctl(sock, GRPC_FIONBIO, &param, sizeof(param), NULL, 0, &ret,
152
152
  NULL, NULL);
153
153
  return status == 0
154
- ? GRPC_ERROR_NONE
154
+ ? absl::OkStatus()
155
155
  : GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)");
156
156
  }
157
157
 
@@ -161,7 +161,7 @@ static grpc_error_handle set_dualstack(SOCKET sock) {
161
161
  status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&param,
162
162
  sizeof(param));
163
163
  return status == 0
164
- ? GRPC_ERROR_NONE
164
+ ? absl::OkStatus()
165
165
  : GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
166
166
  }
167
167
 
@@ -173,7 +173,7 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
173
173
  if (status == SOCKET_ERROR) {
174
174
  status = WSAGetLastError();
175
175
  }
176
- return status == 0 ? GRPC_ERROR_NONE
176
+ return status == 0 ? absl::OkStatus()
177
177
  : GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
178
178
  }
179
179
 
@@ -182,12 +182,12 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
182
182
  absl::Status PrepareSocket(SOCKET sock) {
183
183
  absl::Status err;
184
184
  err = grpc_tcp_set_non_block(sock);
185
- if (!GRPC_ERROR_IS_NONE(err)) return err;
185
+ if (!err.ok()) return err;
186
186
  err = enable_socket_low_latency(sock);
187
- if (!GRPC_ERROR_IS_NONE(err)) return err;
187
+ if (!err.ok()) return err;
188
188
  err = set_dualstack(sock);
189
- if (!GRPC_ERROR_IS_NONE(err)) return err;
190
- return GRPC_ERROR_NONE;
189
+ if (!err.ok()) return err;
190
+ return absl::OkStatus();
191
191
  }
192
192
 
193
193
  } // namespace experimental
@@ -26,7 +26,6 @@
26
26
  #include <grpc/event_engine/memory_allocator.h>
27
27
  #include <grpc/event_engine/slice_buffer.h>
28
28
 
29
- #include "src/core/lib/event_engine/executor/threaded_executor.h"
30
29
  #include "src/core/lib/event_engine/handle_containers.h"
31
30
  #include "src/core/lib/event_engine/posix_engine/timer_manager.h"
32
31
  #include "src/core/lib/event_engine/trace.h"
@@ -61,23 +60,30 @@ struct WindowsEventEngine::Closure final : public EventEngine::Closure {
61
60
  }
62
61
  };
63
62
 
64
- WindowsEventEngine::WindowsEventEngine() : iocp_(&executor_) {
63
+ WindowsEventEngine::WindowsEventEngine()
64
+ : executor_(std::make_shared<ThreadPool>()),
65
+ iocp_(executor_.get()),
66
+ timer_manager_(executor_) {
65
67
  WSADATA wsaData;
66
68
  int status = WSAStartup(MAKEWORD(2, 0), &wsaData);
67
69
  GPR_ASSERT(status == 0);
68
70
  }
69
71
 
70
72
  WindowsEventEngine::~WindowsEventEngine() {
71
- grpc_core::MutexLock lock(&mu_);
72
- if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
73
- for (auto handle : known_handles_) {
74
- gpr_log(GPR_ERROR,
75
- "WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s", this,
76
- HandleToString(handle).c_str());
73
+ {
74
+ grpc_core::MutexLock lock(&mu_);
75
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
76
+ for (auto handle : known_handles_) {
77
+ gpr_log(GPR_ERROR,
78
+ "WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s",
79
+ this, HandleToString(handle).c_str());
80
+ }
77
81
  }
82
+ GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
83
+ GPR_ASSERT(WSACleanup() == 0);
84
+ timer_manager_.Shutdown();
78
85
  }
79
- GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
80
- GPR_ASSERT(WSACleanup() == 0);
86
+ executor_->Quiesce();
81
87
  }
82
88
 
83
89
  bool WindowsEventEngine::Cancel(EventEngine::TaskHandle handle) {
@@ -101,11 +107,11 @@ EventEngine::TaskHandle WindowsEventEngine::RunAfter(
101
107
  }
102
108
 
103
109
  void WindowsEventEngine::Run(absl::AnyInvocable<void()> closure) {
104
- executor_.Run(std::move(closure));
110
+ executor_->Run(std::move(closure));
105
111
  }
106
112
 
107
113
  void WindowsEventEngine::Run(EventEngine::Closure* closure) {
108
- executor_.Run(closure);
114
+ executor_->Run(closure);
109
115
  }
110
116
 
111
117
  EventEngine::TaskHandle WindowsEventEngine::RunAfterInternal(
@@ -28,17 +28,21 @@
28
28
  #include <grpc/event_engine/memory_allocator.h>
29
29
  #include <grpc/event_engine/slice_buffer.h>
30
30
 
31
- #include "src/core/lib/event_engine/executor/threaded_executor.h"
32
31
  #include "src/core/lib/event_engine/handle_containers.h"
33
32
  #include "src/core/lib/event_engine/posix_engine/timer_manager.h"
33
+ #include "src/core/lib/event_engine/thread_pool.h"
34
34
  #include "src/core/lib/event_engine/windows/iocp.h"
35
35
  #include "src/core/lib/gprpp/sync.h"
36
36
  #include "src/core/lib/gprpp/time.h"
37
+ #include "src/core/lib/surface/init_internally.h"
37
38
 
38
39
  namespace grpc_event_engine {
39
40
  namespace experimental {
40
41
 
41
- class WindowsEventEngine : public EventEngine {
42
+ // TODO(ctiller): KeepsGrpcInitialized is an interim measure to ensure that
43
+ // event engine is shut down before we shut down iomgr.
44
+ class WindowsEventEngine : public EventEngine,
45
+ public grpc_core::KeepsGrpcInitialized {
42
46
  public:
43
47
  class WindowsEndpoint : public EventEngine::Endpoint {
44
48
  public:
@@ -107,9 +111,9 @@ class WindowsEventEngine : public EventEngine {
107
111
  TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
108
112
  std::atomic<intptr_t> aba_token_{0};
109
113
 
110
- posix_engine::TimerManager timer_manager_;
111
- ThreadedExecutor executor_{2};
114
+ std::shared_ptr<ThreadPool> executor_;
112
115
  IOCP iocp_;
116
+ posix_engine::TimerManager timer_manager_;
113
117
  };
114
118
 
115
119
  } // namespace experimental
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include <algorithm>
22
22
  #include <atomic>
23
- #include <memory>
24
23
  #include <string>
25
24
 
26
25
  #include "absl/strings/ascii.h"
@@ -32,6 +31,7 @@
32
31
 
33
32
  #include "src/core/lib/experiments/experiments.h"
34
33
  #include "src/core/lib/gprpp/global_config.h"
34
+ #include "src/core/lib/gprpp/memory.h"
35
35
  #include "src/core/lib/gprpp/no_destruct.h"
36
36
 
37
37
  GPR_GLOBAL_CONFIG_DEFINE_STRING(
@@ -46,6 +46,13 @@ const char* const description_new_hpack_huffman_decoder =
46
46
  "implementation.";
47
47
  const char* const description_event_engine_client =
48
48
  "Use EventEngine clients instead of iomgr's grpc_tcp_client";
49
+ const char* const description_monitoring_experiment =
50
+ "Placeholder experiment to prove/disprove our monitoring is working";
51
+ const char* const description_promise_based_client_call =
52
+ "If set, use the new gRPC promise based call code when it's appropriate "
53
+ "(ie when all filters in a stack are promise based)";
54
+ const char* const description_posix_event_engine_enable_polling =
55
+ "If set, enables polling on the default posix event engine.";
49
56
  #ifdef NDEBUG
50
57
  const bool kDefaultForDebugOnly = false;
51
58
  #else
@@ -57,19 +64,23 @@ namespace grpc_core {
57
64
 
58
65
  const ExperimentMetadata g_experiment_metadata[] = {
59
66
  {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, false},
60
- {"tcp_read_chunks", description_tcp_read_chunks, false},
67
+ {"tcp_read_chunks", description_tcp_read_chunks, true},
61
68
  {"tcp_rcv_lowat", description_tcp_rcv_lowat, false},
62
69
  {"peer_state_based_framing", description_peer_state_based_framing, false},
63
70
  {"flow_control_fixes", description_flow_control_fixes, false},
64
71
  {"memory_pressure_controller", description_memory_pressure_controller,
65
72
  false},
66
73
  {"periodic_resource_quota_reclamation",
67
- description_periodic_resource_quota_reclamation, false},
74
+ description_periodic_resource_quota_reclamation, true},
68
75
  {"unconstrained_max_quota_buffer_size",
69
76
  description_unconstrained_max_quota_buffer_size, false},
70
77
  {"new_hpack_huffman_decoder", description_new_hpack_huffman_decoder,
71
78
  kDefaultForDebugOnly},
72
79
  {"event_engine_client", description_event_engine_client, false},
80
+ {"monitoring_experiment", description_monitoring_experiment, true},
81
+ {"promise_based_client_call", description_promise_based_client_call, false},
82
+ {"posix_event_engine_enable_polling",
83
+ description_posix_event_engine_enable_polling, kDefaultForDebugOnly},
73
84
  };
74
85
 
75
86
  } // namespace grpc_core
@@ -41,6 +41,13 @@ inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
41
41
  }
42
42
  inline bool IsNewHpackHuffmanDecoderEnabled() { return IsExperimentEnabled(8); }
43
43
  inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(9); }
44
+ inline bool IsMonitoringExperimentEnabled() { return IsExperimentEnabled(10); }
45
+ inline bool IsPromiseBasedClientCallEnabled() {
46
+ return IsExperimentEnabled(11);
47
+ }
48
+ inline bool IsPosixEventEngineEnablePollingEnabled() {
49
+ return IsExperimentEnabled(12);
50
+ }
44
51
 
45
52
  struct ExperimentMetadata {
46
53
  const char* name;
@@ -48,7 +55,7 @@ struct ExperimentMetadata {
48
55
  bool default_value;
49
56
  };
50
57
 
51
- constexpr const size_t kNumExperiments = 10;
58
+ constexpr const size_t kNumExperiments = 13;
52
59
  extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
53
60
 
54
61
  } // namespace grpc_core
@@ -33,12 +33,15 @@
33
33
  #include <grpc/support/log.h>
34
34
  #include <grpc/support/sync.h>
35
35
 
36
+ #include "src/core/lib/gprpp/strerror.h"
37
+
36
38
  static int ncpus = 0;
37
39
 
38
40
  static void init_num_cpus() {
39
41
  #ifndef GPR_MUSL_LIBC_COMPAT
40
42
  if (sched_getcpu() < 0) {
41
- gpr_log(GPR_ERROR, "Error determining current CPU: %s\n", strerror(errno));
43
+ gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
44
+ grpc_core::StrError(errno).c_str());
42
45
  ncpus = 1;
43
46
  return;
44
47
  }
@@ -68,7 +71,8 @@ unsigned gpr_cpu_current_cpu(void) {
68
71
  }
69
72
  int cpu = sched_getcpu();
70
73
  if (cpu < 0) {
71
- gpr_log(GPR_ERROR, "Error determining current CPU: %s\n", strerror(errno));
74
+ gpr_log(GPR_ERROR, "Error determining current CPU: %s\n",
75
+ grpc_core::StrError(errno).c_str());
72
76
  return 0;
73
77
  }
74
78
  if (static_cast<unsigned>(cpu) >= gpr_cpu_num_cores()) {
@@ -44,7 +44,6 @@
44
44
  #include <grpc/support/log.h>
45
45
  #include <grpc/support/time.h>
46
46
 
47
- #include "src/core/lib/gpr/tls.h"
48
47
  #include "src/core/lib/gprpp/examine_stack.h"
49
48
 
50
49
  int gpr_should_log_stacktrace(gpr_log_severity severity);
@@ -77,7 +76,7 @@ void gpr_default_log(gpr_log_func_args* args) {
77
76
  time_t timer;
78
77
  gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
79
78
  struct tm tm;
80
- static GPR_THREAD_LOCAL(long) tid(0);
79
+ static thread_local long tid(0);
81
80
  if (tid == 0) tid = sys_gettid();
82
81
 
83
82
  timer = static_cast<time_t>(now.tv_sec);
@@ -104,10 +103,10 @@ void gpr_default_log(gpr_log_func_args* args) {
104
103
  ? grpc_core::GetCurrentStackTrace()
105
104
  : absl::nullopt;
106
105
  if (stack_trace) {
107
- fprintf(stderr, "%-60s %s\n%s\n", prefix.c_str(), args->message,
106
+ fprintf(stderr, "%-70s %s\n%s\n", prefix.c_str(), args->message,
108
107
  stack_trace->c_str());
109
108
  } else {
110
- fprintf(stderr, "%-60s %s\n", prefix.c_str(), args->message);
109
+ fprintf(stderr, "%-70s %s\n", prefix.c_str(), args->message);
111
110
  }
112
111
  }
113
112
 
@@ -21,8 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdbool.h>
25
24
  #include <stddef.h>
25
+ #include <stdint.h>
26
26
 
27
27
  #include <string>
28
28
 
@@ -31,6 +31,7 @@
31
31
 
32
32
  #include "src/core/lib/gpr/string.h"
33
33
  #include "src/core/lib/gpr/tmpfile.h"
34
+ #include "src/core/lib/gprpp/strerror.h"
34
35
 
35
36
  FILE* gpr_tmpfile(const char* prefix, char** tmp_filename) {
36
37
  FILE* result = nullptr;
@@ -45,13 +46,13 @@ FILE* gpr_tmpfile(const char* prefix, char** tmp_filename) {
45
46
  fd = mkstemp(filename_template);
46
47
  if (fd == -1) {
47
48
  gpr_log(GPR_ERROR, "mkstemp failed for filename_template %s with error %s.",
48
- filename_template, strerror(errno));
49
+ filename_template, grpc_core::StrError(errno).c_str());
49
50
  goto end;
50
51
  }
51
52
  result = fdopen(fd, "w+");
52
53
  if (result == nullptr) {
53
54
  gpr_log(GPR_ERROR, "Could not open file %s from fd %d (error = %s).",
54
- filename_template, fd, strerror(errno));
55
+ filename_template, fd, grpc_core::StrError(errno).c_str());
55
56
  unlink(filename_template);
56
57
  close(fd);
57
58
  goto end;
@@ -0,0 +1,75 @@
1
+ // Copyright 2022 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
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/gprpp/load_file.h"
18
+
19
+ #include <errno.h>
20
+ #include <stdio.h>
21
+ #include <string.h>
22
+
23
+ #include "absl/cleanup/cleanup.h"
24
+ #include "absl/status/status.h"
25
+ #include "absl/strings/str_cat.h"
26
+
27
+ #include <grpc/slice.h>
28
+ #include <grpc/support/alloc.h>
29
+ #include <grpc/support/log.h>
30
+
31
+ namespace grpc_core {
32
+
33
+ // Loads the content of a file into a slice. add_null_terminator will add a NULL
34
+ // terminator if true.
35
+ absl::StatusOr<Slice> LoadFile(std::string filename, bool add_null_terminator) {
36
+ unsigned char* contents = nullptr;
37
+ size_t contents_size = 0;
38
+ FILE* file;
39
+ size_t bytes_read = 0;
40
+ absl::Status error = absl::OkStatus();
41
+ auto sock_cleanup = absl::MakeCleanup([&file]() -> void {
42
+ if (file != nullptr) {
43
+ fclose(file);
44
+ }
45
+ });
46
+
47
+ file = fopen(filename.c_str(), "rb");
48
+ if (file == nullptr) {
49
+ error = absl::InternalError(
50
+ absl::StrCat("Failed to load file: ", filename,
51
+ " due to error(fdopen): ", strerror(errno)));
52
+ return error;
53
+ }
54
+ fseek(file, 0, SEEK_END);
55
+ // Converting to size_t on the assumption that it will not fail.
56
+ contents_size = static_cast<size_t>(ftell(file));
57
+ fseek(file, 0, SEEK_SET);
58
+ contents = static_cast<unsigned char*>(
59
+ gpr_malloc(contents_size + (add_null_terminator ? 1 : 0)));
60
+ bytes_read = fread(contents, 1, contents_size, file);
61
+ if (bytes_read < contents_size) {
62
+ gpr_free(contents);
63
+ GPR_ASSERT(ferror(file));
64
+ error = absl::InternalError(
65
+ absl::StrCat("Failed to load file: ", filename,
66
+ " due to error(fread): ", strerror(errno)));
67
+ return error;
68
+ }
69
+ if (add_null_terminator) {
70
+ contents[contents_size++] = 0;
71
+ }
72
+ return Slice(grpc_slice_new(contents, contents_size, gpr_free));
73
+ }
74
+
75
+ } // namespace grpc_core
@@ -0,0 +1,33 @@
1
+ // Copyright 2022 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
+
15
+ #ifndef GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
16
+ #define GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string>
21
+
22
+ #include "absl/status/statusor.h"
23
+
24
+ #include "src/core/lib/slice/slice.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ // Loads the content of a file into a slice. add_null_terminator will add a NULL
29
+ // terminator if true.
30
+ absl::StatusOr<Slice> LoadFile(std::string filename, bool add_null_terminator);
31
+ } // namespace grpc_core
32
+
33
+ #endif // GRPC_CORE_LIB_GPRPP_LOAD_FILE_H
@@ -0,0 +1,46 @@
1
+ // Copyright 2022 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
+
15
+ #ifndef GRPC_CORE_LIB_GPRPP_PER_CPU_H
16
+ #define GRPC_CORE_LIB_GPRPP_PER_CPU_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <cstddef>
21
+ #include <memory>
22
+
23
+ #include <grpc/support/cpu.h>
24
+
25
+ #include "src/core/lib/iomgr/exec_ctx.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ template <typename T>
30
+ class PerCpu {
31
+ public:
32
+ T& this_cpu() { return data_[ExecCtx::Get()->starting_cpu()]; }
33
+
34
+ T* begin() { return data_.get(); }
35
+ T* end() { return data_.get() + cpus_; }
36
+ const T* begin() const { return data_.get(); }
37
+ const T* end() const { return data_.get() + cpus_; }
38
+
39
+ private:
40
+ const size_t cpus_ = gpr_cpu_num_cores();
41
+ std::unique_ptr<T[]> data_{new T[cpus_]};
42
+ };
43
+
44
+ } // namespace grpc_core
45
+
46
+ #endif // GRPC_CORE_LIB_GPRPP_PER_CPU_H
@@ -16,9 +16,9 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- // IWYU pragma: no_include <bits/struct_stat.h>
19
+ #include <string>
20
20
 
21
- #include <string.h>
21
+ // IWYU pragma: no_include <bits/struct_stat.h>
22
22
 
23
23
  #include "absl/status/status.h"
24
24
  #include "absl/strings/string_view.h"
@@ -31,6 +31,7 @@
31
31
  #include <grpc/support/log.h>
32
32
 
33
33
  #include "src/core/lib/gprpp/stat.h"
34
+ #include "src/core/lib/gprpp/strerror.h"
34
35
 
35
36
  namespace grpc_core {
36
37
 
@@ -39,9 +40,9 @@ absl::Status GetFileModificationTime(const char* filename, time_t* timestamp) {
39
40
  GPR_ASSERT(timestamp != nullptr);
40
41
  struct stat buf;
41
42
  if (stat(filename, &buf) != 0) {
42
- const char* error_msg = strerror(errno);
43
+ std::string error_msg = StrError(errno);
43
44
  gpr_log(GPR_ERROR, "stat failed for filename %s with error %s.", filename,
44
- error_msg);
45
+ error_msg.c_str());
45
46
  return absl::Status(absl::StatusCode::kInternal, error_msg);
46
47
  }
47
48
  // Last file/directory modification time.
@@ -25,6 +25,7 @@
25
25
  #include <grpc/support/log.h>
26
26
 
27
27
  #include "src/core/lib/gprpp/stat.h"
28
+ #include "src/core/lib/gprpp/strerror.h"
28
29
 
29
30
  namespace grpc_core {
30
31
 
@@ -33,9 +34,9 @@ absl::Status GetFileModificationTime(const char* filename, time_t* timestamp) {
33
34
  GPR_ASSERT(timestamp != nullptr);
34
35
  struct _stat buf;
35
36
  if (_stat(filename, &buf) != 0) {
36
- const char* error_msg = strerror(errno);
37
+ std::string error_msg = StrError(errno);
37
38
  gpr_log(GPR_ERROR, "_stat failed for filename %s with error %s.", filename,
38
- error_msg);
39
+ error_msg.c_str());
39
40
  return absl::Status(absl::StatusCode::kInternal, error_msg);
40
41
  }
41
42
  // Last file/directory modification time.
@@ -38,7 +38,7 @@ struct google_rpc_Status;
38
38
  struct upb_Arena;
39
39
  }
40
40
 
41
- #define RETURN_IF_ERROR(expr) \
41
+ #define GRPC_RETURN_IF_ERROR(expr) \
42
42
  do { \
43
43
  const absl::Status status = (expr); \
44
44
  if (!status.ok()) return status; \
@@ -47,7 +47,6 @@ struct upb_Arena;
47
47
  namespace grpc_core {
48
48
 
49
49
  /// This enum should have the same value of grpc_error_ints
50
- // TODO(veblush): Use camel-case names once migration to absl::Status is done.
51
50
  enum class StatusIntProperty {
52
51
  /// 'errno' from the operating system
53
52
  kErrorNo,
@@ -85,7 +84,6 @@ enum class StatusIntProperty {
85
84
  };
86
85
 
87
86
  /// This enum should have the same value of grpc_error_strs
88
- // TODO(veblush): Use camel-case names once migration to absl::Status is done.
89
87
  enum class StatusStrProperty {
90
88
  /// top-level textual description of this error
91
89
  kDescription,