grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux

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 (487) 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/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -19,13 +19,20 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <stddef.h>
23
+
24
+ #include <memory>
25
+ #include <string>
22
26
  #include <unordered_map>
23
27
  #include <vector>
24
28
 
29
+ #include "absl/container/inlined_vector.h"
30
+ #include "absl/strings/string_view.h"
31
+
25
32
  #include <grpc/impl/codegen/grpc_types.h>
26
- #include <grpc/support/string_util.h>
33
+ #include <grpc/slice.h>
34
+ #include <grpc/support/log.h>
27
35
 
28
- #include "src/core/lib/gprpp/ref_counted.h"
29
36
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
37
  #include "src/core/lib/iomgr/error.h"
31
38
  #include "src/core/lib/json/json.h"
@@ -18,8 +18,16 @@
18
18
 
19
19
  #include "src/core/lib/service_config/service_config_parser.h"
20
20
 
21
+ #include <stdlib.h>
22
+
23
+ #include <string>
24
+
25
+ #include "absl/strings/str_cat.h"
26
+
21
27
  #include <grpc/support/log.h>
22
28
 
29
+ // IWYU pragma: no_include <ext/alloc_traits.h>
30
+
23
31
  namespace grpc_core {
24
32
 
25
33
  ServiceConfigParser ServiceConfigParser::Builder::Build() {
@@ -19,10 +19,17 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <stddef.h>
23
+
24
+ #include <algorithm>
22
25
  #include <memory>
26
+ #include <utility>
23
27
  #include <vector>
24
28
 
29
+ #include "absl/strings/string_view.h"
30
+
25
31
  #include <grpc/impl/codegen/grpc_types.h>
32
+ #include <grpc/support/log.h>
26
33
 
27
34
  #include "src/core/lib/iomgr/error.h"
28
35
  #include "src/core/lib/json/json.h"
@@ -27,7 +27,7 @@
27
27
  #include <grpc/support/log.h>
28
28
 
29
29
  #include "src/core/lib/gpr/useful.h"
30
- #include "src/core/lib/slice/slice_internal.h"
30
+ #include "src/core/lib/slice/slice_refcount.h"
31
31
 
32
32
  /* --- Constants. --- */
33
33
 
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stddef.h>
25
+
24
26
  #include <grpc/slice.h>
25
27
 
26
28
  /* Encodes data using base64. It is the caller's responsibility to free
@@ -20,12 +20,15 @@
20
20
 
21
21
  #include "src/core/lib/slice/percent_encoding.h"
22
22
 
23
+ #include <stdlib.h>
24
+
23
25
  #include <cstdint>
26
+ #include <type_traits>
27
+ #include <utility>
24
28
 
25
29
  #include <grpc/support/log.h>
26
30
 
27
31
  #include "src/core/lib/gprpp/bitset.h"
28
- #include "src/core/lib/slice/slice_internal.h"
29
32
 
30
33
  #if __cplusplus > 201103l
31
34
  #define GRPC_PCTENCODE_CONSTEXPR_FN constexpr
@@ -28,12 +28,6 @@
28
28
 
29
29
  #include <grpc/support/port_platform.h>
30
30
 
31
- #include <stdbool.h>
32
-
33
- #include "absl/types/optional.h"
34
-
35
- #include <grpc/slice.h>
36
-
37
31
  #include "src/core/lib/slice/slice.h"
38
32
 
39
33
  namespace grpc_core {
@@ -22,12 +22,13 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <new>
26
+
25
27
  #include <grpc/slice.h>
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/log.h>
28
30
 
29
31
  #include "src/core/lib/gprpp/memory.h"
30
- #include "src/core/lib/gprpp/ref_counted.h"
31
32
  #include "src/core/lib/slice/slice_internal.h"
32
33
  #include "src/core/lib/slice/slice_refcount_base.h"
33
34
 
@@ -17,11 +17,16 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <string.h>
21
+
20
22
  #include <cstdint>
23
+ #include <string>
24
+ #include <utility>
21
25
 
22
26
  #include "absl/strings/string_view.h"
23
27
 
24
28
  #include <grpc/slice.h>
29
+ #include <grpc/support/log.h>
25
30
 
26
31
  #include "src/core/lib/gpr/string.h"
27
32
  #include "src/core/lib/slice/slice_internal.h"
@@ -41,12 +46,12 @@
41
46
  // MutableSlice - provides a guarantee of unique ownership, meaning the
42
47
  // underlying data can be mutated safely.
43
48
 
44
- namespace grpc_core {
49
+ // This slice implementation is an extension of the event engine Slice
50
+ // implementation defined in <grpc/event_engine/slice.h>. Changes to this
51
+ // implementation might warrant changes to the public event engine Slice
52
+ // type as well.
45
53
 
46
- // Forward declarations
47
- class Slice;
48
- class StaticSlice;
49
- class MutableSlice;
54
+ namespace grpc_core {
50
55
 
51
56
  namespace slice_detail {
52
57
 
@@ -21,7 +21,7 @@
21
21
  #include <grpc/slice.h>
22
22
 
23
23
  #include "src/core/lib/iomgr/exec_ctx.h"
24
- #include "src/core/lib/slice/slice_internal.h"
24
+ #include "src/core/lib/slice/slice_refcount.h"
25
25
 
26
26
  /* Public API */
27
27
  grpc_slice grpc_slice_ref(grpc_slice slice) {
@@ -18,15 +18,44 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "src/core/lib/slice/slice_buffer.h"
22
+
21
23
  #include <string.h>
22
24
 
25
+ #include <cstdint>
26
+ #include <utility>
27
+
28
+ #include <grpc/slice.h>
23
29
  #include <grpc/slice_buffer.h>
24
30
  #include <grpc/support/alloc.h>
25
31
  #include <grpc/support/log.h>
26
32
 
27
- #include "src/core/lib/gpr/useful.h"
28
- #include "src/core/lib/iomgr/exec_ctx.h"
29
33
  #include "src/core/lib/slice/slice_internal.h"
34
+ #include "src/core/lib/slice/slice_refcount.h"
35
+
36
+ namespace grpc_core {
37
+
38
+ void SliceBuffer::Append(Slice slice) {
39
+ grpc_slice_buffer_add(&slice_buffer_, slice.TakeCSlice());
40
+ }
41
+
42
+ size_t SliceBuffer::AppendIndexed(Slice slice) {
43
+ return grpc_slice_buffer_add_indexed(&slice_buffer_, slice.TakeCSlice());
44
+ }
45
+
46
+ Slice SliceBuffer::TakeFirst() {
47
+ return Slice(grpc_slice_buffer_take_first(&slice_buffer_));
48
+ }
49
+
50
+ void SliceBuffer::Prepend(Slice slice) {
51
+ grpc_slice_buffer_undo_take_first(&slice_buffer_, slice.TakeCSlice());
52
+ }
53
+
54
+ Slice SliceBuffer::RefSlice(size_t index) {
55
+ return Slice(grpc_slice_ref_internal(slice_buffer_.slices[index]));
56
+ }
57
+
58
+ } // namespace grpc_core
30
59
 
31
60
  /* grow a buffer; requires GRPC_SLICE_BUFFER_INLINE_ELEMENTS > 1 */
32
61
  #define GROW(x) (3 * (x) / 2)
@@ -91,15 +120,6 @@ void grpc_slice_buffer_destroy_internal(grpc_slice_buffer* sb) {
91
120
  }
92
121
  }
93
122
 
94
- void grpc_slice_buffer_destroy(grpc_slice_buffer* sb) {
95
- if (grpc_core::ExecCtx::Get() == nullptr) {
96
- grpc_core::ExecCtx exec_ctx;
97
- grpc_slice_buffer_destroy_internal(sb);
98
- } else {
99
- grpc_slice_buffer_destroy_internal(sb);
100
- }
101
- }
102
-
103
123
  uint8_t* grpc_slice_buffer_tiny_add(grpc_slice_buffer* sb, size_t n) {
104
124
  grpc_slice* back;
105
125
  uint8_t* out;
@@ -138,13 +158,29 @@ size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer* sb, grpc_slice s) {
138
158
 
139
159
  void grpc_slice_buffer_add(grpc_slice_buffer* sb, grpc_slice s) {
140
160
  size_t n = sb->count;
141
- /* if both the last slice in the slice buffer and the slice being added
161
+ grpc_slice* back = nullptr;
162
+ if (n != 0) {
163
+ back = &sb->slices[n - 1];
164
+ }
165
+ if (s.refcount != nullptr && back != nullptr &&
166
+ s.refcount == back->refcount &&
167
+ GRPC_SLICE_START_PTR(s) == GRPC_SLICE_END_PTR(*back)) {
168
+ // Merge the two slices into one because they are contiguous and share the
169
+ // same refcount object.
170
+ back->data.refcounted.length += GRPC_SLICE_LENGTH(s);
171
+ sb->length += GRPC_SLICE_LENGTH(s);
172
+ // Unref the merged slice.
173
+ grpc_slice_unref_internal(s);
174
+ // early out
175
+ return;
176
+ }
177
+
178
+ if (!s.refcount && n) {
179
+ /* if both the last slice in the slice buffer and the slice being added
142
180
  are inlined (that is, that they carry their data inside the slice data
143
181
  structure), and the back slice is not full, then concatenate directly
144
182
  into the back slice, preventing many small slices being passed into
145
183
  writes */
146
- if (!s.refcount && n) {
147
- grpc_slice* back = &sb->slices[n - 1];
148
184
  if (!back->refcount &&
149
185
  back->data.inlined.length < GRPC_SLICE_INLINED_SIZE) {
150
186
  if (s.data.inlined.length + back->data.inlined.length <=
@@ -199,15 +235,6 @@ void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb) {
199
235
  sb->slices = sb->base_slices;
200
236
  }
201
237
 
202
- void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb) {
203
- if (grpc_core::ExecCtx::Get() == nullptr) {
204
- grpc_core::ExecCtx exec_ctx;
205
- grpc_slice_buffer_reset_and_unref_internal(sb);
206
- } else {
207
- grpc_slice_buffer_reset_and_unref_internal(sb);
208
- }
209
- }
210
-
211
238
  void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b) {
212
239
  size_t a_offset = static_cast<size_t>(a->slices - a->base_slices);
213
240
  size_t b_offset = static_cast<size_t>(b->slices - b->base_slices);
@@ -0,0 +1,106 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_SLICE_SLICE_BUFFER_Habc_SLICE_BUFFER_H
16
+ #define GRPC_CORE_LIB_SLICE_SLICE_BUFFER_Habc_SLICE_BUFFER_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string.h>
21
+
22
+ #include <grpc/slice.h>
23
+ #include <grpc/slice_buffer.h>
24
+
25
+ #include "src/core/lib/slice/slice.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ /// A slice buffer holds the memory for a collection of slices.
30
+ /// The SliceBuffer object itself is meant to only hide the C-style API,
31
+ /// and won't hold the data itself. In terms of lifespan, the
32
+ /// grpc_slice_buffer ought to be kept somewhere inside the caller's objects,
33
+ /// like a transport or an endpoint.
34
+ ///
35
+ /// This lifespan rule is likely to change in the future, as we may
36
+ /// collapse the grpc_slice_buffer structure straight into this class.
37
+ ///
38
+ /// The SliceBuffer API is basically a replica of the grpc_slice_buffer's,
39
+ /// and its documentation will move here once we remove the C structure,
40
+ /// which should happen before the Event Engine's API is no longer
41
+ /// an experimental API.
42
+ class SliceBuffer {
43
+ public:
44
+ explicit SliceBuffer() { grpc_slice_buffer_init(&slice_buffer_); }
45
+ SliceBuffer(const SliceBuffer& other) = delete;
46
+ SliceBuffer(SliceBuffer&& other) noexcept {
47
+ grpc_slice_buffer_init(&slice_buffer_);
48
+ grpc_slice_buffer_move_into(&slice_buffer_, &other.slice_buffer_);
49
+ }
50
+ /// Upon destruction, the underlying raw slice buffer is cleaned out and all
51
+ /// slices are unreffed.
52
+ ~SliceBuffer() { grpc_slice_buffer_destroy(&slice_buffer_); }
53
+
54
+ SliceBuffer& operator=(SliceBuffer&& other) noexcept {
55
+ grpc_slice_buffer_move_into(&slice_buffer_, &other.slice_buffer_);
56
+ return *this;
57
+ }
58
+
59
+ /// Appends a new slice into the SliceBuffer and makes an attempt to merge
60
+ /// this slice with the last slice in the SliceBuffer.
61
+ void Append(Slice slice);
62
+
63
+ /// Adds a new slice into the SliceBuffer at the next available index.
64
+ /// Returns the index at which the new slice is added.
65
+ size_t AppendIndexed(Slice slice);
66
+
67
+ /// Returns the number of slices held by the SliceBuffer.
68
+ size_t Count() { return slice_buffer_.count; }
69
+
70
+ /// Removes/deletes the last n bytes in the SliceBuffer.
71
+ void RemoveLastNBytes(size_t n) {
72
+ grpc_slice_buffer_trim_end(&slice_buffer_, n, nullptr);
73
+ }
74
+
75
+ /// Move the first n bytes of the SliceBuffer into a memory pointed to by dst.
76
+ void MoveFirstNBytesIntoBuffer(size_t n, void* dst) {
77
+ grpc_slice_buffer_move_first_into_buffer(&slice_buffer_, n, dst);
78
+ }
79
+
80
+ /// Removes and unrefs all slices in the SliceBuffer.
81
+ void Clear() { grpc_slice_buffer_reset_and_unref(&slice_buffer_); }
82
+
83
+ /// Removes the first slice in the SliceBuffer and returns it.
84
+ Slice TakeFirst();
85
+
86
+ /// Prepends the slice to the the front of the SliceBuffer.
87
+ void Prepend(Slice slice);
88
+
89
+ /// Increased the ref-count of slice at the specified index and returns the
90
+ /// associated slice.
91
+ Slice RefSlice(size_t index);
92
+
93
+ /// The total number of bytes held by the SliceBuffer
94
+ size_t Length() { return slice_buffer_.length; }
95
+
96
+ /// Return a pointer to the back raw grpc_slice_buffer
97
+ grpc_slice_buffer* RawSliceBuffer() { return &slice_buffer_; }
98
+
99
+ private:
100
+ /// The backing raw slice buffer.
101
+ grpc_slice_buffer slice_buffer_;
102
+ };
103
+
104
+ } // namespace grpc_core
105
+
106
+ #endif // GRPC_CORE_LIB_SLICE_SLICE_BUFFER_H
@@ -0,0 +1,35 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <grpc/slice.h>
22
+ #include <grpc/slice_buffer.h>
23
+
24
+ #include "src/core/lib/iomgr/exec_ctx.h"
25
+ #include "src/core/lib/slice/slice_internal.h"
26
+
27
+ void grpc_slice_buffer_destroy(grpc_slice_buffer* sb) {
28
+ grpc_core::ExecCtx exec_ctx;
29
+ grpc_slice_buffer_destroy_internal(sb);
30
+ }
31
+
32
+ void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb) {
33
+ grpc_core::ExecCtx exec_ctx;
34
+ grpc_slice_buffer_reset_and_unref_internal(sb);
35
+ }
@@ -21,17 +21,18 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <string.h>
24
+ #include <stdint.h>
25
+
26
+ #include <cstddef>
27
+ #include <string>
25
28
 
26
29
  #include "absl/strings/string_view.h"
27
30
 
28
31
  #include <grpc/slice.h>
29
- #include <grpc/slice_buffer.h>
30
32
  #include <grpc/support/log.h>
31
33
 
32
34
  #include "src/core/lib/gpr/murmur_hash.h"
33
35
  #include "src/core/lib/gprpp/memory.h"
34
- #include "src/core/lib/gprpp/ref_counted.h"
35
36
  #include "src/core/lib/slice/slice_refcount.h"
36
37
 
37
38
  void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb);
@@ -17,11 +17,10 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <string.h>
20
+ #include <stdint.h>
21
21
 
22
- #include <grpc/support/alloc.h>
22
+ #include <grpc/slice.h>
23
23
 
24
- #include "src/core/lib/gpr/murmur_hash.h"
25
24
  #include "src/core/lib/slice/slice_refcount_base.h"
26
25
 
27
26
  namespace grpc_core {
@@ -17,10 +17,9 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <atomic>
20
+ #include <stddef.h>
21
21
 
22
- #include <grpc/slice.h>
23
- #include <grpc/support/log.h>
22
+ #include <atomic>
24
23
 
25
24
  // grpc_slice_refcount : A reference count for grpc_slice.
26
25
  struct grpc_slice_refcount {
@@ -16,8 +16,11 @@
16
16
 
17
17
  #include "src/core/lib/slice/slice_split.h"
18
18
 
19
+ #include <stddef.h>
20
+ #include <stdint.h>
19
21
  #include <string.h>
20
22
 
23
+ #include <grpc/slice_buffer.h>
21
24
  #include <grpc/support/log.h>
22
25
 
23
26
  /** Finds the initial (\a begin) and final (\a end) offsets of the next
@@ -21,11 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdbool.h>
25
- #include <stddef.h>
26
-
27
24
  #include <grpc/slice.h>
28
- #include <grpc/slice_buffer.h>
29
25
 
30
26
  /** Split \a str by the separator \a sep. Results are stored in \a dst, which
31
27
  * should be a properly initialized instance. */
@@ -20,6 +20,10 @@
20
20
 
21
21
  #include "src/core/lib/slice/slice_string_helpers.h"
22
22
 
23
+ #include <stddef.h>
24
+
25
+ #include <utility>
26
+
23
27
  #include "src/core/lib/gpr/string.h"
24
28
  #include "src/core/lib/gprpp/memory.h"
25
29
  #include "src/core/lib/slice/slice_internal.h"
@@ -21,13 +21,10 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdbool.h>
25
- #include <stddef.h>
24
+ #include <stdint.h>
26
25
 
27
26
  #include <grpc/slice.h>
28
27
 
29
- #include "src/core/lib/gpr/string.h"
30
-
31
28
  /* Calls gpr_dump on a slice. */
32
29
  char* grpc_dump_slice(const grpc_slice& slice, uint32_t flags);
33
30
  /* Calls gpr_dump on a slice and returns the result as a slice. */
@@ -16,8 +16,13 @@
16
16
 
17
17
  #include "src/core/lib/surface/builtins.h"
18
18
 
19
+ #include <limits.h>
20
+
21
+ #include "src/core/lib/channel/channel_stack_builder.h"
19
22
  #include "src/core/lib/channel/connected_channel.h"
20
23
  #include "src/core/lib/config/core_configuration.h"
24
+ #include "src/core/lib/surface/channel_init.h"
25
+ #include "src/core/lib/surface/channel_stack_type.h"
21
26
  #include "src/core/lib/surface/lame_client.h"
22
27
  #include "src/core/lib/surface/server.h"
23
28
 
@@ -36,12 +41,12 @@ void RegisterBuiltins(CoreConfiguration::Builder* builder) {
36
41
  builder->channel_init()->RegisterStage(
37
42
  GRPC_CLIENT_LAME_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
38
43
  [](ChannelStackBuilder* builder) {
39
- builder->AppendFilter(&grpc_lame_filter, nullptr);
44
+ builder->AppendFilter(&LameClientFilter::kFilter);
40
45
  return true;
41
46
  });
42
47
  builder->channel_init()->RegisterStage(
43
48
  GRPC_SERVER_CHANNEL, INT_MAX, [](ChannelStackBuilder* builder) {
44
- builder->PrependFilter(&Server::kServerTopFilter, nullptr);
49
+ builder->PrependFilter(&Server::kServerTopFilter);
45
50
  return true;
46
51
  });
47
52
  }
@@ -18,12 +18,18 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stddef.h>
22
+
21
23
  #include <grpc/byte_buffer.h>
24
+ #include <grpc/impl/codegen/compression_types.h>
25
+ #include <grpc/impl/codegen/grpc_types.h>
26
+ #include <grpc/slice.h>
27
+ #include <grpc/slice_buffer.h>
22
28
  #include <grpc/support/alloc.h>
23
- #include <grpc/support/log.h>
24
29
 
25
30
  #include "src/core/lib/iomgr/exec_ctx.h"
26
31
  #include "src/core/lib/slice/slice_internal.h"
32
+ #include "src/core/lib/slice/slice_refcount.h"
27
33
 
28
34
  grpc_byte_buffer* grpc_raw_byte_buffer_create(grpc_slice* slices,
29
35
  size_t nslices) {
@@ -18,17 +18,17 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stdint.h>
21
22
  #include <string.h>
22
23
 
23
24
  #include <grpc/byte_buffer.h>
24
25
  #include <grpc/byte_buffer_reader.h>
25
- #include <grpc/grpc.h>
26
- #include <grpc/slice_buffer.h>
27
- #include <grpc/support/alloc.h>
26
+ #include <grpc/impl/codegen/grpc_types.h>
27
+ #include <grpc/slice.h>
28
28
  #include <grpc/support/log.h>
29
29
 
30
30
  #include "src/core/lib/iomgr/exec_ctx.h"
31
- #include "src/core/lib/slice/slice_internal.h"
31
+ #include "src/core/lib/slice/slice_refcount.h"
32
32
 
33
33
  int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader,
34
34
  grpc_byte_buffer* buffer) {