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
@@ -23,129 +23,270 @@
23
23
 
24
24
  #include <grpc/support/port_platform.h>
25
25
 
26
- // IWYU pragma: private, include "src/core/lib/debug/stats.h"
27
-
28
- typedef enum {
29
- GRPC_STATS_COUNTER_CLIENT_CALLS_CREATED,
30
- GRPC_STATS_COUNTER_SERVER_CALLS_CREATED,
31
- GRPC_STATS_COUNTER_CLIENT_CHANNELS_CREATED,
32
- GRPC_STATS_COUNTER_CLIENT_SUBCHANNELS_CREATED,
33
- GRPC_STATS_COUNTER_SERVER_CHANNELS_CREATED,
34
- GRPC_STATS_COUNTER_SYSCALL_WRITE,
35
- GRPC_STATS_COUNTER_SYSCALL_READ,
36
- GRPC_STATS_COUNTER_TCP_READ_ALLOC_8K,
37
- GRPC_STATS_COUNTER_TCP_READ_ALLOC_64K,
38
- GRPC_STATS_COUNTER_HTTP2_SETTINGS_WRITES,
39
- GRPC_STATS_COUNTER_HTTP2_PINGS_SENT,
40
- GRPC_STATS_COUNTER_HTTP2_WRITES_BEGUN,
41
- GRPC_STATS_COUNTER_HTTP2_TRANSPORT_STALLS,
42
- GRPC_STATS_COUNTER_HTTP2_STREAM_STALLS,
43
- GRPC_STATS_COUNTER_CQ_PLUCK_CREATES,
44
- GRPC_STATS_COUNTER_CQ_NEXT_CREATES,
45
- GRPC_STATS_COUNTER_CQ_CALLBACK_CREATES,
46
- GRPC_STATS_COUNTER_COUNT
47
- } grpc_stats_counters;
48
- extern const char* grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT];
49
- extern const char* grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT];
50
- typedef enum {
51
- GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE,
52
- GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE,
53
- GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE,
54
- GRPC_STATS_HISTOGRAM_TCP_READ_SIZE,
55
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER,
56
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
57
- GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
58
- GRPC_STATS_HISTOGRAM_COUNT
59
- } grpc_stats_histograms;
60
- extern const char* grpc_stats_histogram_name[GRPC_STATS_HISTOGRAM_COUNT];
61
- extern const char* grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT];
62
- typedef enum {
63
- GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE_FIRST_SLOT = 0,
64
- GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE_BUCKETS = 24,
65
- GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE_FIRST_SLOT = 24,
66
- GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE_BUCKETS = 20,
67
- GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE_FIRST_SLOT = 44,
68
- GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE_BUCKETS = 10,
69
- GRPC_STATS_HISTOGRAM_TCP_READ_SIZE_FIRST_SLOT = 54,
70
- GRPC_STATS_HISTOGRAM_TCP_READ_SIZE_BUCKETS = 20,
71
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_FIRST_SLOT = 74,
72
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_BUCKETS = 20,
73
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE_FIRST_SLOT = 94,
74
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE_BUCKETS = 10,
75
- GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE_FIRST_SLOT = 104,
76
- GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE_BUCKETS = 20,
77
- GRPC_STATS_HISTOGRAM_BUCKETS = 124
78
- } grpc_stats_histogram_constants;
79
- #define GRPC_STATS_INC_CLIENT_CALLS_CREATED() \
80
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_CALLS_CREATED)
81
- #define GRPC_STATS_INC_SERVER_CALLS_CREATED() \
82
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SERVER_CALLS_CREATED)
83
- #define GRPC_STATS_INC_CLIENT_CHANNELS_CREATED() \
84
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_CHANNELS_CREATED)
85
- #define GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED() \
86
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_SUBCHANNELS_CREATED)
87
- #define GRPC_STATS_INC_SERVER_CHANNELS_CREATED() \
88
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SERVER_CHANNELS_CREATED)
89
- #define GRPC_STATS_INC_SYSCALL_WRITE() \
90
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SYSCALL_WRITE)
91
- #define GRPC_STATS_INC_SYSCALL_READ() \
92
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SYSCALL_READ)
93
- #define GRPC_STATS_INC_TCP_READ_ALLOC_8K() \
94
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_TCP_READ_ALLOC_8K)
95
- #define GRPC_STATS_INC_TCP_READ_ALLOC_64K() \
96
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_TCP_READ_ALLOC_64K)
97
- #define GRPC_STATS_INC_HTTP2_SETTINGS_WRITES() \
98
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_SETTINGS_WRITES)
99
- #define GRPC_STATS_INC_HTTP2_PINGS_SENT() \
100
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_PINGS_SENT)
101
- #define GRPC_STATS_INC_HTTP2_WRITES_BEGUN() \
102
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_WRITES_BEGUN)
103
- #define GRPC_STATS_INC_HTTP2_TRANSPORT_STALLS() \
104
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_TRANSPORT_STALLS)
105
- #define GRPC_STATS_INC_HTTP2_STREAM_STALLS() \
106
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_STREAM_STALLS)
107
- #define GRPC_STATS_INC_CQ_PLUCK_CREATES() \
108
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_PLUCK_CREATES)
109
- #define GRPC_STATS_INC_CQ_NEXT_CREATES() \
110
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_NEXT_CREATES)
111
- #define GRPC_STATS_INC_CQ_CALLBACK_CREATES() \
112
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_CALLBACK_CREATES)
113
- #define GRPC_STATS_INC_CALL_INITIAL_SIZE(value) \
114
- GRPC_STATS_INC_HISTOGRAM( \
115
- GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE, \
116
- grpc_core::BucketForHistogramValue_32768_24(static_cast<int>(value)))
117
- #define GRPC_STATS_INC_TCP_WRITE_SIZE(value) \
118
- GRPC_STATS_INC_HISTOGRAM( \
119
- GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, \
120
- grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
121
- #define GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(value) \
122
- GRPC_STATS_INC_HISTOGRAM( \
123
- GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, \
124
- grpc_core::BucketForHistogramValue_80_10(static_cast<int>(value)))
125
- #define GRPC_STATS_INC_TCP_READ_SIZE(value) \
126
- GRPC_STATS_INC_HISTOGRAM( \
127
- GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, \
128
- grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
129
- #define GRPC_STATS_INC_TCP_READ_OFFER(value) \
130
- GRPC_STATS_INC_HISTOGRAM( \
131
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER, \
132
- grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
133
- #define GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(value) \
134
- GRPC_STATS_INC_HISTOGRAM( \
135
- GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE, \
136
- grpc_core::BucketForHistogramValue_80_10(static_cast<int>(value)))
137
- #define GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(value) \
138
- GRPC_STATS_INC_HISTOGRAM( \
139
- GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE, \
140
- grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
26
+ #include <stdint.h>
27
+
28
+ #include <atomic>
29
+ #include <memory>
30
+
31
+ #include "absl/strings/string_view.h"
32
+
33
+ #include "src/core/lib/debug/histogram_view.h"
34
+ #include "src/core/lib/gprpp/per_cpu.h"
35
+
141
36
  namespace grpc_core {
142
- int BucketForHistogramValue_32768_24(int value);
143
- int BucketForHistogramValue_16777216_20(int value);
144
- int BucketForHistogramValue_80_10(int value);
37
+ class HistogramCollector_32768_24;
38
+ class Histogram_32768_24 {
39
+ public:
40
+ static int BucketFor(int value);
41
+ const uint64_t* buckets() const { return buckets_; }
42
+ friend Histogram_32768_24 operator-(const Histogram_32768_24& left,
43
+ const Histogram_32768_24& right);
44
+
45
+ private:
46
+ friend class HistogramCollector_32768_24;
47
+ uint64_t buckets_[24]{};
48
+ };
49
+ class HistogramCollector_32768_24 {
50
+ public:
51
+ void Increment(int value) {
52
+ buckets_[Histogram_32768_24::BucketFor(value)].fetch_add(
53
+ 1, std::memory_order_relaxed);
54
+ }
55
+ void Collect(Histogram_32768_24* result) const;
56
+
57
+ private:
58
+ std::atomic<uint64_t> buckets_[24]{};
59
+ };
60
+ class HistogramCollector_16777216_20;
61
+ class Histogram_16777216_20 {
62
+ public:
63
+ static int BucketFor(int value);
64
+ const uint64_t* buckets() const { return buckets_; }
65
+ friend Histogram_16777216_20 operator-(const Histogram_16777216_20& left,
66
+ const Histogram_16777216_20& right);
67
+
68
+ private:
69
+ friend class HistogramCollector_16777216_20;
70
+ uint64_t buckets_[20]{};
71
+ };
72
+ class HistogramCollector_16777216_20 {
73
+ public:
74
+ void Increment(int value) {
75
+ buckets_[Histogram_16777216_20::BucketFor(value)].fetch_add(
76
+ 1, std::memory_order_relaxed);
77
+ }
78
+ void Collect(Histogram_16777216_20* result) const;
79
+
80
+ private:
81
+ std::atomic<uint64_t> buckets_[20]{};
82
+ };
83
+ class HistogramCollector_80_10;
84
+ class Histogram_80_10 {
85
+ public:
86
+ static int BucketFor(int value);
87
+ const uint64_t* buckets() const { return buckets_; }
88
+ friend Histogram_80_10 operator-(const Histogram_80_10& left,
89
+ const Histogram_80_10& right);
90
+
91
+ private:
92
+ friend class HistogramCollector_80_10;
93
+ uint64_t buckets_[10]{};
94
+ };
95
+ class HistogramCollector_80_10 {
96
+ public:
97
+ void Increment(int value) {
98
+ buckets_[Histogram_80_10::BucketFor(value)].fetch_add(
99
+ 1, std::memory_order_relaxed);
100
+ }
101
+ void Collect(Histogram_80_10* result) const;
102
+
103
+ private:
104
+ std::atomic<uint64_t> buckets_[10]{};
105
+ };
106
+ struct GlobalStats {
107
+ enum class Counter {
108
+ kClientCallsCreated,
109
+ kServerCallsCreated,
110
+ kClientChannelsCreated,
111
+ kClientSubchannelsCreated,
112
+ kServerChannelsCreated,
113
+ kSyscallWrite,
114
+ kSyscallRead,
115
+ kTcpReadAlloc8k,
116
+ kTcpReadAlloc64k,
117
+ kHttp2SettingsWrites,
118
+ kHttp2PingsSent,
119
+ kHttp2WritesBegun,
120
+ kHttp2TransportStalls,
121
+ kHttp2StreamStalls,
122
+ kCqPluckCreates,
123
+ kCqNextCreates,
124
+ kCqCallbackCreates,
125
+ COUNT
126
+ };
127
+ enum class Histogram {
128
+ kCallInitialSize,
129
+ kTcpWriteSize,
130
+ kTcpWriteIovSize,
131
+ kTcpReadSize,
132
+ kTcpReadOffer,
133
+ kTcpReadOfferIovSize,
134
+ kHttp2SendMessageSize,
135
+ COUNT
136
+ };
137
+ GlobalStats();
138
+ static const absl::string_view counter_name[static_cast<int>(Counter::COUNT)];
139
+ static const absl::string_view
140
+ histogram_name[static_cast<int>(Histogram::COUNT)];
141
+ static const absl::string_view counter_doc[static_cast<int>(Counter::COUNT)];
142
+ static const absl::string_view
143
+ histogram_doc[static_cast<int>(Histogram::COUNT)];
144
+ union {
145
+ struct {
146
+ uint64_t client_calls_created;
147
+ uint64_t server_calls_created;
148
+ uint64_t client_channels_created;
149
+ uint64_t client_subchannels_created;
150
+ uint64_t server_channels_created;
151
+ uint64_t syscall_write;
152
+ uint64_t syscall_read;
153
+ uint64_t tcp_read_alloc_8k;
154
+ uint64_t tcp_read_alloc_64k;
155
+ uint64_t http2_settings_writes;
156
+ uint64_t http2_pings_sent;
157
+ uint64_t http2_writes_begun;
158
+ uint64_t http2_transport_stalls;
159
+ uint64_t http2_stream_stalls;
160
+ uint64_t cq_pluck_creates;
161
+ uint64_t cq_next_creates;
162
+ uint64_t cq_callback_creates;
163
+ };
164
+ uint64_t counters[static_cast<int>(Counter::COUNT)];
165
+ };
166
+ Histogram_32768_24 call_initial_size;
167
+ Histogram_16777216_20 tcp_write_size;
168
+ Histogram_80_10 tcp_write_iov_size;
169
+ Histogram_16777216_20 tcp_read_size;
170
+ Histogram_16777216_20 tcp_read_offer;
171
+ Histogram_80_10 tcp_read_offer_iov_size;
172
+ Histogram_16777216_20 http2_send_message_size;
173
+ HistogramView histogram(Histogram which) const;
174
+ std::unique_ptr<GlobalStats> Diff(const GlobalStats& other) const;
175
+ };
176
+ class GlobalStatsCollector {
177
+ public:
178
+ std::unique_ptr<GlobalStats> Collect() const;
179
+ void IncrementClientCallsCreated() {
180
+ data_.this_cpu().client_calls_created.fetch_add(1,
181
+ std::memory_order_relaxed);
182
+ }
183
+ void IncrementServerCallsCreated() {
184
+ data_.this_cpu().server_calls_created.fetch_add(1,
185
+ std::memory_order_relaxed);
186
+ }
187
+ void IncrementClientChannelsCreated() {
188
+ data_.this_cpu().client_channels_created.fetch_add(
189
+ 1, std::memory_order_relaxed);
190
+ }
191
+ void IncrementClientSubchannelsCreated() {
192
+ data_.this_cpu().client_subchannels_created.fetch_add(
193
+ 1, std::memory_order_relaxed);
194
+ }
195
+ void IncrementServerChannelsCreated() {
196
+ data_.this_cpu().server_channels_created.fetch_add(
197
+ 1, std::memory_order_relaxed);
198
+ }
199
+ void IncrementSyscallWrite() {
200
+ data_.this_cpu().syscall_write.fetch_add(1, std::memory_order_relaxed);
201
+ }
202
+ void IncrementSyscallRead() {
203
+ data_.this_cpu().syscall_read.fetch_add(1, std::memory_order_relaxed);
204
+ }
205
+ void IncrementTcpReadAlloc8k() {
206
+ data_.this_cpu().tcp_read_alloc_8k.fetch_add(1, std::memory_order_relaxed);
207
+ }
208
+ void IncrementTcpReadAlloc64k() {
209
+ data_.this_cpu().tcp_read_alloc_64k.fetch_add(1, std::memory_order_relaxed);
210
+ }
211
+ void IncrementHttp2SettingsWrites() {
212
+ data_.this_cpu().http2_settings_writes.fetch_add(1,
213
+ std::memory_order_relaxed);
214
+ }
215
+ void IncrementHttp2PingsSent() {
216
+ data_.this_cpu().http2_pings_sent.fetch_add(1, std::memory_order_relaxed);
217
+ }
218
+ void IncrementHttp2WritesBegun() {
219
+ data_.this_cpu().http2_writes_begun.fetch_add(1, std::memory_order_relaxed);
220
+ }
221
+ void IncrementHttp2TransportStalls() {
222
+ data_.this_cpu().http2_transport_stalls.fetch_add(
223
+ 1, std::memory_order_relaxed);
224
+ }
225
+ void IncrementHttp2StreamStalls() {
226
+ data_.this_cpu().http2_stream_stalls.fetch_add(1,
227
+ std::memory_order_relaxed);
228
+ }
229
+ void IncrementCqPluckCreates() {
230
+ data_.this_cpu().cq_pluck_creates.fetch_add(1, std::memory_order_relaxed);
231
+ }
232
+ void IncrementCqNextCreates() {
233
+ data_.this_cpu().cq_next_creates.fetch_add(1, std::memory_order_relaxed);
234
+ }
235
+ void IncrementCqCallbackCreates() {
236
+ data_.this_cpu().cq_callback_creates.fetch_add(1,
237
+ std::memory_order_relaxed);
238
+ }
239
+ void IncrementCallInitialSize(int value) {
240
+ data_.this_cpu().call_initial_size.Increment(value);
241
+ }
242
+ void IncrementTcpWriteSize(int value) {
243
+ data_.this_cpu().tcp_write_size.Increment(value);
244
+ }
245
+ void IncrementTcpWriteIovSize(int value) {
246
+ data_.this_cpu().tcp_write_iov_size.Increment(value);
247
+ }
248
+ void IncrementTcpReadSize(int value) {
249
+ data_.this_cpu().tcp_read_size.Increment(value);
250
+ }
251
+ void IncrementTcpReadOffer(int value) {
252
+ data_.this_cpu().tcp_read_offer.Increment(value);
253
+ }
254
+ void IncrementTcpReadOfferIovSize(int value) {
255
+ data_.this_cpu().tcp_read_offer_iov_size.Increment(value);
256
+ }
257
+ void IncrementHttp2SendMessageSize(int value) {
258
+ data_.this_cpu().http2_send_message_size.Increment(value);
259
+ }
260
+
261
+ private:
262
+ struct Data {
263
+ std::atomic<uint64_t> client_calls_created{0};
264
+ std::atomic<uint64_t> server_calls_created{0};
265
+ std::atomic<uint64_t> client_channels_created{0};
266
+ std::atomic<uint64_t> client_subchannels_created{0};
267
+ std::atomic<uint64_t> server_channels_created{0};
268
+ std::atomic<uint64_t> syscall_write{0};
269
+ std::atomic<uint64_t> syscall_read{0};
270
+ std::atomic<uint64_t> tcp_read_alloc_8k{0};
271
+ std::atomic<uint64_t> tcp_read_alloc_64k{0};
272
+ std::atomic<uint64_t> http2_settings_writes{0};
273
+ std::atomic<uint64_t> http2_pings_sent{0};
274
+ std::atomic<uint64_t> http2_writes_begun{0};
275
+ std::atomic<uint64_t> http2_transport_stalls{0};
276
+ std::atomic<uint64_t> http2_stream_stalls{0};
277
+ std::atomic<uint64_t> cq_pluck_creates{0};
278
+ std::atomic<uint64_t> cq_next_creates{0};
279
+ std::atomic<uint64_t> cq_callback_creates{0};
280
+ HistogramCollector_32768_24 call_initial_size;
281
+ HistogramCollector_16777216_20 tcp_write_size;
282
+ HistogramCollector_80_10 tcp_write_iov_size;
283
+ HistogramCollector_16777216_20 tcp_read_size;
284
+ HistogramCollector_16777216_20 tcp_read_offer;
285
+ HistogramCollector_80_10 tcp_read_offer_iov_size;
286
+ HistogramCollector_16777216_20 http2_send_message_size;
287
+ };
288
+ PerCpu<Data> data_;
289
+ };
145
290
  } // namespace grpc_core
146
- extern const int grpc_stats_histo_buckets[7];
147
- extern const int grpc_stats_histo_start[7];
148
- extern const int* const grpc_stats_histo_bucket_boundaries[7];
149
- extern int (*const grpc_stats_get_bucket[7])(int value);
150
291
 
151
292
  #endif /* GRPC_CORE_LIB_DEBUG_STATS_DATA_H */
@@ -0,0 +1,71 @@
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_EVENT_ENGINE_COMMON_CLOSURES_H
16
+ #define GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <utility>
21
+
22
+ #include "absl/functional/any_invocable.h"
23
+
24
+ #include <grpc/event_engine/event_engine.h>
25
+
26
+ namespace grpc_event_engine {
27
+ namespace experimental {
28
+
29
+ class AnyInvocableClosure : public EventEngine::Closure {
30
+ public:
31
+ explicit AnyInvocableClosure(absl::AnyInvocable<void()> cb)
32
+ : cb_(std::move(cb)) {}
33
+ void Run() override { cb_(); }
34
+
35
+ private:
36
+ absl::AnyInvocable<void()> cb_;
37
+ };
38
+
39
+ class SelfDeletingClosure : public EventEngine::Closure {
40
+ public:
41
+ // Creates a SelfDeletingClosure.
42
+ // The closure will be deleted after Run is called.
43
+ static Closure* Create(absl::AnyInvocable<void()> cb) {
44
+ return new SelfDeletingClosure(std::move(cb), nullptr);
45
+ }
46
+ // Creates a SelfDeletingClosure with a custom destructor.
47
+ static Closure* Create(absl::AnyInvocable<void()> cb,
48
+ absl::AnyInvocable<void()> dest_cb) {
49
+ return new SelfDeletingClosure(std::move(cb), std::move(dest_cb));
50
+ }
51
+ ~SelfDeletingClosure() override {
52
+ if (dest_cb_) dest_cb_();
53
+ };
54
+
55
+ void Run() override {
56
+ cb_();
57
+ delete this;
58
+ }
59
+
60
+ private:
61
+ explicit SelfDeletingClosure(absl::AnyInvocable<void()> cb,
62
+ absl::AnyInvocable<void()> dest_cb)
63
+ : cb_(std::move(cb)), dest_cb_(std::move(dest_cb)) {}
64
+ absl::AnyInvocable<void()> cb_;
65
+ absl::AnyInvocable<void()> dest_cb_;
66
+ };
67
+
68
+ } // namespace experimental
69
+ } // namespace grpc_event_engine
70
+
71
+ #endif // GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
@@ -23,7 +23,13 @@
23
23
 
24
24
  #include <grpc/event_engine/event_engine.h>
25
25
 
26
+ #include "src/core/lib/channel/channel_args.h"
27
+ #include "src/core/lib/config/core_configuration.h"
28
+ #include "src/core/lib/debug/trace.h"
26
29
  #include "src/core/lib/event_engine/default_event_engine_factory.h"
30
+ #include "src/core/lib/event_engine/trace.h"
31
+ #include "src/core/lib/gprpp/no_destruct.h"
32
+ #include "src/core/lib/gprpp/sync.h"
27
33
 
28
34
  namespace grpc_event_engine {
29
35
  namespace experimental {
@@ -31,14 +37,23 @@ namespace experimental {
31
37
  namespace {
32
38
  std::atomic<absl::AnyInvocable<std::unique_ptr<EventEngine>()>*>
33
39
  g_event_engine_factory{nullptr};
34
- std::atomic<EventEngine*> g_event_engine{nullptr};
40
+ grpc_core::NoDestruct<grpc_core::Mutex> g_mu;
41
+ grpc_core::NoDestruct<std::weak_ptr<EventEngine>> g_event_engine;
35
42
  } // namespace
36
43
 
37
- void SetDefaultEventEngineFactory(
44
+ void SetEventEngineFactory(
38
45
  absl::AnyInvocable<std::unique_ptr<EventEngine>()> factory) {
39
46
  delete g_event_engine_factory.exchange(
40
47
  new absl::AnyInvocable<std::unique_ptr<EventEngine>()>(
41
48
  std::move(factory)));
49
+ // Forget any previous EventEngines
50
+ grpc_core::MutexLock lock(&*g_mu);
51
+ g_event_engine->reset();
52
+ }
53
+
54
+ void EventEngineFactoryReset() {
55
+ delete g_event_engine_factory.exchange(nullptr);
56
+ g_event_engine->reset();
42
57
  }
43
58
 
44
59
  std::unique_ptr<EventEngine> CreateEventEngine() {
@@ -48,23 +63,31 @@ std::unique_ptr<EventEngine> CreateEventEngine() {
48
63
  return DefaultEventEngineFactory();
49
64
  }
50
65
 
51
- EventEngine* GetDefaultEventEngine() {
52
- EventEngine* engine = g_event_engine.load(std::memory_order_acquire);
53
- if (engine == nullptr) {
54
- auto* created = CreateEventEngine().release();
55
- if (g_event_engine.compare_exchange_strong(engine, created,
56
- std::memory_order_acq_rel,
57
- std::memory_order_acquire)) {
58
- engine = created;
59
- } else {
60
- delete created;
61
- }
66
+ std::shared_ptr<EventEngine> GetDefaultEventEngine() {
67
+ grpc_core::MutexLock lock(&*g_mu);
68
+ if (std::shared_ptr<EventEngine> engine = g_event_engine->lock()) {
69
+ GRPC_EVENT_ENGINE_TRACE("DefaultEventEngine::%p use_count:%ld",
70
+ engine.get(), engine.use_count());
71
+ return engine;
62
72
  }
73
+ std::shared_ptr<EventEngine> engine{CreateEventEngine()};
74
+ GRPC_EVENT_ENGINE_TRACE("Created DefaultEventEngine::%p", engine.get());
75
+ *g_event_engine = engine;
63
76
  return engine;
64
77
  }
65
78
 
66
- void ResetDefaultEventEngine() {
67
- delete g_event_engine.exchange(nullptr, std::memory_order_acq_rel);
79
+ namespace {
80
+ grpc_core::ChannelArgs EnsureEventEngineInChannelArgs(
81
+ grpc_core::ChannelArgs args) {
82
+ if (args.ContainsObject<EventEngine>()) return args;
83
+ return args.SetObject<EventEngine>(GetDefaultEventEngine());
84
+ }
85
+ } // namespace
86
+
87
+ void RegisterEventEngineChannelArgPreconditioning(
88
+ grpc_core::CoreConfiguration::Builder* builder) {
89
+ builder->channel_args_preconditioning()->RegisterStage(
90
+ grpc_event_engine::experimental::EnsureEventEngineInChannelArgs);
68
91
  }
69
92
 
70
93
  } // namespace experimental
@@ -17,8 +17,18 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <memory>
21
+
20
22
  #include <grpc/event_engine/event_engine.h>
21
23
 
24
+ #include "src/core/lib/config/core_configuration.h"
25
+ #include "src/core/lib/promise/context.h"
26
+
27
+ namespace grpc_core {
28
+ template <>
29
+ struct ContextType<grpc_event_engine::experimental::EventEngine> {};
30
+ } // namespace grpc_core
31
+
22
32
  namespace grpc_event_engine {
23
33
  namespace experimental {
24
34
 
@@ -26,10 +36,12 @@ namespace experimental {
26
36
  ///
27
37
  /// The concept of a global EventEngine may go away in a post-iomgr world.
28
38
  /// Strongly consider whether you could use \a CreateEventEngine instead.
29
- EventEngine* GetDefaultEventEngine();
39
+ std::shared_ptr<EventEngine> GetDefaultEventEngine();
30
40
 
31
- /// Reset the default event engine
32
- void ResetDefaultEventEngine();
41
+ /// On ingress, ensure that an EventEngine exists in channel args via
42
+ /// preconditioning.
43
+ void RegisterEventEngineChannelArgPreconditioning(
44
+ grpc_core::CoreConfiguration::Builder* builder);
33
45
 
34
46
  } // namespace experimental
35
47
  } // namespace grpc_event_engine
@@ -18,8 +18,6 @@
18
18
 
19
19
  #include <memory>
20
20
 
21
- #include "absl/memory/memory.h"
22
-
23
21
  #include <grpc/event_engine/event_engine.h>
24
22
 
25
23
  #ifdef GPR_WINDOWS
@@ -29,7 +27,7 @@ namespace grpc_event_engine {
29
27
  namespace experimental {
30
28
 
31
29
  std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
32
- return absl::make_unique<WindowsEventEngine>();
30
+ return std::make_unique<WindowsEventEngine>();
33
31
  }
34
32
 
35
33
  } // namespace experimental
@@ -41,7 +39,7 @@ namespace grpc_event_engine {
41
39
  namespace experimental {
42
40
 
43
41
  std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
44
- return absl::make_unique<PosixEventEngine>();
42
+ return std::make_unique<PosixEventEngine>();
45
43
  }
46
44
 
47
45
  } // namespace experimental
@@ -25,7 +25,7 @@
25
25
  #include <grpc/event_engine/memory_request.h>
26
26
  #include <grpc/slice.h>
27
27
 
28
- #include "src/core/lib/slice/slice_refcount_base.h"
28
+ #include "src/core/lib/slice/slice_refcount.h"
29
29
 
30
30
  namespace grpc_event_engine {
31
31
  namespace experimental {
@@ -40,10 +40,16 @@ class Poller {
40
40
  // polling.
41
41
  //
42
42
  // Returns:
43
- // * Poller::WorkResult::kKicked if it was Kicked.
44
- // * Poller::WorkResult::kDeadlineExceeded if timeout occurred
45
- // * Poller::WorkResult::kOk, otherwise indicating that the callback function
46
- // was run synchonously before some events were processed.
43
+ // * Poller::WorkResult::kKicked if it was Kicked. A poller that was Kicked
44
+ // may still process some events and if so, it may have run the
45
+ // schedule_poll_again callback function synchronously. When the poller
46
+ // returns Poller::WorkResult::kKicked tts upto the user to determine
47
+ // if the schedule_poll_again callback has run or not.
48
+ // * Poller::WorkResult::kDeadlineExceeded if timeout occurred. The
49
+ // schedule_poll_again callback is not run in this case.
50
+ // * Poller::WorkResult::kOk, otherwise indicating that the
51
+ // schedule_poll_again callback function was run synchonously before some
52
+ // events were processed.
47
53
  virtual WorkResult Work(EventEngine::Duration timeout,
48
54
  absl::FunctionRef<void()> schedule_poll_again) = 0;
49
55
  // Trigger the threads executing Work(..) to break out as soon as possible.