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
@@ -1,31 +1,33 @@
1
- /*
2
- *
3
- * Copyright 2019 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
- */
1
+ //
2
+ // Copyright 2019 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H
21
19
 
22
20
  #include <grpc/support/port_platform.h>
23
21
 
22
+ #include <memory>
23
+ #include <utility>
24
+
24
25
  #include <grpc/impl/codegen/connectivity_state.h>
25
26
  #include <grpc/impl/codegen/grpc_types.h>
26
27
 
27
28
  #include "src/core/lib/gprpp/ref_counted.h"
28
- #include "src/core/lib/iomgr/pollset_set.h"
29
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
29
31
 
30
32
  namespace grpc_core {
31
33
 
@@ -47,6 +49,13 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
47
49
  virtual grpc_pollset_set* interested_parties() = 0;
48
50
  };
49
51
 
52
+ // Opaque interface for watching data of a particular type for this
53
+ // subchannel.
54
+ class DataWatcherInterface {
55
+ public:
56
+ virtual ~DataWatcherInterface() = default;
57
+ };
58
+
50
59
  explicit SubchannelInterface(const char* trace = nullptr)
51
60
  : RefCounted<SubchannelInterface>(trace) {}
52
61
 
@@ -79,14 +88,18 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
79
88
  // If the subchannel is currently in backoff delay due to a previously
80
89
  // failed attempt, the new connection attempt will not start until the
81
90
  // backoff delay has elapsed.
82
- virtual void AttemptToConnect() = 0;
91
+ virtual void RequestConnection() = 0;
83
92
 
84
- // Resets the subchannel's connection backoff state. If AttemptToConnect()
93
+ // Resets the subchannel's connection backoff state. If RequestConnection()
85
94
  // has been called since the subchannel entered TRANSIENT_FAILURE state,
86
95
  // starts a new connection attempt immediately; otherwise, a new connection
87
- // attempt will be started as soon as AttemptToConnect() is called.
96
+ // attempt will be started as soon as RequestConnection() is called.
88
97
  virtual void ResetBackoff() = 0;
89
98
 
99
+ // Registers a new data watcher.
100
+ virtual void AddDataWatcher(
101
+ std::unique_ptr<DataWatcherInterface> watcher) = 0;
102
+
90
103
  // TODO(roth): Need a better non-grpc-specific abstraction here.
91
104
  virtual const grpc_channel_args* channel_args() = 0;
92
105
  };
@@ -115,11 +128,16 @@ class DelegatingSubchannel : public SubchannelInterface {
115
128
  ConnectivityStateWatcherInterface* watcher) override {
116
129
  return wrapped_subchannel_->CancelConnectivityStateWatch(watcher);
117
130
  }
118
- void AttemptToConnect() override { wrapped_subchannel_->AttemptToConnect(); }
131
+ void RequestConnection() override {
132
+ wrapped_subchannel_->RequestConnection();
133
+ }
119
134
  void ResetBackoff() override { wrapped_subchannel_->ResetBackoff(); }
120
135
  const grpc_channel_args* channel_args() override {
121
136
  return wrapped_subchannel_->channel_args();
122
137
  }
138
+ void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override {
139
+ wrapped_subchannel_->AddDataWatcher(std::move(watcher));
140
+ }
123
141
 
124
142
  private:
125
143
  RefCountedPtr<SubchannelInterface> wrapped_subchannel_;
@@ -127,4 +145,4 @@ class DelegatingSubchannel : public SubchannelInterface {
127
145
 
128
146
  } // namespace grpc_core
129
147
 
130
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H */
148
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H
@@ -0,0 +1,38 @@
1
+ //
2
+ // Copyright 2022 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_INTERNAL_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_INTERNAL_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include "src/core/ext/filters/client_channel/subchannel.h"
23
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
24
+
25
+ namespace grpc_core {
26
+
27
+ // Internal interface for watching data of a particular type for this
28
+ // subchannel.
29
+ class InternalSubchannelDataWatcherInterface
30
+ : public SubchannelInterface::DataWatcherInterface {
31
+ public:
32
+ // Tells the watcher which subchannel to register itself with.
33
+ virtual void SetSubchannel(Subchannel* subchannel) = 0;
34
+ };
35
+
36
+ } // namespace grpc_core
37
+
38
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_INTERNAL_H
@@ -20,7 +20,14 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
22
22
 
