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
@@ -17,16 +17,23 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <string.h>
21
+
20
22
  #include <cstdint>
23
+ #include <string>
21
24
  #include <type_traits>
25
+ #include <utility>
22
26
 
27
+ #include "absl/functional/function_ref.h"
23
28
  #include "absl/meta/type_traits.h"
24
29
  #include "absl/strings/match.h"
30
+ #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/string_view.h"
32
+
33
+ #include <grpc/slice.h>
25
34
 
26
35
  #include "src/core/lib/gprpp/time.h"
27
- #include "src/core/lib/iomgr/error.h"
28
36
  #include "src/core/lib/slice/slice.h"
29
- #include "src/core/lib/surface/validate_metadata.h"
30
37
 
31
38
  namespace grpc_core {
32
39
 
@@ -371,7 +378,7 @@ ParsedMetadata<MetadataContainer>::KeyValueVTable(absl::string_view key) {
371
378
  };
372
379
  static const auto set = [](const Buffer& value, MetadataContainer* map) {
373
380
  auto* p = static_cast<KV*>(value.pointer);
374
- map->AppendUnknown(p->first.as_string_view(), p->second.Ref());
381
+ map->unknown_.Append(p->first.as_string_view(), p->second.Ref());
375
382
  };
376
383
  static const auto with_new_value = [](Slice* value, MetadataParseErrorFn,
377
384
  ParsedMetadata* result) {
@@ -20,6 +20,8 @@
20
20
 
21
21
  #include "src/core/lib/transport/status_conversion.h"
22
22
 
23
+ #include "src/core/lib/iomgr/exec_ctx.h"
24
+
23
25
  grpc_http2_error_code grpc_status_to_http2_error(grpc_status_code status) {
24
26
  switch (status) {
25
27
  case GRPC_STATUS_OK:
@@ -21,9 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/grpc.h>
24
+ #include <grpc/status.h>
25
25
 
26
- #include "src/core/lib/iomgr/exec_ctx.h"
26
+ #include "src/core/lib/gprpp/time.h"
27
27
  #include "src/core/lib/transport/http2_errors.h"
28
28
 
29
29
  /* Conversion of grpc status codes to http2 error codes (for RST_STREAM) */
@@ -0,0 +1,253 @@
1
+ //
2
+ //
3
+ // Copyright 2022 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 "src/core/lib/transport/tcp_connect_handshaker.h"
22
+
23
+ #include <memory>
24
+
25
+ #include "absl/base/thread_annotations.h"
26
+ #include "absl/memory/memory.h"
27
+ #include "absl/status/statusor.h"
28
+
29
+ #include <grpc/impl/codegen/grpc_types.h>
30
+ #include <grpc/slice.h>
31
+ #include <grpc/support/alloc.h>
32
+ #include <grpc/support/log.h>
33
+
34
+ #include "src/core/lib/address_utils/parse_address.h"
35
+ #include "src/core/lib/channel/channel_args.h"
36
+ #include "src/core/lib/config/core_configuration.h"
37
+ #include "src/core/lib/gpr/useful.h"
38
+ #include "src/core/lib/gprpp/debug_location.h"
39
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
40
+ #include "src/core/lib/gprpp/sync.h"
41
+ #include "src/core/lib/iomgr/closure.h"
42
+ #include "src/core/lib/iomgr/endpoint.h"
43
+ #include "src/core/lib/iomgr/error.h"
44
+ #include "src/core/lib/iomgr/exec_ctx.h"
45
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
46
+ #include "src/core/lib/iomgr/polling_entity.h"
47
+ #include "src/core/lib/iomgr/pollset_set.h"
48
+ #include "src/core/lib/iomgr/resolved_address.h"
49
+ #include "src/core/lib/iomgr/tcp_client.h"
50
+ #include "src/core/lib/iomgr/tcp_server.h"
51
+ #include "src/core/lib/slice/slice_internal.h"
52
+ #include "src/core/lib/transport/handshaker.h"
53
+ #include "src/core/lib/transport/handshaker_factory.h"
54
+ #include "src/core/lib/transport/handshaker_registry.h"
55
+ #include "src/core/lib/uri/uri_parser.h"
56
+
57
+ namespace grpc_core {
58
+
59
+ namespace {
60
+
61
+ class TCPConnectHandshaker : public Handshaker {
62
+ public:
63
+ explicit TCPConnectHandshaker(grpc_pollset_set* pollset_set);
64
+ void Shutdown(grpc_error_handle why) override;
65
+ void DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
66
+ grpc_closure* on_handshake_done,
67
+ HandshakerArgs* args) override;
68
+ const char* name() const override { return "tcp_connect"; }
69
+
70
+ private:
71
+ ~TCPConnectHandshaker() override;
72
+ void CleanupArgsForFailureLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
73
+ void FinishLocked(grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
74
+ static void Connected(void* arg, grpc_error_handle error);
75
+
76
+ Mutex mu_;
77
+ bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
78
+ // Endpoint and read buffer to destroy after a shutdown.
79
+ grpc_endpoint* endpoint_to_destroy_ ABSL_GUARDED_BY(mu_) = nullptr;
80
+ grpc_slice_buffer* read_buffer_to_destroy_ ABSL_GUARDED_BY(mu_) = nullptr;
81
+ grpc_closure* on_handshake_done_ ABSL_GUARDED_BY(mu_) = nullptr;
82
+ grpc_pollset_set* interested_parties_ = nullptr;
83
+ grpc_polling_entity pollent_;
84
+ HandshakerArgs* args_ = nullptr;
85
+ bool bind_endpoint_to_pollset_ = false;
86
+ grpc_resolved_address addr_;
87
+ grpc_closure connected_;
88
+ };
89
+
90
+ TCPConnectHandshaker::TCPConnectHandshaker(grpc_pollset_set* pollset_set)
91
+ : interested_parties_(grpc_pollset_set_create()),
92
+ pollent_(grpc_polling_entity_create_from_pollset_set(pollset_set)) {
93
+ // Interested parties might be null for platforms like Apple.
94
+ // Explicitly check before adding/deleting from pollset_set to handle this
95
+ // use case.
96
+ if (interested_parties_ != nullptr) {
97
+ grpc_polling_entity_add_to_pollset_set(&pollent_, interested_parties_);
98
+ }
99
+ GRPC_CLOSURE_INIT(&connected_, Connected, this, grpc_schedule_on_exec_ctx);
100
+ }
101
+
102
+ void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
103
+ // TODO(anramach): After migration to EventEngine, cancel the in-progress
104
+ // TCP connection attempt.
105
+ {
106
+ MutexLock lock(&mu_);
107
+ if (!shutdown_) {
108
+ shutdown_ = true;
109
+ // If we are shutting down while connecting, respond back with
110
+ // handshake done.
111
+ // The callback from grpc_tcp_client_connect will perform
112
+ // the necessary clean up.
113
+ if (on_handshake_done_ != nullptr) {
114
+ CleanupArgsForFailureLocked();
115
+ FinishLocked(
116
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown"));
117
+ }
118
+ }
119
+ }
120
+ GRPC_ERROR_UNREF(why);
121
+ }
122
+
123
+ void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
124
+ grpc_closure* on_handshake_done,
125
+ HandshakerArgs* args) {
126
+ {
127
+ MutexLock lock(&mu_);
128
+ on_handshake_done_ = on_handshake_done;
129
+ }
130
+ GPR_ASSERT(args->endpoint == nullptr);
131
+ args_ = args;
132
+ char* address = grpc_channel_args_find_string(
133
+ args->args, GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS);
134
+ absl::StatusOr<URI> uri = URI::Parse(address);
135
+ if (!uri.ok() || !grpc_parse_uri(*uri, &addr_)) {
136
+ MutexLock lock(&mu_);
137
+ FinishLocked(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
138
+ "Resolved address in invalid format"));
139
+ return;
140
+ }
141
+ bind_endpoint_to_pollset_ = grpc_channel_args_find_bool(
142
+ args->args, GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET, false);
143
+ const char* args_to_remove[] = {
144
+ GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS,
145
+ GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET};
146
+ // Update args to not contain the args relevant to TCP connect handshaker.
147
+ grpc_channel_args* channel_args = grpc_channel_args_copy_and_remove(
148
+ args->args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove));
149
+ grpc_channel_args_destroy(args->args);
150
+ args->args = channel_args;
151
+ // In some implementations, the closure can be flushed before
152
+ // grpc_tcp_client_connect() returns, and since the closure requires access
153
+ // to mu_, this can result in a deadlock (see
154
+ // https://github.com/grpc/grpc/issues/16427 for details).
155
+ // grpc_tcp_client_connect() will fill endpoint_ with proper contents, and we
156
+ // make sure that we still exist at that point by taking a ref.
157
+ Ref().release(); // Ref held by callback.
158
+ // As we fake the TCP client connection failure when shutdown is called
159
+ // we don't want to pass args->endpoint directly.
160
+ // Instead pass endpoint_ and swap this endpoint to
161
+ // args endpoint on success.
162
+ grpc_tcp_client_connect(&connected_, &endpoint_to_destroy_,
163
+ interested_parties_, args->args, &addr_,
164
+ args->deadline);
165
+ }
166
+
167
+ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
168
+ RefCountedPtr<TCPConnectHandshaker> self(
169
+ static_cast<TCPConnectHandshaker*>(arg));
170
+ {
171
+ MutexLock lock(&self->mu_);
172
+ if (error != GRPC_ERROR_NONE || self->shutdown_) {
173
+ if (error == GRPC_ERROR_NONE) {
174
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown");
175
+ } else {
176
+ error = GRPC_ERROR_REF(error);
177
+ }
178
+ if (self->endpoint_to_destroy_ != nullptr) {
179
+ grpc_endpoint_shutdown(self->endpoint_to_destroy_,
180
+ GRPC_ERROR_REF(error));
181
+ }
182
+ if (!self->shutdown_) {
183
+ self->CleanupArgsForFailureLocked();
184
+ self->shutdown_ = true;
185
+ self->FinishLocked(error);
186
+ } else {
187
+ // The on_handshake_done_ is already as part of shutdown when connecting
188
+ // So nothing to be done here other than unrefing the error.
189
+ GRPC_ERROR_UNREF(error);
190
+ }
191
+ return;
192
+ }
193
+ GPR_ASSERT(self->endpoint_to_destroy_ != nullptr);
194
+ self->args_->endpoint = self->endpoint_to_destroy_;
195
+ self->endpoint_to_destroy_ = nullptr;
196
+ if (self->bind_endpoint_to_pollset_) {
197
+ grpc_endpoint_add_to_pollset_set(self->args_->endpoint,
198
+ self->interested_parties_);
199
+ }
200
+ self->FinishLocked(GRPC_ERROR_NONE);
201
+ }
202
+ }
203
+
204
+ TCPConnectHandshaker::~TCPConnectHandshaker() {
205
+ if (endpoint_to_destroy_ != nullptr) {
206
+ grpc_endpoint_destroy(endpoint_to_destroy_);
207
+ }
208
+ if (read_buffer_to_destroy_ != nullptr) {
209
+ grpc_slice_buffer_destroy_internal(read_buffer_to_destroy_);
210
+ gpr_free(read_buffer_to_destroy_);
211
+ }
212
+ grpc_pollset_set_destroy(interested_parties_);
213
+ }
214
+
215
+ void TCPConnectHandshaker::CleanupArgsForFailureLocked() {
216
+ read_buffer_to_destroy_ = args_->read_buffer;
217
+ args_->read_buffer = nullptr;
218
+ grpc_channel_args_destroy(args_->args);
219
+ args_->args = nullptr;
220
+ }
221
+
222
+ void TCPConnectHandshaker::FinishLocked(grpc_error_handle error) {
223
+ if (interested_parties_ != nullptr) {
224
+ grpc_polling_entity_del_from_pollset_set(&pollent_, interested_parties_);
225
+ }
226
+ ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, error);
227
+ on_handshake_done_ = nullptr;
228
+ }
229
+
230
+ //
231
+ // TCPConnectHandshakerFactory
232
+ //
233
+
234
+ class TCPConnectHandshakerFactory : public HandshakerFactory {
235
+ public:
236
+ void AddHandshakers(const grpc_channel_args* /*args*/,
237
+ grpc_pollset_set* interested_parties,
238
+ HandshakeManager* handshake_mgr) override {
239
+ handshake_mgr->Add(
240
+ MakeRefCounted<TCPConnectHandshaker>(interested_parties));
241
+ }
242
+ ~TCPConnectHandshakerFactory() override = default;
243
+ };
244
+
245
+ } // namespace
246
+
247
+ void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder) {
248
+ builder->handshaker_registry()->RegisterHandshakerFactory(
249
+ true /* at_start */, HANDSHAKER_CLIENT,
250
+ absl::make_unique<TCPConnectHandshakerFactory>());
251
+ }
252
+
253
+ } // namespace grpc_core
@@ -0,0 +1,39 @@
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_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
18
+ #define GRPC_CORE_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include "src/core/lib/config/core_configuration.h"
23
+
24
+ // Indicates the address that the tcp connect handshaker should connect to.
25
+ #define GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS \
26
+ "grpc.internal.tcp_handshaker_resolved_address"
27
+
28
+ // Whether the TCP connect handshaker should bind the endpoint to the pollset.
29
+ #define GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET \
30
+ "grpc.internal.tcp_handshaker_bind_endpoint_to_pollset"
31
+
32
+ namespace grpc_core {
33
+
34
+ // Register the TCP Connect handshaker into the configuration builder.
35
+ void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder);
36
+
37
+ } // namespace grpc_core
38
+
39
+ #endif // GRPC_CORE_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
@@ -20,14 +20,10 @@
20
20
 
