grpc 1.46.3 → 1.47.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 (481) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/version.rb +1 -1
  461. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  462. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  463. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  464. metadata +36 -29
  465. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  466. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  467. data/src/core/lib/event_engine/sockaddr.h +0 -44
  468. data/src/core/lib/gprpp/capture.h +0 -76
  469. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  470. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  471. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  472. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  473. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  474. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  475. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  476. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  477. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  478. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  479. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  480. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  481. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include "src/core/lib/promise/sleep.h"
18
18
 
19
+ #include "src/core/lib/iomgr/exec_ctx.h"
20
+
19
21
  namespace grpc_core {
20
22
 
21
23
  Sleep::Sleep(Timestamp deadline) : state_(new State(deadline)) {
@@ -17,6 +17,16 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <utility>
21
+
22
+ #include "absl/base/thread_annotations.h"
23
+ #include "absl/status/status.h"
24
+
25
+ #include "src/core/lib/gprpp/ref_counted.h"
26
+ #include "src/core/lib/gprpp/sync.h"
27
+ #include "src/core/lib/gprpp/time.h"
28
+ #include "src/core/lib/iomgr/closure.h"
29
+ #include "src/core/lib/iomgr/error.h"
20
30
  #include "src/core/lib/iomgr/timer.h"
21
31
  #include "src/core/lib/promise/activity.h"
22
32
  #include "src/core/lib/promise/poll.h"
@@ -17,12 +17,12 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <tuple>
20
+ #include <type_traits>
21
21
  #include <utility>
22
22
 
23
+ #include "absl/meta/type_traits.h"
23
24
  #include "absl/status/status.h"
24
25
  #include "absl/status/statusor.h"
25
- #include "absl/types/variant.h"
26
26
 
27
27
  #include "src/core/lib/promise/detail/basic_seq.h"
28
28
  #include "src/core/lib/promise/detail/status.h"
@@ -25,11 +25,10 @@
25
25
 
26
26
  #include "src/core/lib/gprpp/memory.h"
27
27
  #include "src/core/lib/gprpp/orphanable.h"
28
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
28
29
  #include "src/core/lib/resolver/resolver.h"
29
30
  #include "src/core/lib/uri/uri_parser.h"
30
31
 
31
- typedef struct grpc_pollset_set grpc_pollset_set;
32
-
33
32
  namespace grpc_core {
34
33
 
35
34
  // TODO(yashkt): Move WorkSerializer to its own Bazel target, depend on that
@@ -25,6 +25,7 @@
25
25
  #include <vector>
26
26
 
27
27
  #include "absl/strings/str_cat.h"
28
+ #include "absl/strings/str_format.h"
28
29
  #include "absl/strings/str_join.h"
29
30
 
30
31
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -80,6 +81,7 @@ ServerAddress::ServerAddress(ServerAddress&& other) noexcept
80
81
  attributes_(std::move(other.attributes_)) {
81
82
  other.args_ = nullptr;
82
83
  }
84
+
83
85
  ServerAddress& ServerAddress::operator=(ServerAddress&& other) noexcept {
84
86
  address_ = other.address_;
85
87
  grpc_channel_args_destroy(args_);
@@ -149,12 +151,12 @@ ServerAddress ServerAddress::WithAttribute(
149
151
  }
150
152
 
151
153
  std::string ServerAddress::ToString() const {
154
+ auto addr_str = grpc_sockaddr_to_string(&address_, false);
152
155
  std::vector<std::string> parts = {
153
- grpc_sockaddr_to_string(&address_, false),
156
+ addr_str.ok() ? addr_str.value() : addr_str.status().ToString(),
154
157
  };
155
158
  if (args_ != nullptr) {
156
- parts.emplace_back(
157
- absl::StrCat("args={", grpc_channel_args_string(args_), "}"));
159
+ parts.emplace_back(absl::StrCat("args=", grpc_channel_args_string(args_)));
158
160
  }
159
161
  if (!attributes_.empty()) {
160
162
  std::vector<std::string> attrs;
@@ -167,4 +169,8 @@ std::string ServerAddress::ToString() const {
167
169
  return absl::StrJoin(parts, " ");
168
170
  }
169
171
 
172
+ std::string ServerAddressWeightAttribute::ToString() const {
173
+ return absl::StrFormat("%d", weight_);
174
+ }
175
+
170
176
  } // namespace grpc_core
@@ -25,7 +25,6 @@
25
25
  #include <memory>
26
26
 
27
27
  #include "absl/container/inlined_vector.h"
28
- #include "absl/strings/str_format.h"
29
28
 
30
29
  #include "src/core/lib/channel/channel_args.h"
31
30
  #include "src/core/lib/gpr/useful.h"
@@ -96,6 +95,9 @@ class ServerAddress {
96
95
  ServerAddress WithAttribute(const char* key,
97
96
  std::unique_ptr<AttributeInterface> value) const;
98
97
 
98
+ // TODO(ctiller): Prior to making this a public API we should ensure that the
99
+ // channel args are not part of the generated string, lest we make that debug
100
+ // format load-bearing via Hyrum's law.
99
101
  std::string ToString() const;
100
102
 
101
103
  private:
@@ -131,9 +133,7 @@ class ServerAddressWeightAttribute : public ServerAddress::AttributeInterface {
131
133
  return QsortCompare(weight_, other_locality_attr->weight_);
132
134
  }
133
135
 
134
- std::string ToString() const override {
135
- return absl::StrFormat("%d", weight_);
136
- }
136
+ std::string ToString() const override;
137
137
 
138
138
  private:
139
139
  uint32_t weight_;
@@ -16,11 +16,24 @@
16
16
 
17
17
  #include "src/core/lib/resource_quota/api.h"
18
18
 
19
+ #include <stdint.h>
20
+
21
+ #include <atomic>
22
+ #include <memory>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/strings/str_cat.h"
27
+
19
28
  #include <grpc/grpc.h>
20
29
 
21
- #include "src/core/lib/gpr/useful.h"
30
+ #include "src/core/lib/channel/channel_args.h"
31
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
32
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
22
33
  #include "src/core/lib/iomgr/exec_ctx.h"
34
+ #include "src/core/lib/resource_quota/memory_quota.h"
23
35
  #include "src/core/lib/resource_quota/resource_quota.h"
36
+ #include "src/core/lib/resource_quota/thread_quota.h"
24
37
 
25
38
  namespace grpc_core {
26
39
 
@@ -17,7 +17,10 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include "src/core/lib/channel/channel_args.h"
20
+ #include <stddef.h>
21
+
22
+ #include <grpc/impl/codegen/grpc_types.h>
23
+
21
24
  #include "src/core/lib/config/core_configuration.h"
22
25
  #include "src/core/lib/resource_quota/resource_quota.h"
23
26
 
@@ -20,17 +20,11 @@
20
20
 
21
21
  #include "src/core/lib/resource_quota/arena.h"
22
22
 
23
- #include <string.h>
24
-
25
23
  #include <new>
26
24
 
27
25
  #include <grpc/support/alloc.h>
28
- #include <grpc/support/atm.h>
29
- #include <grpc/support/log.h>
30
- #include <grpc/support/sync.h>
31
26
 
32
27
  #include "src/core/lib/gpr/alloc.h"
33
- #include "src/core/lib/gprpp/memory.h"
34
28
 
35
29
  namespace {
36
30
 
@@ -34,8 +34,7 @@
34
34
  #include <new>
35
35
  #include <utility>
36
36
 
37
- #include <grpc/support/alloc.h>
38
- #include <grpc/support/sync.h>
37
+ #include <grpc/event_engine/memory_allocator.h>
39
38
 
40
39
  #include "src/core/lib/gpr/alloc.h"
41
40
  #include "src/core/lib/promise/context.h"
@@ -16,8 +16,18 @@
16
16
 
17
17
  #include "src/core/lib/resource_quota/memory_quota.h"
18
18
 
19
+ #include <inttypes.h>
20
+
21
+ #include <algorithm>
19
22
  #include <atomic>
23
+ #include <tuple>
24
+ #include <type_traits>
25
+
26
+ #include "absl/status/status.h"
27
+ #include "absl/strings/str_cat.h"
28
+ #include "absl/utility/utility.h"
20
29
 
30
+ #include "src/core/lib/debug/trace.h"
21
31
  #include "src/core/lib/gpr/useful.h"
22
32
  #include "src/core/lib/gprpp/mpscq.h"
23
33
  #include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
@@ -25,7 +35,6 @@
25
35
  #include "src/core/lib/promise/map.h"
26
36
  #include "src/core/lib/promise/race.h"
27
37
  #include "src/core/lib/promise/seq.h"
28
- #include "src/core/lib/resource_quota/memory_quota.h"
29
38
  #include "src/core/lib/resource_quota/trace.h"
30
39
 
31
40
  namespace grpc_core {
@@ -183,7 +192,9 @@ size_t GrpcMemoryAllocatorImpl::Reserve(MemoryRequest request) {
183
192
  while (true) {
184
193
  // Attempt to reserve memory from our pool.
185
194
  auto reservation = TryReserve(request);
186
- if (reservation.has_value()) return *reservation;
195
+ if (reservation.has_value()) {
196
+ return *reservation;
197
+ }
187
198
  // If that failed, grab more from the quota and retry.
188
199
  Replenish();
189
200
  }
@@ -241,6 +252,28 @@ absl::optional<size_t> GrpcMemoryAllocatorImpl::TryReserve(
241
252
  }
242
253
  }
243
254
 
255
+ void GrpcMemoryAllocatorImpl::MaybeDonateBack() {
256
+ size_t free = free_bytes_.load(std::memory_order_relaxed);
257
+ const size_t kReduceToSize = kMaxQuotaBufferSize / 2;
258
+ while (true) {
259
+ if (free <= kReduceToSize) return;
260
+ size_t ret = free - kReduceToSize;
261
+ if (free_bytes_.compare_exchange_weak(free, kReduceToSize,
262
+ std::memory_order_acq_rel,
263
+ std::memory_order_acquire)) {
264
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
265
+ gpr_log(GPR_INFO, "[%p|%s] Early return %" PRIdPTR " bytes", this,
266
+ name_.c_str(), ret);
267
+ }
268
+ MutexLock lock(&memory_quota_mu_);
269
+ GPR_ASSERT(taken_bytes_ >= ret);
270
+ taken_bytes_ -= ret;
271
+ memory_quota_->Return(ret);
272
+ return;
273
+ }
274
+ }
275
+ }
276
+
244
277
  void GrpcMemoryAllocatorImpl::Replenish() {
245
278
  MutexLock lock(&memory_quota_mu_);
246
279
  GPR_ASSERT(!shutdown_);
@@ -376,8 +409,12 @@ void BasicMemoryQuota::Start() {
376
409
  std::tuple<const char*, RefCountedPtr<ReclaimerQueue::Handle>> arg) {
377
410
  auto reclaimer = std::move(std::get<1>(arg));
378
411
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
379
- gpr_log(GPR_INFO, "RQ: %s perform %s reclamation",
380
- self->name_.c_str(), std::get<0>(arg));
412
+ double free = std::max(intptr_t(0), self->free_bytes_.load());
413
+ size_t quota_size = self->quota_size_.load();
414
+ gpr_log(GPR_INFO,
415
+ "RQ: %s perform %s reclamation. Available free bytes: %f, "
416
+ "total quota_size: %zu",
417
+ self->name_.c_str(), std::get<0>(arg), free, quota_size);
381
418
  }
382
419
  // One of the reclaimer queues gave us a way to get back memory.
383
420
  // Call the reclaimer with a token that contains enough to wake us
@@ -436,7 +473,12 @@ void BasicMemoryQuota::FinishReclamation(uint64_t token, Waker waker) {
436
473
  std::memory_order_relaxed,
437
474
  std::memory_order_relaxed)) {
438
475
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
439
- gpr_log(GPR_INFO, "RQ: %s reclamation complete", name_.c_str());
476
+ double free = std::max(intptr_t(0), free_bytes_.load());
477
+ size_t quota_size = quota_size_.load();
478
+ gpr_log(GPR_INFO,
479
+ "RQ: %s reclamation complete. Available free bytes: %f, "
480
+ "total quota_size: %zu",
481
+ name_.c_str(), free, quota_size);
440
482
  }
441
483
  waker.Wakeup();
442
484
  }
@@ -17,18 +17,25 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <algorithm>
20
+ #include <stdint.h>
21
+
21
22
  #include <atomic>
22
23
  #include <cstddef>
23
24
  #include <limits>
24
25
  #include <memory>
25
- #include <queue>
26
- #include <vector>
26
+ #include <string>
27
+ #include <utility>
28
+
29
+ #include "absl/base/thread_annotations.h"
30
+ #include "absl/strings/string_view.h"
31
+ #include "absl/types/optional.h"
27
32
 
28
33
  #include <grpc/event_engine/memory_allocator.h>
29
- #include <grpc/slice.h>
34
+ #include <grpc/event_engine/memory_request.h>
35
+ #include <grpc/support/log.h>
30
36
 
31
37
  #include "src/core/lib/gprpp/orphanable.h"
38
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
32
39
  #include "src/core/lib/gprpp/sync.h"
33
40
  #include "src/core/lib/promise/activity.h"
34
41
  #include "src/core/lib/promise/poll.h"
@@ -73,6 +80,7 @@ enum class ReclamationPass {
73
80
  kDestructive = 3,
74
81
  };
75
82
  static constexpr size_t kNumReclamationPasses = 4;
83
+ static constexpr size_t kMaxQuotaBufferSize = 1024 * 1024;
76
84
 
77
85
  // For each reclamation function run we construct a ReclamationSweep.
78
86
  // When this object is finally destroyed (it may be moved several times first),
@@ -295,7 +303,12 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
295
303
  // Add the released memory to our free bytes counter... if this increases
296
304
  // from 0 to non-zero, then we have more to do, otherwise, we're actually
297
305
  // done.
298
- if (free_bytes_.fetch_add(n, std::memory_order_release) != 0) return;
306
+ size_t prev_free = free_bytes_.fetch_add(n, std::memory_order_release);
307
+ if (prev_free + n > kMaxQuotaBufferSize) {
308
+ // Try to immediately return some free'ed memory back to the total quota.
309
+ MaybeDonateBack();
310
+ }
311
+ if (prev_free != 0) return;
299
312
  MaybeRegisterReclaimer();
300
313
  }
301
314
 
@@ -323,6 +336,12 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
323
336
  private:
324
337
  // Primitive reservation function.
325
338
  absl::optional<size_t> TryReserve(MemoryRequest request) GRPC_MUST_USE_RESULT;
339
+ // This function may be invoked during a memory release operation. If the
340
+ // total free_bytes in this allocator/local cache exceeds
341
+ // kMaxQuotaBufferSize / 2, donate the excess free_bytes in this cache back
342
+ // to the total quota immediately. This helps prevent free bytes in any
343
+ // particular allocator from growing too large.
344
+ void MaybeDonateBack();
326
345
  // Replenish bytes from the quota, without blocking, possibly entering
327
346
  // overcommit.
328
347
  void Replenish() ABSL_LOCKS_EXCLUDED(memory_quota_mu_);
@@ -17,16 +17,24 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <string>
21
+ #include <utility>
22
+
23
+ #include "absl/strings/string_view.h"
24
+
20
25
  #include <grpc/impl/codegen/grpc_types.h>
21
26
 
22
27
  #include "src/core/lib/gpr/useful.h"
23
28
  #include "src/core/lib/gprpp/cpp_impl_of.h"
29
+ #include "src/core/lib/gprpp/ref_counted.h"
30
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
24
31
  #include "src/core/lib/resource_quota/memory_quota.h"
25
32
  #include "src/core/lib/resource_quota/thread_quota.h"
26
33
 
27
34
  namespace grpc_core {
28
35
 
29
36
  class ResourceQuota;
37
+
30
38
  using ResourceQuotaRefPtr = RefCountedPtr<ResourceQuota>;
31
39
 
32
40
  class ResourceQuota : public RefCounted<ResourceQuota>,
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include "src/core/lib/resource_quota/thread_quota.h"
18
18
 
19
+ #include <grpc/support/log.h>
20
+
19
21
  namespace grpc_core {
20
22
 
21
23
  ThreadQuota::ThreadQuota() = default;
@@ -18,8 +18,12 @@
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
20
  #include <cstddef>
21
+ #include <limits>
22
+
23
+ #include "absl/base/thread_annotations.h"
21
24
 
22
25
  #include "src/core/lib/gprpp/ref_counted.h"
26
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
23
27
  #include "src/core/lib/gprpp/sync.h"
24
28
 
25
29
  namespace grpc_core {
@@ -16,7 +16,10 @@
16
16
 
17
17
  #include "src/core/lib/security/authorization/grpc_server_authz_filter.h"
18
18
 
19
+ #include "absl/strings/str_join.h"
20
+
19
21
  #include "src/core/lib/channel/promise_based_filter.h"
22
+ #include "src/core/lib/promise/promise.h"
20
23
  #include "src/core/lib/security/authorization/evaluate_args.h"
21
24
  #include "src/core/lib/transport/transport.h"
22
25
 
@@ -56,7 +56,10 @@ grpc_alts_credentials::create_security_connector(
56
56
  this->Ref(), std::move(call_creds), target_name);
57
57
  }
58
58
 
59
- const char* grpc_alts_credentials::type() const { return "Alts"; }
59
+ grpc_core::UniqueTypeName grpc_alts_credentials::type() const {
60
+ static grpc_core::UniqueTypeName::Factory kFactory("Alts");
61
+ return kFactory.Create();
62
+ }
60
63
 
61
64
  grpc_alts_server_credentials::grpc_alts_server_credentials(
62
65
  const grpc_alts_credentials_options* options,
@@ -79,7 +82,10 @@ grpc_alts_server_credentials::~grpc_alts_server_credentials() {
79
82
  gpr_free(handshaker_service_url_);
80
83
  }
81
84
 
82
- const char* grpc_alts_server_credentials::type() const { return "Alts"; }
85
+ grpc_core::UniqueTypeName grpc_alts_server_credentials::type() const {
86
+ static grpc_core::UniqueTypeName::Factory kFactory("Alts");
87
+ return kFactory.Create();
88
+ }
83
89
 
84
90
  grpc_channel_credentials* grpc_alts_credentials_create_customized(
85
91
  const grpc_alts_credentials_options* options,
@@ -39,7 +39,7 @@ class grpc_alts_credentials final : public grpc_channel_credentials {
39
39
  const char* target_name, const grpc_channel_args* args,
40
40
  grpc_channel_args** new_args) override;
41
41
 
42
- const char* type() const override;
42
+ grpc_core::UniqueTypeName type() const override;
43
43
 
44
44
  const grpc_alts_credentials_options* options() const { return options_; }
45
45
  grpc_alts_credentials_options* mutable_options() { return options_; }
@@ -66,7 +66,7 @@ class grpc_alts_server_credentials final : public grpc_server_credentials {
66
66
  grpc_core::RefCountedPtr<grpc_server_security_connector>
67
67
  create_security_connector(const grpc_channel_args* /* args */) override;
68
68
 
69
- const char* type() const override;
69
+ grpc_core::UniqueTypeName type() const override;
70
70
 
71
71
  const grpc_alts_credentials_options* options() const { return options_; }
72
72
  grpc_alts_credentials_options* mutable_options() { return options_; }
@@ -21,6 +21,8 @@
21
21
  #include "absl/strings/str_cat.h"
22
22
  #include "absl/strings/string_view.h"
23
23
 
24
+ #include <grpc/support/string_util.h>
25
+
24
26
  namespace grpc_core {
25
27
 
26
28
  namespace {
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/impl/codegen/grpc_types.h>
23
23
 
24
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
24
25
  #include "src/core/lib/json/json.h"
25
26
 
26
27
  struct grpc_channel_credentials;
@@ -41,8 +41,9 @@
41
41
  // grpc_composite_channel_credentials
42
42
  //
43
43
 
44
- const char* grpc_composite_channel_credentials::type() const {
45
- return "Composite";
44
+ grpc_core::UniqueTypeName grpc_composite_channel_credentials::type() const {
45
+ static grpc_core::UniqueTypeName::Factory kFactory("Composite");
46
+ return kFactory.Create();
46
47
  }
47
48
 
48
49
  /* -- Composite call credentials. -- */
@@ -60,7 +61,10 @@ grpc_composite_call_credentials::GetRequestMetadata(
60
61
  });
61
62
  }
62
63
 
63
- const char* grpc_composite_call_credentials::Type() { return "Composite"; }
64
+ grpc_core::UniqueTypeName grpc_composite_call_credentials::Type() {
65
+ static grpc_core::UniqueTypeName::Factory kFactory("Composite");
66
+ return kFactory.Create();
67
+ }
64
68
 
65
69
  std::string grpc_composite_call_credentials::debug_string() {
66
70
  std::vector<std::string> outputs;
@@ -51,11 +51,12 @@ class grpc_composite_channel_credentials : public grpc_channel_credentials {
51
51
  const char* target, const grpc_channel_args* args,
52
52
  grpc_channel_args** new_args) override;
53
53
 
54
- grpc_channel_args* update_arguments(grpc_channel_args* args) override {
54
+ grpc_core::ChannelArgs update_arguments(
55
+ grpc_core::ChannelArgs args) override {
55
56
  return inner_creds_->update_arguments(args);
56
57
  }
57
58
 
58
- const char* type() const override;
59
+ grpc_core::UniqueTypeName type() const override;
59
60
 
60
61
  const grpc_channel_credentials* inner_creds() const {
61
62
  return inner_creds_.get();
@@ -98,9 +99,9 @@ class grpc_composite_call_credentials : public grpc_call_credentials {
98
99
  const CallCredentialsList& inner() const { return inner_; }
99
100
  std::string debug_string() override;
100
101
 
101
- static const char* Type();
102
+ static grpc_core::UniqueTypeName Type();
102
103
 
103
- const char* type() const override { return Type(); }
104
+ grpc_core::UniqueTypeName type() const override { return Type(); }
104
105
 
105
106
  private:
106
107
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -29,7 +29,9 @@
29
29
  #include <grpc/grpc_security.h>
30
30
  #include <grpc/support/sync.h>
31
31
 
32
+ #include "src/core/lib/channel/channel_args.h"
32
33
  #include "src/core/lib/gprpp/ref_counted.h"
34
+ #include "src/core/lib/gprpp/unique_type_name.h"
33
35
  #include "src/core/lib/iomgr/polling_entity.h"
34
36
  #include "src/core/lib/promise/arena_promise.h"
35
37
  #include "src/core/lib/security/context/security_context.h"
@@ -92,6 +94,15 @@ void grpc_override_well_known_credentials_path_getter(
92
94
  struct grpc_channel_credentials
93
95
  : grpc_core::RefCounted<grpc_channel_credentials> {
94
96
  public:
97
+ static absl::string_view ChannelArgName() {
98
+ return GRPC_ARG_CHANNEL_CREDENTIALS;
99
+ }
100
+
101
+ static int ChannelArgsCompare(const grpc_channel_credentials* args1,
102
+ const grpc_channel_credentials* args2) {
103
+ return args1->cmp(args2);
104
+ }
105
+
95
106
  // Creates a security connector for the channel. May also create new channel
96
107
  // args for the channel to be used in place of the passed in const args if
97
108
  // returned non NULL. In that case the caller is responsible for destroying
@@ -115,7 +126,7 @@ struct grpc_channel_credentials
115
126
  // By default, leave channel args as is. The callee takes ownership
116
127
  // of the passed-in channel args, and the caller takes ownership
117
128
  // of the returned channel args.
118
- virtual grpc_channel_args* update_arguments(grpc_channel_args* args) {
129
+ virtual grpc_core::ChannelArgs update_arguments(grpc_core::ChannelArgs args) {
119
130
  return args;
120
131
  }
121
132
 
@@ -129,9 +140,7 @@ struct grpc_channel_credentials
129
140
  // as equal (assuming other channel args match).
130
141
  int cmp(const grpc_channel_credentials* other) const {
131
142
  GPR_ASSERT(other != nullptr);
132
- // Intentionally uses grpc_core::QsortCompare instead of strcmp as a safety
133
- // against different grpc_channel_credentials types using the same name.
134
- int r = grpc_core::QsortCompare(type(), other->type());
143
+ int r = type().Compare(other->type());
135
144
  if (r != 0) return r;
136
145
  return cmp_impl(other);
137
146
  }
@@ -140,7 +149,7 @@ struct grpc_channel_credentials
140
149
  // implementation for down-casting purposes. Every creds implementation should
141
150
  // use a unique string instance, which should be returned by all instances of
142
151
  // that creds implementation.
143
- virtual const char* type() const = 0;
152
+ virtual grpc_core::UniqueTypeName type() const = 0;
144
153
 
145
154
  private:
146
155
  // Implementation for `cmp` method intended to be overridden by subclasses.
@@ -212,9 +221,7 @@ struct grpc_call_credentials
212
221
  // credentials as effectively the same..
213
222
  int cmp(const grpc_call_credentials* other) const {
214
223
  GPR_ASSERT(other != nullptr);
215
- // Intentionally uses grpc_core::QsortCompare instead of strcmp as a safety
216
- // against different grpc_call_credentials types using the same name.
217
- int r = grpc_core::QsortCompare(type(), other->type());
224
+ int r = type().Compare(other->type());
218
225
  if (r != 0) return r;
219
226
  return cmp_impl(other);
220
227
  }
@@ -227,7 +234,7 @@ struct grpc_call_credentials
227
234
  // implementation for down-casting purposes. Every creds implementation should
228
235
  // use a unique string instance, which should be returned by all instances of
229
236
  // that creds implementation.
230
- virtual const char* type() const = 0;
237
+ virtual grpc_core::UniqueTypeName type() const = 0;
231
238
 
232
239
  private:
233
240
  // Implementation for `cmp` method intended to be overridden by subclasses.
@@ -256,7 +263,7 @@ struct grpc_server_credentials
256
263
  virtual grpc_core::RefCountedPtr<grpc_server_security_connector>
257
264
  create_security_connector(const grpc_channel_args* args) = 0;
258
265
 
259
- virtual const char* type() const = 0;
266
+ virtual grpc_core::UniqueTypeName type() const = 0;
260
267
 
261
268
  const grpc_auth_metadata_processor& auth_metadata_processor() const {
262
269
  return processor_;