23
+ #include <string.h>
24
+
25
+ #include "absl/status/status.h"
26
+ #include "absl/status/statusor.h"
27
+ #include "absl/strings/str_cat.h"
28
+
23
29
  #include "src/core/lib/address_utils/sockaddr_utils.h"
30
+ #include "src/core/lib/channel/channel_args.h"
24
31
  #include "src/core/lib/gpr/useful.h"
25
32
 
26
33
  // The subchannel pool to reuse subchannels.
@@ -84,8 +91,11 @@ void SubchannelKey::Init(
84
91
  }
85
92
 
86
93
  std::string SubchannelKey::ToString() const {
87
- return absl::StrCat("{address=", grpc_sockaddr_to_uri(&address_),
88
- ", args=", grpc_channel_args_string(args_), "}");
94
+ auto addr_uri = grpc_sockaddr_to_uri(&address_);
95
+ return absl::StrCat(
96
+ "{address=",
97
+ addr_uri.ok() ? addr_uri.value() : addr_uri.status().ToString(),
98
+ ", args=", grpc_channel_args_string(args_), "}");
89
99
  }
90
100
 
91
101
  namespace {
@@ -21,11 +21,14 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include "src/core/lib/avl/avl.h"
25
- #include "src/core/lib/channel/channel_args.h"
24
+ #include <string>
25
+
26
+ #include <grpc/impl/codegen/grpc_types.h>
27
+
26
28
  #include "src/core/lib/debug/trace.h"
27
29
  #include "src/core/lib/gprpp/ref_counted.h"
28
- #include "src/core/lib/iomgr/resolve_address.h"
30
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
+ #include "src/core/lib/iomgr/resolved_address.h"
29
32
 
30
33
  namespace grpc_core {
31
34
 
@@ -18,13 +18,26 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/subchannel_stream_client.h"
20
20
 
21
- #include <stdint.h>
21
+ #include <inttypes.h>
22
22
  #include <stdio.h>
23
+ #include <string.h>
23
24
 
25
+ #include <cstdint>
26
+ #include <string>
27
+ #include <utility>
28
+
29
+ #include <grpc/slice_buffer.h>
24
30
  #include <grpc/status.h>
31
+ #include <grpc/support/alloc.h>
32
+ #include <grpc/support/log.h>
25
33
 
34
+ #include "src/core/lib/gpr/time_precise.h"
35
+ #include "src/core/lib/gprpp/debug_location.h"
26
36
  #include "src/core/lib/gprpp/sync.h"
37
+ #include "src/core/lib/gprpp/time.h"
38
+ #include "src/core/lib/iomgr/exec_ctx.h"
27
39
  #include "src/core/lib/resource_quota/api.h"
40
+ #include "src/core/lib/resource_quota/resource_quota.h"
28
41
  #include "src/core/lib/slice/slice_internal.h"
29
42
  #include "src/core/lib/transport/error_utils.h"
30
43
 
@@ -50,7 +63,8 @@ SubchannelStreamClient::SubchannelStreamClient(
50
63
  call_allocator_(
51
64
  ResourceQuotaFromChannelArgs(connected_subchannel_->args())
52
65
  ->memory_quota()
53
- ->CreateMemoryAllocator(tracer)),
66
+ ->CreateMemoryAllocator(
67
+ (tracer != nullptr) ? tracer : "SubchannelStreamClient")),
54
68
  event_handler_(std::move(event_handler)),
55
69
  retry_backoff_(
56
70
  BackOff::Options()
@@ -20,20 +20,32 @@
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
22
  #include <atomic>
23
+ #include <memory>
23
24
 
25
+ #include "absl/base/thread_annotations.h"
24
26
  #include "absl/status/status.h"
25
27
  #include "absl/strings/string_view.h"
28
+ #include "absl/types/optional.h"
29
+
30
+ #include <grpc/event_engine/memory_allocator.h>
31
+ #include <grpc/slice.h>
32
+ #include <grpc/status.h>
26
33
 
27
34
  #include "src/core/ext/filters/client_channel/subchannel.h"
28
35
  #include "src/core/lib/backoff/backoff.h"
36
+ #include "src/core/lib/channel/context.h"
29
37
  #include "src/core/lib/gprpp/orphanable.h"
30
38
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
39
  #include "src/core/lib/gprpp/sync.h"
32
40
  #include "src/core/lib/iomgr/call_combiner.h"
33
41
  #include "src/core/lib/iomgr/closure.h"
42
+ #include "src/core/lib/iomgr/error.h"
43
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
34
44
  #include "src/core/lib/iomgr/polling_entity.h"
35
45
  #include "src/core/lib/iomgr/timer.h"
36
46
  #include "src/core/lib/resource_quota/arena.h"
47
+ #include "src/core/lib/resource_quota/memory_quota.h"
48
+ #include "src/core/lib/slice/slice.h"
37
49
  #include "src/core/lib/transport/byte_stream.h"
38
50
  #include "src/core/lib/transport/metadata_batch.h"
39
51
  #include "src/core/lib/transport/transport.h"
@@ -347,6 +347,7 @@ const grpc_channel_filter grpc_client_deadline_filter = {
347
347
  deadline_destroy_call_elem,
348
348
  0, // sizeof(channel_data)
349
349
  deadline_init_channel_elem,
350
+ grpc_channel_stack_no_post_init,
350
351
  deadline_destroy_channel_elem,
351
352
  grpc_channel_next_get_info,
352
353
  "deadline",
@@ -362,6 +363,7 @@ const grpc_channel_filter grpc_server_deadline_filter = {
362
363
  deadline_destroy_call_elem,
363
364
  0, // sizeof(channel_data)
364
365
  deadline_init_channel_elem,
366
+ grpc_channel_stack_no_post_init,
365
367
  deadline_destroy_channel_elem,
366
368
  grpc_channel_next_get_info,
367
369
  "deadline",
@@ -380,8 +382,10 @@ void RegisterDeadlineFilter(CoreConfiguration::Builder* builder) {
380
382
  builder->channel_init()->RegisterStage(
381
383
  type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
382
384
  [filter](ChannelStackBuilder* builder) {
383
- if (grpc_deadline_checking_enabled(builder->channel_args())) {
384
- builder->PrependFilter(filter, nullptr);
385
+ auto args = builder->channel_args();
386
+ if (args.GetBool(GRPC_ARG_ENABLE_DEADLINE_CHECKS)
387
+ .value_or(!args.WantMinimalStack())) {
388
+ builder->PrependFilter(filter);
385
389
  }
386
390
  return true;
387
391
  });
@@ -29,7 +29,6 @@
29
29
  #include "src/core/ext/filters/fault_injection/service_config_parser.h"
30
30
  #include "src/core/lib/channel/channel_stack.h"
31
31
  #include "src/core/lib/channel/status_util.h"
32
- #include "src/core/lib/gprpp/capture.h"
33
32
  #include "src/core/lib/promise/sleep.h"
34
33
  #include "src/core/lib/promise/try_seq.h"
35
34
  #include "src/core/lib/service_config/service_config_call_data.h"
@@ -136,9 +135,7 @@ ArenaPromise<ServerMetadataHandle> FaultInjectionFilter::MakeCallPromise(
136
135
  auto delay = decision.DelayUntil();
137
136
  return TrySeq(
138
137
  Sleep(delay),
139
- Capture(
140
- [](InjectionDecision* decision) { return decision->MaybeAbort(); },
141
- std::move(decision)),
138
+ [decision = std::move(decision)]() { return decision.MaybeAbort(); },
142
139
  next_promise_factory(std::move(call_args)));
143
140
  }
144
141
 
@@ -29,6 +29,7 @@
29
29
  #include "absl/strings/str_format.h"
30
30
  #include "absl/strings/str_join.h"
31
31
 
32
+ #include <grpc/grpc.h>
32
33
  #include <grpc/support/alloc.h>
33
34
  #include <grpc/support/log.h>
34
35
 
@@ -97,7 +98,11 @@ Slice UserAgentFromArgs(const ChannelArgs& args, const char* transport_name) {
97
98
  ArenaPromise<ServerMetadataHandle> HttpClientFilter::MakeCallPromise(
98
99
  CallArgs call_args, NextPromiseFactory next_promise_factory) {
99
100
  auto& md = call_args.client_initial_metadata;
100
- md->Set(HttpMethodMetadata(), HttpMethodMetadata::kPost);
101
+ if (test_only_use_put_requests_) {
102
+ md->Set(HttpMethodMetadata(), HttpMethodMetadata::kPut);
103
+ } else {
104
+ md->Set(HttpMethodMetadata(), HttpMethodMetadata::kPost);
105
+ }
101
106
  md->Set(HttpSchemeMetadata(), scheme_);
102
107
  md->Set(TeMetadata(), TeMetadata::kTrailers);
103
108
  md->Set(ContentTypeMetadata(), ContentTypeMetadata::kApplicationGrpc);
@@ -125,8 +130,11 @@ ArenaPromise<ServerMetadataHandle> HttpClientFilter::MakeCallPromise(
125
130
  }
126
131
 
127
132
  HttpClientFilter::HttpClientFilter(HttpSchemeMetadata::ValueType scheme,
128
- Slice user_agent)
129
- : scheme_(scheme), user_agent_(std::move(user_agent)) {}
133
+ Slice user_agent,
134
+ bool test_only_use_put_requests)
135
+ : scheme_(scheme),
136
+ user_agent_(std::move(user_agent)),
137
+ test_only_use_put_requests_(test_only_use_put_requests) {}
130
138
 
131
139
  absl::StatusOr<HttpClientFilter> HttpClientFilter::Create(ChannelArgs args,
132
140
  ChannelFilter::Args) {
@@ -134,8 +142,9 @@ absl::StatusOr<HttpClientFilter> HttpClientFilter::Create(ChannelArgs args,
134
142
  if (transport == nullptr) {
135
143
  return absl::InvalidArgumentError("HttpClientFilter needs a transport");
136
144
  }
137
- return HttpClientFilter(SchemeFromArgs(args),
138
- UserAgentFromArgs(args, transport->vtable->name));
145
+ return HttpClientFilter(
146
+ SchemeFromArgs(args), UserAgentFromArgs(args, transport->vtable->name),
147
+ args.GetInt(GRPC_ARG_TEST_ONLY_USE_PUT_REQUESTS).value_or(false));
139
148
  }
140
149
 
141
150
  } // namespace grpc_core
@@ -37,12 +37,18 @@ class HttpClientFilter : public ChannelFilter {
37
37
  CallArgs call_args, NextPromiseFactory next_promise_factory) override;
38
38
 
39
39
  private:
40
- HttpClientFilter(HttpSchemeMetadata::ValueType scheme, Slice user_agent);
40
+ HttpClientFilter(HttpSchemeMetadata::ValueType scheme, Slice user_agent,
41
+ bool test_only_use_put_requests);
41
42
 
42
43
  HttpSchemeMetadata::ValueType scheme_;
43
44
  Slice user_agent_;
45
+ bool test_only_use_put_requests_;
44
46
  };
45
47
 
48
+ // A test-only channel arg to allow testing gRPC Core server behavior on PUT
49
+ // requests.
50
+ #define GRPC_ARG_TEST_ONLY_USE_PUT_REQUESTS "grpc.testing.use_put_requests"
51
+
46
52
  } // namespace grpc_core
47
53
 
48
54
  #endif /* GRPC_CORE_EXT_FILTERS_HTTP_CLIENT_HTTP_CLIENT_FILTER_H */
@@ -70,17 +70,12 @@ const grpc_channel_filter ClientAuthorityFilter::kFilter =
70
70
 
71
71
  namespace {
72
72
  bool add_client_authority_filter(ChannelStackBuilder* builder) {
73
- const grpc_channel_args* channel_args = builder->channel_args();
74
- const grpc_arg* disable_client_authority_filter_arg = grpc_channel_args_find(
75
- channel_args, GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER);
76
- if (disable_client_authority_filter_arg != nullptr) {
77
- const bool is_client_authority_filter_disabled =
78
- grpc_channel_arg_get_bool(disable_client_authority_filter_arg, false);
79
- if (is_client_authority_filter_disabled) {
80
- return true;
81
- }
73
+ if (builder->channel_args()
74
+ .GetBool(GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER)
75
+ .value_or(false)) {
76
+ return true;
82
77
  }
83
- builder->PrependFilter(&ClientAuthorityFilter::kFilter, nullptr);
78
+ builder->PrependFilter(&ClientAuthorityFilter::kFilter);
84
79
  return true;
85
80
  }
86
81
  } // namespace
@@ -46,12 +46,11 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
46
46
  [enable_in_minimal_stack, control_channel_arg,
47
47
  filter](ChannelStackBuilder* builder) {
48
48
  if (!is_building_http_like_transport(builder)) return true;
49
- const grpc_channel_args* channel_args = builder->channel_args();
50
- bool enable = grpc_channel_arg_get_bool(
51
- grpc_channel_args_find(channel_args, control_channel_arg),
52
- enable_in_minimal_stack ||
53
- !grpc_channel_args_want_minimal_stack(channel_args));
54
- if (enable) builder->PrependFilter(filter, nullptr);
49
+ auto args = builder->channel_args();
50
+ const bool enable = args.GetBool(control_channel_arg)
51
+ .value_or(enable_in_minimal_stack ||
52
+ !args.WantMinimalStack());
53
+ if (enable) builder->PrependFilter(filter);
55
54
  return true;
56
55
  });
57
56
  };
@@ -61,7 +60,7 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
61
60
  channel_type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
62
61
  [filter](ChannelStackBuilder* builder) {
63
62
  if (is_building_http_like_transport(builder)) {
64
- builder->PrependFilter(filter, nullptr);
63
+ builder->PrependFilter(filter);
65
64
  }
66
65
  return true;
67
66
  });
@@ -85,6 +84,6 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
85
84
  GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION, &MessageDecompressFilter);
86
85
  required(GRPC_CLIENT_SUBCHANNEL, &HttpClientFilter::kFilter);
87
86
  required(GRPC_CLIENT_DIRECT_CHANNEL, &HttpClientFilter::kFilter);
88
- required(GRPC_SERVER_CHANNEL, &grpc_http_server_filter);
87
+ required(GRPC_SERVER_CHANNEL, &HttpServerFilter::kFilter);
89
88
  }
90
89
  } // namespace grpc_core
@@ -451,6 +451,7 @@ const grpc_channel_filter grpc_message_compress_filter = {
451
451
  CompressDestroyCallElem,
452
452
  sizeof(ChannelData),
453
453
  CompressInitChannelElem,
454
+ grpc_channel_stack_no_post_init,
454
455
  CompressDestroyChannelElem,
455
456
  grpc_channel_next_get_info,
456
457
  "message_compress"};
@@ -45,7 +45,8 @@ namespace {
45
45
  class ChannelData {
46
46
  public:
47
47
  explicit ChannelData(const grpc_channel_element_args* args)
48
- : max_recv_size_(GetMaxRecvSizeFromChannelArgs(args->channel_args)),
48
+ : max_recv_size_(GetMaxRecvSizeFromChannelArgs(
49
+ ChannelArgs::FromC(args->channel_args))),
49
50
  message_size_service_config_parser_index_(
50
51
  MessageSizeParser::ParserIndex()) {}
51
52
 
@@ -380,6 +381,7 @@ const grpc_channel_filter MessageDecompressFilter = {
380
381
  DecompressDestroyCallElem,
381
382
  sizeof(ChannelData),
382
383
  DecompressInitChannelElem,
384
+ grpc_channel_stack_no_post_init,
383
385
  DecompressDestroyChannelElem,
384
386
  grpc_channel_next_get_info,
385
387
  "message_decompress"};