21
21
  #include "src/core/lib/transport/timeout_encoding.h"
22
22
 
23
- #include <stdio.h>
24
- #include <string.h>
25
-
26
- #include <cstdint>
23
+ #include "absl/base/attributes.h"
27
24
 
28
25
  #include <grpc/support/log.h>
29
-
30
- #include "src/core/lib/gpr/string.h"
26
+ #include <grpc/support/time.h>
31
27
 
32
28
  namespace grpc_core {
33
29
 
@@ -21,7 +21,11 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include "src/core/lib/iomgr/exec_ctx.h"
24
+ #include <stdint.h>
25
+
26
+ #include "absl/types/optional.h"
27
+
28
+ #include "src/core/lib/gprpp/time.h"
25
29
  #include "src/core/lib/slice/slice.h"
26
30
 
27
31
  namespace grpc_core {
@@ -22,18 +22,12 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
- #include <grpc/support/alloc.h>
26
- #include <grpc/support/atm.h>
27
- #include <grpc/support/log.h>
28
- #include <grpc/support/sync.h>
25
+ #include <new>
29
26
 
30
27
  #include "src/core/lib/gpr/alloc.h"
31
- #include "src/core/lib/gpr/string.h"
32
- #include "src/core/lib/gprpp/memory.h"
28
+ #include "src/core/lib/iomgr/exec_ctx.h"
33
29
  #include "src/core/lib/iomgr/executor.h"
34
30
  #include "src/core/lib/iomgr/iomgr.h"
35
- #include "src/core/lib/slice/slice_internal.h"
36
- #include "src/core/lib/slice/slice_string_helpers.h"
37
31
  #include "src/core/lib/transport/transport_impl.h"
38
32
 
39
33
  grpc_core::DebugOnlyTraceFlag grpc_trace_stream_refcount(false,
@@ -157,6 +151,16 @@ grpc_endpoint* grpc_transport_get_endpoint(grpc_transport* transport) {
157
151
  void grpc_transport_stream_op_batch_finish_with_failure(
158
152
  grpc_transport_stream_op_batch* batch, grpc_error_handle error,
159
153
  grpc_core::CallCombiner* call_combiner) {
154
+ grpc_core::CallCombinerClosureList closures;
155
+ grpc_transport_stream_op_batch_queue_finish_with_failure(batch, error,
156
+ &closures);
157
+ // Execute closures.
158
+ closures.RunClosures(call_combiner);
159
+ }
160
+
161
+ void grpc_transport_stream_op_batch_queue_finish_with_failure(
162
+ grpc_transport_stream_op_batch* batch, grpc_error_handle error,
163
+ grpc_core::CallCombinerClosureList* closures) {
160
164
  if (batch->send_message) {
161
165
  batch->payload->send_message.send_message.reset();
162
166
  }
@@ -164,27 +168,24 @@ void grpc_transport_stream_op_batch_finish_with_failure(
164
168
  GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
165
169
  }
166
170
  // Construct a list of closures to execute.
167
- grpc_core::CallCombinerClosureList closures;
168
171
  if (batch->recv_initial_metadata) {
169
- closures.Add(
172
+ closures->Add(
170
173
  batch->payload->recv_initial_metadata.recv_initial_metadata_ready,
171
174
  GRPC_ERROR_REF(error), "failing recv_initial_metadata_ready");
172
175
  }
173
176
  if (batch->recv_message) {
174
- closures.Add(batch->payload->recv_message.recv_message_ready,
175
- GRPC_ERROR_REF(error), "failing recv_message_ready");
177
+ closures->Add(batch->payload->recv_message.recv_message_ready,
178
+ GRPC_ERROR_REF(error), "failing recv_message_ready");
176
179
  }
177
180
  if (batch->recv_trailing_metadata) {
178
- closures.Add(
181
+ closures->Add(
179
182
  batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready,
180
183
  GRPC_ERROR_REF(error), "failing recv_trailing_metadata_ready");
181
184
  }
182
185
  if (batch->on_complete != nullptr) {
183
- closures.Add(batch->on_complete, GRPC_ERROR_REF(error),
184
- "failing on_complete");
186
+ closures->Add(batch->on_complete, GRPC_ERROR_REF(error),
187
+ "failing on_complete");
185
188
  }
186
- // Execute closures.
187
- closures.RunClosures(call_combiner);
188
189
  GRPC_ERROR_UNREF(error);
189
190
  }
190
191
 
@@ -22,22 +22,45 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <stddef.h>
25
+ #include <stdint.h>
26
+ #include <string.h>
27
+
28
+ #include <functional>
29
+ #include <string>
30
+
31
+ #include "absl/status/status.h"
32
+ #include "absl/strings/string_view.h"
33
+ #include "absl/types/optional.h"
34
+
35
+ #include <grpc/impl/codegen/connectivity_state.h>
36
+ #include <grpc/slice.h>
37
+ #include <grpc/status.h>
38
+ #include <grpc/support/atm.h>
39
+ #include <grpc/support/log.h>
25
40
 
26
41
  #include "src/core/lib/channel/context.h"
42
+ #include "src/core/lib/debug/trace.h"
43
+ #include "src/core/lib/gprpp/debug_location.h"
27
44
  #include "src/core/lib/gprpp/orphanable.h"
45
+ #include "src/core/lib/gprpp/ref_counted.h"
28
46
  #include "src/core/lib/iomgr/call_combiner.h"
47
+ #include "src/core/lib/iomgr/closure.h"
29
48
  #include "src/core/lib/iomgr/endpoint.h"
49
+ #include "src/core/lib/iomgr/error.h"
50
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
30
51
  #include "src/core/lib/iomgr/polling_entity.h"
31
52
  #include "src/core/lib/iomgr/pollset.h"
32
- #include "src/core/lib/iomgr/pollset_set.h"
33
53
  #include "src/core/lib/promise/arena_promise.h"
54
+ #include "src/core/lib/promise/context.h"
34
55
  #include "src/core/lib/promise/latch.h"
35
56
  #include "src/core/lib/resource_quota/arena.h"
36
- #include "src/core/lib/slice/slice_internal.h"
57
+ #include "src/core/lib/slice/slice.h"
37
58
  #include "src/core/lib/transport/byte_stream.h"
38
59
  #include "src/core/lib/transport/connectivity_state.h"
39
60
  #include "src/core/lib/transport/metadata_batch.h"
40
61
 
62
+ struct grpc_transport_stream_op_batch_payload;
63
+
41
64
  /* Minimum and maximum protocol accepted versions. */
42
65
  #define GRPC_PROTOCOL_VERSION_MAX_MAJOR 2
43
66
  #define GRPC_PROTOCOL_VERSION_MAX_MINOR 1
@@ -514,6 +537,9 @@ void grpc_transport_destroy_stream(grpc_transport* transport,
514
537
  void grpc_transport_stream_op_batch_finish_with_failure(
515
538
  grpc_transport_stream_op_batch* batch, grpc_error_handle error,
516
539
  grpc_core::CallCombiner* call_combiner);
540
+ void grpc_transport_stream_op_batch_queue_finish_with_failure(
541
+ grpc_transport_stream_op_batch* batch, grpc_error_handle error,
542
+ grpc_core::CallCombinerClosureList* closures);
517
543
 
518
544
  std::string grpc_transport_stream_op_batch_string(
519
545
  grpc_transport_stream_op_batch* op);
@@ -21,6 +21,16 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stddef.h>
25
+
26
+ #include "absl/strings/string_view.h"
27
+
28
+ #include "src/core/lib/iomgr/closure.h"
29
+ #include "src/core/lib/iomgr/endpoint.h"
30
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
31
+ #include "src/core/lib/iomgr/pollset.h"
32
+ #include "src/core/lib/promise/arena_promise.h"
33
+ #include "src/core/lib/resource_quota/arena.h"
24
34
  #include "src/core/lib/transport/transport.h"
25
35
 
26
36
  typedef struct grpc_transport_vtable {
@@ -18,25 +18,24 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <inttypes.h>
22
- #include <stdarg.h>
23
- #include <stdio.h>
24
- #include <string.h>
25
-
21
+ #include <algorithm>
22
+ #include <memory>
23
+ #include <string>
26
24
  #include <vector>
27
25
 
28
- #include "absl/strings/escaping.h"
29
26
  #include "absl/strings/str_cat.h"
30
27
  #include "absl/strings/str_format.h"
31
28
  #include "absl/strings/str_join.h"
32
29
 
33
- #include <grpc/support/alloc.h>
34
- #include <grpc/support/string_util.h>
30
+ #include <grpc/support/log.h>
35
31
 
36
32
  #include "src/core/lib/channel/channel_stack.h"
37
- #include "src/core/lib/gpr/string.h"
38
- #include "src/core/lib/slice/slice_string_helpers.h"
33
+ #include "src/core/lib/gprpp/orphanable.h"
34
+ #include "src/core/lib/iomgr/error.h"
35
+ #include "src/core/lib/transport/byte_stream.h"
39
36
  #include "src/core/lib/transport/connectivity_state.h"
37
+ #include "src/core/lib/transport/metadata_batch.h"
38
+ #include "src/core/lib/transport/transport.h"
40
39
 
41
40
  /* These routines are here to facilitate debugging - they produce string
42
41
  representations of various transport data structures */
@@ -18,19 +18,27 @@
18
18
 
19
19
  #include "src/core/lib/uri/uri_parser.h"
20
20
 
21
- #include <string.h>
21
+ #include <ctype.h>
22
+ #include <stddef.h>
22
23
 
24
+ #include <algorithm>
25
+ #include <functional>
23
26
  #include <map>
24
27
  #include <string>
28
+ #include <utility>
25
29
 
30
+ #include "absl/status/status.h"
31
+ #include "absl/strings/ascii.h"
26
32
  #include "absl/strings/escaping.h"
33
+ #include "absl/strings/match.h"
34
+ #include "absl/strings/str_cat.h"
27
35
  #include "absl/strings/str_format.h"
36
+ #include "absl/strings/str_join.h"
28
37
  #include "absl/strings/str_split.h"
38
+ #include "absl/strings/strip.h"
29
39
 
30
40
  #include <grpc/support/log.h>
31
41
 
32
- #include "src/core/lib/gpr/string.h"
33
-
34
42
  namespace grpc_core {
35
43
 
36
44
  namespace {
@@ -19,8 +19,6 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include <stddef.h>
23
-
24
22
  #include <map>
25
23
  #include <string>
26
24
  #include <vector>
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include "src/core/lib/config/core_configuration.h"
24
24
  #include "src/core/lib/surface/builtins.h"
25
+ #include "src/core/lib/transport/http_connect_handshaker.h"
26
+ #include "src/core/lib/transport/tcp_connect_handshaker.h"
25
27
 
26
28
  extern void grpc_register_extra_plugins(void);
27
29
 
@@ -33,6 +35,8 @@ void grpc_lb_policy_grpclb_init(void);
33
35
  void grpc_lb_policy_grpclb_shutdown(void);
34
36
  void grpc_lb_policy_priority_init(void);
35
37
  void grpc_lb_policy_priority_shutdown(void);
38
+ void grpc_lb_policy_outlier_detection_init(void);
39
+ void grpc_lb_policy_outlier_detection_shutdown(void);
36
40
  void grpc_lb_policy_weighted_target_init(void);
37
41
  void grpc_lb_policy_weighted_target_shutdown(void);
38
42
  void grpc_lb_policy_pick_first_init(void);
@@ -58,6 +62,8 @@ void grpc_register_built_in_plugins(void) {
58
62
  grpc_register_plugin(grpc_core::RlsLbPluginInit,
59
63
  grpc_core::RlsLbPluginShutdown);
60
64
  #endif // !GRPC_NO_RLS
65
+ grpc_register_plugin(grpc_lb_policy_outlier_detection_init,
66
+ grpc_lb_policy_outlier_detection_shutdown);
61
67
  grpc_register_plugin(grpc_lb_policy_priority_init,
62
68
  grpc_lb_policy_priority_shutdown);
63
69
  grpc_register_plugin(grpc_lb_policy_weighted_target_init,
@@ -101,6 +107,11 @@ extern void RegisterBinderResolver(CoreConfiguration::Builder* builder);
101
107
  #endif
102
108
 
103
109
  void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
110
+ // The order of the handshaker registration is crucial here.
111
+ // We want TCP connect handshaker to be registered last so that it is added to
112
+ // the start of the handshaker list.
113
+ RegisterHttpConnectHandshaker(builder);
114
+ RegisterTCPConnectHandshaker(builder);
104
115
  BuildClientChannelConfiguration(builder);
105
116
  SecurityRegisterHandshakerFactories(builder);
106
117
  RegisterClientAuthorityFilter(builder);
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <memory>
25
+
24
26
  #include <openssl/ssl.h>
25
27
 
26
28
  #include <grpc/slice.h>
@@ -22,6 +22,8 @@
22
22
 
23
23
  #ifdef OPENSSL_IS_BORINGSSL
24
24
 
25
+ #include "absl/memory/memory.h"
26
+
25
27
  // BoringSSL allows SSL_SESSION to outlive SSL and SSL_CTX objects which are
26
28
  // re-created by gRPC on every certificate rotation or subchannel creation.
27
29
  // BoringSSL guarantees that SSL_SESSION is immutable so it's safe to share