grpc 1.47.0 → 1.48.0.pre1

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 (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -16,6 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
+ #ifndef GRPC_CORE_LIB_IOMGR_WORK_SERIALIZER_H
20
+ #define GRPC_CORE_LIB_IOMGR_WORK_SERIALIZER_H
19
21
  #include <grpc/support/port_platform.h>
20
22
 
21
23
  #include <atomic>
@@ -30,9 +32,6 @@
30
32
  #include "src/core/lib/gprpp/ref_counted.h"
31
33
  #include "src/core/lib/iomgr/exec_ctx.h"
32
34
 
33
- #ifndef GRPC_CORE_LIB_IOMGR_WORK_SERIALIZER_H
34
- #define GRPC_CORE_LIB_IOMGR_WORK_SERIALIZER_H
35
-
36
35
  namespace grpc_core {
37
36
 
38
37
  // WorkSerializer is a mechanism to schedule callbacks in a synchronized manner.
@@ -16,11 +16,14 @@
16
16
 
17
17
  #include "src/core/lib/matchers/matchers.h"
18
18
 
19
+ #include <utility>
20
+
19
21
  #include "absl/memory/memory.h"
20
- #include "absl/strings/str_cat.h"
22
+ #include "absl/status/status.h"
23
+ #include "absl/strings/ascii.h"
24
+ #include "absl/strings/match.h"
25
+ #include "absl/strings/numbers.h"
21
26
  #include "absl/strings/str_format.h"
22
- #include "absl/strings/str_join.h"
23
- #include "absl/strings/str_split.h"
24
27
 
25
28
  namespace grpc_core {
26
29
 
@@ -17,6 +17,8 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <stdint.h>
21
+
20
22
  #include <memory>
21
23
  #include <string>
22
24
 
@@ -26,7 +26,6 @@ namespace grpc_core {
26
26
  // GLOBALS
27
27
 
28
28
  GPR_THREAD_LOCAL(Activity*) Activity::g_current_activity_{nullptr};
29
- Waker::Unwakeable Waker::unwakeable_;
30
29
 
31
30
  namespace promise_detail {
32
31
 
@@ -61,13 +61,13 @@ class Wakeable {
61
61
  class Waker {
62
62
  public:
63
63
  explicit Waker(Wakeable* wakeable) : wakeable_(wakeable) {}
64
- Waker() : wakeable_(&unwakeable_) {}
65
- ~Waker() { wakeable_->Drop(); }
64
+ Waker() : Waker(nullptr) {}
65
+ ~Waker() {
66
+ if (wakeable_ != nullptr) wakeable_->Drop();
67
+ }
66
68
  Waker(const Waker&) = delete;
67
69
  Waker& operator=(const Waker&) = delete;
68
- Waker(Waker&& other) noexcept : wakeable_(other.wakeable_) {
69
- other.wakeable_ = &unwakeable_;
70
- }
70
+ Waker(Waker&& other) noexcept : wakeable_(other.Take()) {}
71
71
  Waker& operator=(Waker&& other) noexcept {
72
72
  std::swap(wakeable_, other.wakeable_);
73
73
  return *this;
@@ -75,8 +75,7 @@ class Waker {
75
75
 
76
76
  // Wake the underlying activity.
77
77
  void Wakeup() {
78
- wakeable_->Wakeup();
79
- wakeable_ = &unwakeable_;
78
+ if (auto* wakeable = Take()) wakeable->Wakeup();
80
79
  }
81
80
 
82
81
  template <typename H>
@@ -89,14 +88,9 @@ class Waker {
89
88
  }
90
89
 
91
90
  private:
92
- class Unwakeable final : public Wakeable {
93
- public:
94
- void Wakeup() final {}
95
- void Drop() final {}
96
- };
91
+ Wakeable* Take() { return absl::exchange(wakeable_, nullptr); }
97
92
 
98
93
  Wakeable* wakeable_;
99
- static Unwakeable unwakeable_;
100
94
  };
101
95
 
102
96
  // An Activity tracks execution of a single promise.
@@ -19,6 +19,7 @@
19
19
 
20
20
  #include <new>
21
21
  #include <type_traits>
22
+ #include <utility>
22
23
 
23
24
  #include "absl/status/status.h"
24
25
  #include "absl/status/statusor.h"
@@ -19,6 +19,7 @@
19
19
 
20
20
  #include <functional>
21
21
  #include <type_traits>
22
+ #include <utility>
22
23
 
23
24
  #include "absl/status/status.h"
24
25
  #include "absl/types/optional.h"
@@ -16,60 +16,65 @@
16
16
 
17
17
  #include "src/core/lib/promise/sleep.h"
18
18
 
19
+ #include <grpc/event_engine/event_engine.h>
20
+
21
+ #include "src/core/lib/event_engine/event_engine_factory.h"
19
22
  #include "src/core/lib/iomgr/exec_ctx.h"
20
23
 
21
24
  namespace grpc_core {
22
25
 
23
- Sleep::Sleep(Timestamp deadline) : state_(new State(deadline)) {
24
- GRPC_CLOSURE_INIT(&state_->on_timer, &OnTimer, state_, nullptr);
25
- }
26
+ using ::grpc_event_engine::experimental::GetDefaultEventEngine;
27
+
28
+ Sleep::Sleep(Timestamp deadline) : deadline_(deadline) {}
26
29
 
27
30
  Sleep::~Sleep() {
28
- if (state_ == nullptr) return;
29
- {
30
- MutexLock lock(&state_->mu);
31
- switch (state_->stage) {
32
- case Stage::kInitial:
33
- state_->Unref();
34
- break;
35
- case Stage::kStarted:
36
- grpc_timer_cancel(&state_->timer);
37
- break;
38
- case Stage::kDone:
39
- break;
40
- }
31
+ if (deadline_ == Timestamp::InfPast()) return;
32
+ ReleasableMutexLock lock(&mu_);
33
+ switch (stage_) {
34
+ case Stage::kInitial:
35
+ break;
36
+ case Stage::kStarted:
37
+ if (GetDefaultEventEngine()->Cancel(timer_handle_)) {
38
+ lock.Release();
39
+ OnTimer();
40
+ }
41
+ break;
42
+ case Stage::kDone:
43
+ break;
41
44
  }
42
- state_->Unref();
43
45
  }
44
46
 
45
- void Sleep::OnTimer(void* arg, grpc_error_handle) {
46
- auto* state = static_cast<State*>(arg);
47
- Waker waker;
47
+ void Sleep::OnTimer() {
48
+ Waker tmp_waker;
48
49
  {
49
- MutexLock lock(&state->mu);
50
- state->stage = Stage::kDone;
51
- waker = std::move(state->waker);
50
+ MutexLock lock(&mu_);
51
+ stage_ = Stage::kDone;
52
+ tmp_waker = std::move(waker_);
52
53
  }
53
- waker.Wakeup();
54
- state->Unref();
54
+ tmp_waker.Wakeup();
55
55
  }
56
56
 
57
57
  Poll<absl::Status> Sleep::operator()() {
58
- MutexLock lock(&state_->mu);
59
- switch (state_->stage) {
58
+ MutexLock lock(&mu_);
59
+ switch (stage_) {
60
60
  case Stage::kInitial:
61
- if (state_->deadline <= ExecCtx::Get()->Now()) {
61
+ if (deadline_ <= ExecCtx::Get()->Now()) {
62
62
  return absl::OkStatus();
63
63
  }
64
- state_->stage = Stage::kStarted;
65
- grpc_timer_init(&state_->timer, state_->deadline, &state_->on_timer);
64
+ stage_ = Stage::kStarted;
65
+ timer_handle_ = GetDefaultEventEngine()->RunAfter(
66
+ deadline_ - ExecCtx::Get()->Now(), [this] {
67
+ ApplicationCallbackExecCtx callback_exec_ctx;
68
+ ExecCtx exec_ctx;
69
+ OnTimer();
70
+ });
66
71
  break;
67
72
  case Stage::kStarted:
68
73
  break;
69
74
  case Stage::kDone:
70
75
  return absl::OkStatus();
71
76
  }
72
- state_->waker = Activity::current()->MakeNonOwningWaker();
77
+ waker_ = Activity::current()->MakeNonOwningWaker();
73
78
  return Pending{};
74
79
  }
75
80
 
@@ -22,12 +22,10 @@
22
22
  #include "absl/base/thread_annotations.h"
23
23
  #include "absl/status/status.h"
24
24
 
25
- #include "src/core/lib/gprpp/ref_counted.h"
25
+ #include <grpc/event_engine/event_engine.h>
26
+
26
27
  #include "src/core/lib/gprpp/sync.h"
27
28
  #include "src/core/lib/gprpp/time.h"
28
- #include "src/core/lib/iomgr/closure.h"
29
- #include "src/core/lib/iomgr/error.h"
30
- #include "src/core/lib/iomgr/timer.h"
31
29
  #include "src/core/lib/promise/activity.h"
32
30
  #include "src/core/lib/promise/poll.h"
33
31
 
@@ -41,34 +39,36 @@ class Sleep {
41
39
 
42
40
  Sleep(const Sleep&) = delete;
43
41
  Sleep& operator=(const Sleep&) = delete;
44
- Sleep(Sleep&& other) noexcept : state_(other.state_) {
45
- other.state_ = nullptr;
46
- }
42
+ Sleep(Sleep&& other) noexcept
43
+ : deadline_(other.deadline_), timer_handle_(other.timer_handle_) {
44
+ MutexLock lock2(&other.mu_);
45
+ stage_ = other.stage_;
46
+ waker_ = std::move(other.waker_);
47
+ other.deadline_ = Timestamp::InfPast();
48
+ };
47
49
  Sleep& operator=(Sleep&& other) noexcept {
48
- std::swap(state_, other.state_);
50
+ if (&other == this) return *this;
51
+ MutexLock lock1(&mu_);
52
+ MutexLock lock2(&other.mu_);
53
+ deadline_ = other.deadline_;
54
+ timer_handle_ = other.timer_handle_;
55
+ stage_ = other.stage_;
56
+ waker_ = std::move(other.waker_);
57
+ other.deadline_ = Timestamp::InfPast();
49
58
  return *this;
50
- }
59
+ };
51
60
 
52
61
  Poll<absl::Status> operator()();
53
62
 
54
63
  private:
55
- static void OnTimer(void* arg, grpc_error_handle error);
56
-
57
64
  enum class Stage { kInitial, kStarted, kDone };
58
- struct State {
59
- explicit State(Timestamp deadline) : deadline(deadline) {}
60
- RefCount refs{2};
61
- const Timestamp deadline;
62
- grpc_timer timer;
63
- grpc_closure on_timer;
64
- Mutex mu;
65
- Stage stage ABSL_GUARDED_BY(mu) = Stage::kInitial;
66
- Waker waker ABSL_GUARDED_BY(mu);
67
- void Unref() {
68
- if (refs.Unref()) delete this;
69
- }
70
- };
71
- State* state_;
65
+ void OnTimer();
66
+
67
+ Timestamp deadline_;
68
+ grpc_event_engine::experimental::EventEngine::TaskHandle timer_handle_;
69
+ Mutex mu_;
70
+ Stage stage_ ABSL_GUARDED_BY(mu_) = Stage::kInitial;
71
+ Waker waker_ ABSL_GUARDED_BY(mu_);
72
72
  };
73
73
 
74
74
  } // namespace grpc_core
@@ -20,6 +20,11 @@
20
20
 
21
21
  #include "src/core/lib/resolver/resolver.h"
22
22
 
23
+ #include <algorithm>
24
+ #include <utility>
25
+
26
+ #include "src/core/lib/channel/channel_args.h"
27
+
23
28
  grpc_core::DebugOnlyTraceFlag grpc_trace_resolver_refcount(false,
24
29
  "resolver_refcount");
25
30
 
@@ -19,10 +19,13 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <string>
23
+
22
24
  #include "absl/status/statusor.h"
23
25
 
24
26
  #include <grpc/impl/codegen/grpc_types.h>
25
27
 
28
+ #include "src/core/lib/debug/trace.h"
26
29
  #include "src/core/lib/gprpp/orphanable.h"
27
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
31
  #include "src/core/lib/resolver/server_address.h"
@@ -19,11 +19,14 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <memory>
23
+ #include <string>
24
+
25
+ #include "absl/strings/string_view.h"
22
26
  #include "absl/strings/strip.h"
23
27
 
24
- #include <grpc/support/string_util.h>
28
+ #include <grpc/impl/codegen/grpc_types.h>
25
29
 
26
- #include "src/core/lib/gprpp/memory.h"
27
30
  #include "src/core/lib/gprpp/orphanable.h"
28
31
  #include "src/core/lib/iomgr/iomgr_fwd.h"
29
32
  #include "src/core/lib/resolver/resolver.h"
@@ -18,19 +18,12 @@
18
18
 
19
19
  #include "src/core/lib/resolver/resolver_registry.h"
20
20
 
21
- #include <string.h>
22
-
23
- #include <vector>
24
-
25
- #include "absl/memory/memory.h"
21
+ #include "absl/status/status.h"
22
+ #include "absl/status/statusor.h"
26
23
  #include "absl/strings/str_cat.h"
27
24
  #include "absl/strings/str_format.h"
28
25
 
29
- #include <grpc/support/alloc.h>
30
26
  #include <grpc/support/log.h>
31
- #include <grpc/support/string_util.h>
32
-
33
- #include "src/core/lib/resolver/resolver_registry.h"
34
27
 
35
28
  namespace grpc_core {
36
29
 
@@ -19,9 +19,20 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include "src/core/lib/gprpp/memory.h"
22
+ #include <map>
23
+ #include <memory>
24
+ #include <string>
25
+ #include <utility>
26
+
27
+ #include "absl/strings/string_view.h"
28
+
29
+ #include <grpc/impl/codegen/grpc_types.h>
30
+
23
31
  #include "src/core/lib/gprpp/orphanable.h"
32
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
33
+ #include "src/core/lib/resolver/resolver.h"
24
34
  #include "src/core/lib/resolver/resolver_factory.h"
35
+ #include "src/core/lib/uri/uri_parser.h"
25
36
 
26
37
  namespace grpc_core {
27
38
 
@@ -20,16 +20,24 @@
20
20
 
21
21
  #include "src/core/lib/resolver/server_address.h"
22
22
 
23
+ #include <string.h>
24
+
25
+ #include <algorithm>
23
26
  #include <memory>
24
27
  #include <string>
28
+ #include <utility>
25
29
  #include <vector>
26
30
 
31
+ #include "absl/status/status.h"
32
+ #include "absl/status/statusor.h"
27
33
  #include "absl/strings/str_cat.h"
28
34
  #include "absl/strings/str_format.h"
29
35
  #include "absl/strings/str_join.h"
30
36
 
31
37
  #include "src/core/lib/address_utils/sockaddr_utils.h"
32
38
 
39
+ // IWYU pragma: no_include <sys/socket.h>
40
+
33
41
  namespace grpc_core {
34
42
 
35
43
  //
@@ -21,10 +21,17 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
24
27
  #include <map>
25
28
  #include <memory>
29
+ #include <string>
30
+ #include <vector>
31
+
32
+ #include "absl/memory/memory.h"
26
33
 
27
- #include "absl/container/inlined_vector.h"
34
+ #include <grpc/impl/codegen/grpc_types.h>
28
35
 
29
36
  #include "src/core/lib/channel/channel_args.h"
30
37
  #include "src/core/lib/gpr/useful.h"
@@ -110,7 +117,7 @@ class ServerAddress {
110
117
  // ServerAddressList
111
118
  //
112
119
 
113
- typedef absl::InlinedVector<ServerAddress, 1> ServerAddressList;
120
+ using ServerAddressList = std::vector<ServerAddress>;
114
121
 
115
122
  //
116
123
  // ServerAddressWeightAttribute
@@ -165,7 +165,7 @@ GrpcMemoryAllocatorImpl::GrpcMemoryAllocatorImpl(
165
165
  GrpcMemoryAllocatorImpl::~GrpcMemoryAllocatorImpl() {
166
166
  GPR_ASSERT(free_bytes_.load(std::memory_order_acquire) +
167
167
  sizeof(GrpcMemoryAllocatorImpl) ==
168
- taken_bytes_);
168
+ taken_bytes_.load(std::memory_order_relaxed));
169
169
  memory_quota_->Return(taken_bytes_);
170
170
  }
171
171
 
@@ -174,7 +174,7 @@ void GrpcMemoryAllocatorImpl::Shutdown() {
174
174
  OrphanablePtr<ReclaimerQueue::Handle>
175
175
  reclamation_handles[kNumReclamationPasses];
176
176
  {
177
- MutexLock lock(&memory_quota_mu_);
177
+ MutexLock lock(&reclaimer_mu_);
178
178
  GPR_ASSERT(!shutdown_);
179
179
  shutdown_ = true;
180
180
  memory_quota = memory_quota_;
@@ -207,16 +207,11 @@ absl::optional<size_t> GrpcMemoryAllocatorImpl::TryReserve(
207
207
  // Scale the request down according to memory pressure if we have that
208
208
  // flexibility.
209
209
  if (scaled_size_over_min != 0) {
210
- double pressure;
211
- size_t max_recommended_allocation_size;
212
- {
213
- MutexLock lock(&memory_quota_mu_);
214
- const auto pressure_and_max_recommended_allocation_size =
215
- memory_quota_->InstantaneousPressureAndMaxRecommendedAllocationSize();
216
- pressure = pressure_and_max_recommended_allocation_size.first;
217
- max_recommended_allocation_size =
218
- pressure_and_max_recommended_allocation_size.second;
219
- }
210
+ const auto pressure_and_max_recommended_allocation_size =
211
+ memory_quota_->InstantaneousPressureAndMaxRecommendedAllocationSize();
212
+ double pressure = pressure_and_max_recommended_allocation_size.first;
213
+ size_t max_recommended_allocation_size =
214
+ pressure_and_max_recommended_allocation_size.second;
220
215
  // Reduce allocation size proportional to the pressure > 80% usage.
221
216
  if (pressure > 0.8) {
222
217
  scaled_size_over_min =
@@ -265,9 +260,7 @@ void GrpcMemoryAllocatorImpl::MaybeDonateBack() {
265
260
  gpr_log(GPR_INFO, "[%p|%s] Early return %" PRIdPTR " bytes", this,
266
261
  name_.c_str(), ret);
267
262
  }
268
- MutexLock lock(&memory_quota_mu_);
269
- GPR_ASSERT(taken_bytes_ >= ret);
270
- taken_bytes_ -= ret;
263
+ GPR_ASSERT(taken_bytes_.fetch_sub(ret, std::memory_order_relaxed) >= ret);
271
264
  memory_quota_->Return(ret);
272
265
  return;
273
266
  }
@@ -275,29 +268,26 @@ void GrpcMemoryAllocatorImpl::MaybeDonateBack() {
275
268
  }
276
269
 
277
270
  void GrpcMemoryAllocatorImpl::Replenish() {
278
- MutexLock lock(&memory_quota_mu_);
279
- GPR_ASSERT(!shutdown_);
280
271
  // Attempt a fairly low rate exponential growth request size, bounded between
281
272
  // some reasonable limits declared at top of file.
282
- auto amount = Clamp(taken_bytes_ / 3, kMinReplenishBytes, kMaxReplenishBytes);
273
+ auto amount = Clamp(taken_bytes_.load(std::memory_order_relaxed) / 3,
274
+ kMinReplenishBytes, kMaxReplenishBytes);
283
275
  // Take the requested amount from the quota.
284
276
  memory_quota_->Take(amount);
285
277
  // Record that we've taken it.
286
- taken_bytes_ += amount;
278
+ taken_bytes_.fetch_add(amount, std::memory_order_relaxed);
287
279
  // Add the taken amount to the free pool.
288
280
  free_bytes_.fetch_add(amount, std::memory_order_acq_rel);
289
281
  // See if we can add ourselves as a reclaimer.
290
- MaybeRegisterReclaimerLocked();
282
+ MaybeRegisterReclaimer();
291
283
  }
292
284
 
293
285
  void GrpcMemoryAllocatorImpl::MaybeRegisterReclaimer() {
294
- MutexLock lock(&memory_quota_mu_);
295
- MaybeRegisterReclaimerLocked();
296
- }
297
-
298
- void GrpcMemoryAllocatorImpl::MaybeRegisterReclaimerLocked() {
299
286
  // If the reclaimer is already registered, then there's nothing to do.
300
- if (registered_reclaimer_) return;
287
+ if (registered_reclaimer_.exchange(true, std::memory_order_relaxed)) {
288
+ return;
289
+ }
290
+ MutexLock lock(&reclaimer_mu_);
301
291
  if (shutdown_) return;
302
292
  // Grab references to the things we'll need
303
293
  auto self = shared_from_this();
@@ -308,49 +298,17 @@ void GrpcMemoryAllocatorImpl::MaybeRegisterReclaimerLocked() {
308
298
  auto self = self_weak.lock();
309
299
  if (self == nullptr) return;
310
300
  auto* p = static_cast<GrpcMemoryAllocatorImpl*>(self.get());
311
- MutexLock lock(&p->memory_quota_mu_);
312
- p->registered_reclaimer_ = false;
301
+ p->registered_reclaimer_.store(false, std::memory_order_relaxed);
313
302
  // Figure out how many bytes we can return to the quota.
314
303
  size_t return_bytes = p->free_bytes_.exchange(0, std::memory_order_acq_rel);
315
304
  if (return_bytes == 0) return;
316
305
  // Subtract that from our outstanding balance.
317
- p->taken_bytes_ -= return_bytes;
306
+ p->taken_bytes_.fetch_sub(return_bytes);
318
307
  // And return them to the quota.
319
308
  p->memory_quota_->Return(return_bytes);
320
309
  });
321
310
  }
322
311
 
323
- void GrpcMemoryAllocatorImpl::Rebind(
324
- std::shared_ptr<BasicMemoryQuota> memory_quota) {
325
- MutexLock lock(&memory_quota_mu_);
326
- GPR_ASSERT(!shutdown_);
327
- if (memory_quota_ == memory_quota) return;
328
- // Return memory to the original memory quota.
329
- memory_quota_->Return(taken_bytes_);
330
- // Reassign any queued reclaimers
331
- for (size_t i = 0; i < kNumReclamationPasses; i++) {
332
- if (reclamation_handles_[i] != nullptr) {
333
- reclamation_handles_[i]->Requeue(memory_quota->reclaimer_queue(i));
334
- }
335
- }
336
- // Switch to the new memory quota, leaving the old one in memory_quota so that
337
- // when we unref it, we are outside of lock.
338
- memory_quota_.swap(memory_quota);
339
- // Drop our freed memory down to zero, to avoid needing to ask the new
340
- // quota for memory we're not currently using.
341
- taken_bytes_ -= free_bytes_.exchange(0, std::memory_order_acq_rel);
342
- // And let the new quota know how much we're already using.
343
- memory_quota_->Take(taken_bytes_);
344
- }
345
-
346
- //
347
- // MemoryOwner
348
- //
349
-
350
- void MemoryOwner::Rebind(MemoryQuota* quota) {
351
- impl()->Rebind(quota->memory_quota_);
352
- }
353
-
354
312
  //
355
313
  // BasicMemoryQuota
356
314
  //
@@ -288,11 +288,6 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
288
288
  std::shared_ptr<BasicMemoryQuota> memory_quota, std::string name);
289
289
  ~GrpcMemoryAllocatorImpl() override;
290
290
 
291
- // Rebind - Swaps the underlying quota for this allocator, taking care to
292
- // make sure memory allocated is moved to allocations against the new quota.
293
- void Rebind(std::shared_ptr<BasicMemoryQuota> memory_quota)
294
- ABSL_LOCKS_EXCLUDED(memory_quota_mu_);
295
-
296
291
  // Reserve bytes from the quota.
297
292
  // If we enter overcommit, reclamation will begin concurrently.
298
293
  // Returns the number of bytes reserved.
@@ -315,7 +310,7 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
315
310
  // Post a reclamation function.
316
311
  template <typename F>
317
312
  void PostReclaimer(ReclamationPass pass, F fn) {
318
- MutexLock lock(&memory_quota_mu_);
313
+ MutexLock lock(&reclaimer_mu_);
319
314
  GPR_ASSERT(!shutdown_);
320
315
  InsertReclaimer(static_cast<size_t>(pass), std::move(fn));
321
316
  }
@@ -325,7 +320,6 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
325
320
 
326
321
  // Read the instantaneous memory pressure
327
322
  double InstantaneousPressure() const {
328
- MutexLock lock(&memory_quota_mu_);
329
323
  return memory_quota_->InstantaneousPressureAndMaxRecommendedAllocationSize()
330
324
  .first;
331
325
  }
@@ -344,39 +338,34 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
344
338
  void MaybeDonateBack();
345
339
  // Replenish bytes from the quota, without blocking, possibly entering
346
340
  // overcommit.
347
- void Replenish() ABSL_LOCKS_EXCLUDED(memory_quota_mu_);
341
+ void Replenish();
348
342
  // If we have not already, register a reclamation function against the quota
349
343
  // to sweep any free memory back to that quota.
350
- void MaybeRegisterReclaimer() ABSL_LOCKS_EXCLUDED(memory_quota_mu_);
351
- void MaybeRegisterReclaimerLocked()
352
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(memory_quota_mu_);
344
+ void MaybeRegisterReclaimer() ABSL_LOCKS_EXCLUDED(reclaimer_mu_);
353
345
  template <typename F>
354
346
  void InsertReclaimer(size_t pass, F fn)
355
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(memory_quota_mu_) {
347
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(reclaimer_mu_) {
356
348
  reclamation_handles_[pass] =
357
349
  memory_quota_->reclaimer_queue(pass)->Insert(std::move(fn));
358
350
  }
359
351
 
352
+ // Backing resource quota.
353
+ const std::shared_ptr<BasicMemoryQuota> memory_quota_;
360
354
  // Amount of memory this allocator has cached for its own use: to avoid quota
361
355
  // contention, each MemoryAllocator can keep some memory in addition to what
362
356
  // it is immediately using, and the quota can pull it back under memory
363
357
  // pressure.
364
358
  std::atomic<size_t> free_bytes_{0};
365
- // Mutex guarding the backing resource quota.
366
- mutable Mutex memory_quota_mu_;
367
- // Backing resource quota.
368
- std::shared_ptr<BasicMemoryQuota> memory_quota_
369
- ABSL_GUARDED_BY(memory_quota_mu_);
370
359
  // Amount of memory taken from the quota by this allocator.
371
- size_t taken_bytes_ ABSL_GUARDED_BY(memory_quota_mu_) =
372
- sizeof(GrpcMemoryAllocatorImpl);
373
- bool shutdown_ ABSL_GUARDED_BY(memory_quota_mu_) = false;
374
- bool registered_reclaimer_ ABSL_GUARDED_BY(memory_quota_mu_) = false;
360
+ std::atomic<size_t> taken_bytes_{sizeof(GrpcMemoryAllocatorImpl)};
361
+ std::atomic<bool> registered_reclaimer_{false};
362
+ Mutex reclaimer_mu_;
363
+ bool shutdown_ ABSL_GUARDED_BY(reclaimer_mu_) = false;
375
364
  // Indices into the various reclaimer queues, used so that we can cancel
376
365
  // reclamation should we shutdown or get rebound.
377
366
  OrphanablePtr<ReclaimerQueue::Handle>
378
367
  reclamation_handles_[kNumReclamationPasses] ABSL_GUARDED_BY(
379
- memory_quota_mu_);
368
+ reclaimer_mu_);
380
369
  // Name of this allocator.
381
370
  std::string name_;
382
371
  };
@@ -402,9 +391,6 @@ class MemoryOwner final : public MemoryAllocator {
402
391
  impl()->PostReclaimer(pass, std::move(fn));
403
392
  }
404
393
 
405
- // Rebind to a different quota.
406
- void Rebind(MemoryQuota* quota);
407
-
408
394
  // Instantaneous memory pressure in the underlying quota.
409
395
  double InstantaneousPressure() const {
410
396
  return impl()->InstantaneousPressure();