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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (487) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -20,49 +20,74 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/client/chttp2_connector.h"
22
22
 
23
- #include <string.h>
23
+ #include <stdint.h>
24
+
25
+ #include <string>
26
+
27
+ #include "absl/container/inlined_vector.h"
28
+ #include "absl/status/status.h"
29
+ #include "absl/status/statusor.h"
24
30
 
25
31
  #include <grpc/grpc.h>
26
32
  #include <grpc/grpc_posix.h>
27
- #include <grpc/slice_buffer.h>
33
+ #include <grpc/grpc_security.h>
34
+ #include <grpc/impl/codegen/grpc_types.h>
35
+ #include <grpc/status.h>
28
36
  #include <grpc/support/alloc.h>
29
- #include <grpc/support/string_util.h>
37
+ #include <grpc/support/log.h>
38
+ #include <grpc/support/sync.h>
30
39
 
31
40
  #include "src/core/ext/filters/client_channel/client_channel.h"
41
+ #include "src/core/ext/filters/client_channel/client_channel_factory.h"
32
42
  #include "src/core/ext/filters/client_channel/connector.h"
43
+ #include "src/core/ext/filters/client_channel/subchannel.h"
33
44
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
34
45
  #include "src/core/lib/address_utils/sockaddr_utils.h"
35
46
  #include "src/core/lib/channel/channel_args.h"
36
- #include "src/core/lib/channel/handshaker.h"
47
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
48
+ #include "src/core/lib/channel/channel_stack_builder.h"
49
+ #include "src/core/lib/channel/channelz.h"
37
50
  #include "src/core/lib/config/core_configuration.h"
38
- #include "src/core/lib/gprpp/memory.h"
51
+ #include "src/core/lib/debug/trace.h"
52
+ #include "src/core/lib/gprpp/debug_location.h"
53
+ #include "src/core/lib/gprpp/orphanable.h"
54
+ #include "src/core/lib/gprpp/unique_type_name.h"
39
55
  #include "src/core/lib/iomgr/endpoint.h"
40
- #include "src/core/lib/iomgr/tcp_client.h"
56
+ #include "src/core/lib/iomgr/exec_ctx.h"
57
+ #include "src/core/lib/iomgr/resolved_address.h"
41
58
  #include "src/core/lib/resolver/resolver_registry.h"
42
- #include "src/core/lib/resource_quota/api.h"
43
59
  #include "src/core/lib/security/credentials/credentials.h"
44
60
  #include "src/core/lib/security/credentials/insecure/insecure_credentials.h"
45
61
  #include "src/core/lib/security/security_connector/security_connector.h"
46
62
  #include "src/core/lib/slice/slice_internal.h"
47
63
  #include "src/core/lib/surface/api_trace.h"
48
64
  #include "src/core/lib/surface/channel.h"
65
+ #include "src/core/lib/surface/channel_stack_type.h"
66
+ #include "src/core/lib/transport/error_utils.h"
67
+ #include "src/core/lib/transport/handshaker.h"
68
+ #include "src/core/lib/transport/handshaker_registry.h"
69
+ #include "src/core/lib/transport/tcp_connect_handshaker.h"
49
70
  #include "src/core/lib/transport/transport.h"
50
- #include "src/core/lib/uri/uri_parser.h"
51
71
 
52
72
  #ifdef GPR_SUPPORT_CHANNELS_FROM_FD
53
73
 
54
74
  #include <fcntl.h>
55
75
 
76
+ #include "src/core/lib/iomgr/ev_posix.h"
56
77
  #include "src/core/lib/iomgr/tcp_client_posix.h"
57
- #include "src/core/lib/iomgr/tcp_posix.h"
58
78
 
59
79
  #endif // GPR_SUPPORT_CHANNELS_FROM_FD
60
80
 
61
81
  namespace grpc_core {
62
82
 
63
- Chttp2Connector::Chttp2Connector() {
64
- GRPC_CLOSURE_INIT(&connected_, Connected, this, grpc_schedule_on_exec_ctx);
83
+ namespace {
84
+ void NullThenSchedClosure(const DebugLocation& location, grpc_closure** closure,
85
+ grpc_error_handle error) {
86
+ grpc_closure* c = *closure;
87
+ *closure = nullptr;
88
+ ExecCtx::Run(location, c, error);
65
89
  }
90
+ } // namespace
66
91
 
67
92
  Chttp2Connector::~Chttp2Connector() {
68
93
  if (endpoint_ != nullptr) {
@@ -72,92 +97,52 @@ Chttp2Connector::~Chttp2Connector() {
72
97
 
73
98
  void Chttp2Connector::Connect(const Args& args, Result* result,
74
99
  grpc_closure* notify) {
75
- grpc_endpoint** ep;
76
100
  {
77
101
  MutexLock lock(&mu_);
78
102
  GPR_ASSERT(notify_ == nullptr);
79
103
  args_ = args;
80
104
  result_ = result;
81
105
  notify_ = notify;
82
- GPR_ASSERT(!connecting_);
83
- connecting_ = true;
84
106
  GPR_ASSERT(endpoint_ == nullptr);
85
- ep = &endpoint_;
86
107
  }
87
- // In some implementations, the closure can be flushed before
88
- // grpc_tcp_client_connect() returns, and since the closure requires access
89
- // to mu_, this can result in a deadlock (see
90
- // https://github.com/grpc/grpc/issues/16427 for details).
91
- // grpc_tcp_client_connect() will fill endpoint_ with proper contents, and we
92
- // make sure that we still exist at that point by taking a ref.
93
- Ref().release(); // Ref held by callback.
94
- grpc_tcp_client_connect(&connected_, ep, args.interested_parties,
95
- args.channel_args, args.address, args.deadline);
108
+ absl::StatusOr<std::string> address = grpc_sockaddr_to_uri(args.address);
109
+ if (!address.ok()) {
110
+ grpc_error_handle error =
111
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(address.status().ToString());
112
+ NullThenSchedClosure(DEBUG_LOCATION, &notify_, error);
113
+ return;
114
+ }
115
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
116
+ grpc_channel_arg_string_create(
117
+ const_cast<char*>(GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS),
118
+ const_cast<char*>(address.value().c_str())),
119
+ grpc_channel_arg_integer_create(
120
+ const_cast<char*>(GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET),
121
+ 1),
122
+ };
123
+ grpc_channel_args* channel_args = grpc_channel_args_copy_and_add(
124
+ args_.channel_args, args_to_add.data(), args_to_add.size());
125
+ handshake_mgr_ = MakeRefCounted<HandshakeManager>();
126
+ CoreConfiguration::Get().handshaker_registry().AddHandshakers(
127
+ HANDSHAKER_CLIENT, channel_args, args_.interested_parties,
128
+ handshake_mgr_.get());
129
+ Ref().release(); // Ref held by OnHandshakeDone().
130
+ handshake_mgr_->DoHandshake(nullptr /* endpoint */, channel_args,
131
+ args.deadline, nullptr /* acceptor */,
132
+ OnHandshakeDone, this);
133
+ grpc_channel_args_destroy(channel_args);
96
134
  }
97
135
 
98
136
  void Chttp2Connector::Shutdown(grpc_error_handle error) {
99
137
  MutexLock lock(&mu_);
100
138
  shutdown_ = true;
101
139
  if (handshake_mgr_ != nullptr) {
140
+ // Handshaker will also shutdown the endpoint if it exists
102
141
  handshake_mgr_->Shutdown(GRPC_ERROR_REF(error));
103
142
  }
104
- // If handshaking is not yet in progress, shutdown the endpoint.
105
- // Otherwise, the handshaker will do this for us.
106
- if (!connecting_ && endpoint_ != nullptr) {
107
- grpc_endpoint_shutdown(endpoint_, GRPC_ERROR_REF(error));
108
- }
109
143
  GRPC_ERROR_UNREF(error);
110
144
  }
111
145
 
112
- void Chttp2Connector::Connected(void* arg, grpc_error_handle error) {
113
- Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
114
- bool unref = false;
115
- {
116
- MutexLock lock(&self->mu_);
117
- GPR_ASSERT(self->connecting_);
118
- self->connecting_ = false;
119
- if (error != GRPC_ERROR_NONE || self->shutdown_) {
120
- if (error == GRPC_ERROR_NONE) {
121
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("connector shutdown");
122
- } else {
123
- error = GRPC_ERROR_REF(error);
124
- }
125
- if (self->endpoint_ != nullptr) {
126
- grpc_endpoint_shutdown(self->endpoint_, GRPC_ERROR_REF(error));
127
- }
128
- self->result_->Reset();
129
- grpc_closure* notify = self->notify_;
130
- self->notify_ = nullptr;
131
- ExecCtx::Run(DEBUG_LOCATION, notify, error);
132
- unref = true;
133
- } else {
134
- GPR_ASSERT(self->endpoint_ != nullptr);
135
- self->StartHandshakeLocked();
136
- }
137
- }
138
- if (unref) self->Unref();
139
- }
140
-
141
- void Chttp2Connector::StartHandshakeLocked() {
142
- handshake_mgr_ = MakeRefCounted<HandshakeManager>();
143
- CoreConfiguration::Get().handshaker_registry().AddHandshakers(
144
- HANDSHAKER_CLIENT, args_.channel_args, args_.interested_parties,
145
- handshake_mgr_.get());
146
- grpc_endpoint_add_to_pollset_set(endpoint_, args_.interested_parties);
147
- handshake_mgr_->DoHandshake(endpoint_, args_.channel_args, args_.deadline,
148
- nullptr /* acceptor */, OnHandshakeDone, this);
149
- endpoint_ = nullptr; // Endpoint handed off to handshake manager.
150
- }
151
-
152
- namespace {
153
- void NullThenSchedClosure(const DebugLocation& location, grpc_closure** closure,
154
- grpc_error_handle error) {
155
- grpc_closure* c = *closure;
156
- *closure = nullptr;
157
- ExecCtx::Run(location, c, error);
158
- }
159
- } // namespace
160
-
161
146
  void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error_handle error) {
162
147
  auto* args = static_cast<HandshakerArgs*>(arg);
163
148
  Chttp2Connector* self = static_cast<Chttp2Connector*>(args->user_data);
@@ -306,7 +291,8 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
306
291
  if (channel_credentials == nullptr) {
307
292
  gpr_log(GPR_ERROR,
308
293
  "Can't create subchannel: channel credentials missing for secure "
309
- "channel.");
294
+ "channel. Got args: %s",
295
+ grpc_channel_args_string(args).c_str());
310
296
  return nullptr;
311
297
  }
312
298
  // Make sure security connector does not already exist in args.
@@ -344,29 +330,19 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
344
330
  }
345
331
  };
346
332
 
347
- grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args,
348
- grpc_error_handle* error) {
333
+ absl::StatusOr<RefCountedPtr<Channel>> CreateChannel(const char* target,
334
+ ChannelArgs args) {
349
335
  if (target == nullptr) {
350
336
  gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
351
- if (error != nullptr) {
352
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel target is NULL");
353
- }
354
- return nullptr;
337
+ return absl::InvalidArgumentError("channel target is NULL");
355
338
  }
356
339
  // Add channel arg containing the server URI.
357
340
  std::string canonical_target =
358
341
  CoreConfiguration::Get().resolver_registry().AddDefaultPrefixIfNeeded(
359
342
  target);
360
- grpc_arg arg = grpc_channel_arg_string_create(
361
- const_cast<char*>(GRPC_ARG_SERVER_URI),
362
- const_cast<char*>(canonical_target.c_str()));
363
- const char* to_remove[] = {GRPC_ARG_SERVER_URI};
364
- grpc_channel_args* new_args =
365
- grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
366
- grpc_channel* channel = grpc_channel_create_internal(
367
- target, new_args, GRPC_CLIENT_CHANNEL, nullptr, error);
368
- grpc_channel_args_destroy(new_args);
369
- return channel;
343
+ return Channel::Create(target,
344
+ args.Set(GRPC_ARG_SERVER_URI, canonical_target),
345
+ GRPC_CLIENT_CHANNEL, nullptr);
370
346
  }
371
347
 
372
348
  } // namespace
@@ -389,33 +365,30 @@ void FactoryInit() {
389
365
  // - perform handshakes
390
366
  grpc_channel* grpc_channel_create(const char* target,
391
367
  grpc_channel_credentials* creds,
392
- const grpc_channel_args* args) {
368
+ const grpc_channel_args* c_args) {
393
369
  grpc_core::ExecCtx exec_ctx;
394
370
  GRPC_API_TRACE("grpc_secure_channel_create(target=%s, creds=%p, args=%p)", 3,
395
- (target, (void*)creds, (void*)args));
396
- args = grpc_core::CoreConfiguration::Get()
397
- .channel_args_preconditioning()
398
- .PreconditionChannelArgs(args);
371
+ (target, (void*)creds, (void*)c_args));
399
372
  grpc_channel* channel = nullptr;
400
373
  grpc_error_handle error = GRPC_ERROR_NONE;
401
374
  if (creds != nullptr) {
402
375
  // Add channel args containing the client channel factory and channel
403
376
  // credentials.
404
377
  gpr_once_init(&g_factory_once, FactoryInit);
405
- grpc_arg channel_factory_arg =
406
- grpc_core::ClientChannelFactory::CreateChannelArg(g_factory);
407
- grpc_arg args_to_add[] = {channel_factory_arg,
408
- grpc_channel_credentials_to_arg(creds)};
409
- const char* arg_to_remove = channel_factory_arg.key;
410
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
411
- args, &arg_to_remove, 1, args_to_add, GPR_ARRAY_SIZE(args_to_add));
412
- new_args = creds->update_arguments(new_args);
378
+ grpc_core::ChannelArgs args =
379
+ creds->update_arguments(grpc_core::CoreConfiguration::Get()
380
+ .channel_args_preconditioning()
381
+ .PreconditionChannelArgs(c_args)
382
+ .SetObject(creds->Ref())
383
+ .SetObject(g_factory));
413
384
  // Create channel.
414
- channel = grpc_core::CreateChannel(target, new_args, &error);
415
- // Clean up.
416
- grpc_channel_args_destroy(new_args);
385
+ auto r = grpc_core::CreateChannel(target, args);
386
+ if (r.ok()) {
387
+ channel = r->release()->c_ptr();
388
+ } else {
389
+ error = absl_status_to_grpc_error(r.status());
390
+ }
417
391
  }
418
- grpc_channel_args_destroy(args);
419
392
  if (channel == nullptr) {
420
393
  intptr_t integer;
421
394
  grpc_status_code status = GRPC_STATUS_INTERNAL;
@@ -439,19 +412,18 @@ grpc_channel* grpc_channel_create_from_fd(const char* target, int fd,
439
412
  (target, fd, creds, args));
440
413
  // For now, we only support insecure channel credentials.
441
414
  if (creds == nullptr ||
442
- creds->type() != grpc_core::InsecureServerCredentials::Type()) {
415
+ creds->type() != grpc_core::InsecureCredentials::Type()) {
443
416
  return grpc_lame_client_channel_create(
444
417
  target, GRPC_STATUS_INTERNAL,
445
418
  "Failed to create client channel due to invalid creds");
446
419
  }
447
- grpc_arg default_authority_arg = grpc_channel_arg_string_create(
448
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
449
- const_cast<char*>("test.authority"));
450
- args = grpc_channel_args_copy_and_add(args, &default_authority_arg, 1);
451
- const grpc_channel_args* final_args = grpc_core::CoreConfiguration::Get()
452
- .channel_args_preconditioning()
453
- .PreconditionChannelArgs(args);
454
- grpc_channel_args_destroy(args);
420
+ const grpc_channel_args* final_args =
421
+ grpc_core::CoreConfiguration::Get()
422
+ .channel_args_preconditioning()
423
+ .PreconditionChannelArgs(args)
424
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, "test.authority")
425
+ .SetObject(creds->Ref())
426
+ .ToC();
455
427
 
456
428
  int flags = fcntl(fd, F_GETFL, 0);
457
429
  GPR_ASSERT(fcntl(fd, F_SETFL, flags | O_NONBLOCK) == 0);
@@ -460,26 +432,20 @@ grpc_channel* grpc_channel_create_from_fd(const char* target, int fd,
460
432
  grpc_transport* transport =
461
433
  grpc_create_chttp2_transport(final_args, client, true);
462
434
  GPR_ASSERT(transport);
463
- grpc_error_handle error = GRPC_ERROR_NONE;
464
- grpc_channel* channel = grpc_channel_create_internal(
465
- target, final_args, GRPC_CLIENT_DIRECT_CHANNEL, transport, &error);
435
+ auto channel = grpc_core::Channel::Create(
436
+ target, grpc_core::ChannelArgs::FromC(final_args),
437
+ GRPC_CLIENT_DIRECT_CHANNEL, transport);
466
438
  grpc_channel_args_destroy(final_args);
467
- if (channel != nullptr) {
439
+ if (channel.ok()) {
468
440
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
469
441
  grpc_core::ExecCtx::Get()->Flush();
442
+ return channel->release()->c_ptr();
470
443
  } else {
471
- intptr_t integer;
472
- grpc_status_code status = GRPC_STATUS_INTERNAL;
473
- if (grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &integer)) {
474
- status = static_cast<grpc_status_code>(integer);
475
- }
476
- GRPC_ERROR_UNREF(error);
477
444
  grpc_transport_destroy(transport);
478
- channel = grpc_lame_client_channel_create(
479
- target, status, "Failed to create client channel");
445
+ return grpc_lame_client_channel_create(
446
+ target, static_cast<grpc_status_code>(channel.status().code()),
447
+ "Failed to create client channel");
480
448
  }
481
-
482
- return channel;
483
449
  }
484
450
 
485
451
  #else // !GPR_SUPPORT_CHANNELS_FROM_FD
@@ -21,23 +21,27 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/types/optional.h"
25
+
24
26
  #include "src/core/ext/filters/client_channel/connector.h"
25
- #include "src/core/lib/channel/handshaker.h"
26
- #include "src/core/lib/channel/handshaker_registry.h"
27
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
+ #include "src/core/lib/gprpp/sync.h"
29
+ #include "src/core/lib/iomgr/closure.h"
30
+ #include "src/core/lib/iomgr/endpoint.h"
31
+ #include "src/core/lib/iomgr/error.h"
32
+ #include "src/core/lib/iomgr/timer.h"
33
+ #include "src/core/lib/transport/handshaker.h"
27
34
 
28
35
  namespace grpc_core {
29
36
 
30
37
  class Chttp2Connector : public SubchannelConnector {
31
38
  public:
32
- Chttp2Connector();
33
39
  ~Chttp2Connector() override;
34
40
 
35
41
  void Connect(const Args& args, Result* result, grpc_closure* notify) override;
36
42
  void Shutdown(grpc_error_handle error) override;
37
43
 
38
44
  private:
39
- static void Connected(void* arg, grpc_error_handle error);
40
- void StartHandshakeLocked();
41
45
  static void OnHandshakeDone(void* arg, grpc_error_handle error);
42
46
  static void OnReceiveSettings(void* arg, grpc_error_handle error);
43
47
  static void OnTimeout(void* arg, grpc_error_handle error);
@@ -58,11 +62,9 @@ class Chttp2Connector : public SubchannelConnector {
58
62
  Result* result_ = nullptr;
59
63
  grpc_closure* notify_ = nullptr;
60
64
  bool shutdown_ = false;
61
- bool connecting_ = false;
62
65
  // Holds the endpoint when first created before being handed off to
63
66
  // the handshake manager, and then again after handshake is done.
64
67
  grpc_endpoint* endpoint_ = nullptr;
65
- grpc_closure connected_;
66
68
  grpc_closure on_receive_settings_;
67
69
  grpc_timer timer_;
68
70
  grpc_closure on_timeout_;
@@ -24,11 +24,20 @@
24
24
  #include <limits.h>
25
25
  #include <string.h>
26
26
 
27
+ #include <algorithm>
28
+ #include <map>
29
+ #include <memory>
30
+ #include <string>
31
+ #include <utility>
27
32
  #include <vector>
28
33
 
29
- #include "absl/strings/match.h"
34
+ #include "absl/base/thread_annotations.h"
35
+ #include "absl/memory/memory.h"
36
+ #include "absl/status/status.h"
37
+ #include "absl/status/statusor.h"
30
38
  #include "absl/strings/str_cat.h"
31
39
  #include "absl/strings/str_format.h"
40
+ #include "absl/strings/string_view.h"
32
41
  #include "absl/strings/strip.h"
33
42
 
34
43
  #include <grpc/grpc.h>
@@ -36,38 +45,53 @@
36
45
  #include <grpc/impl/codegen/grpc_types.h>
37
46
  #include <grpc/support/alloc.h>
38
47
  #include <grpc/support/log.h>
39
- #include <grpc/support/sync.h>
48
+ #include <grpc/support/time.h>
40
49
 
41
- #include "src/core/ext/filters/http/server/http_server_filter.h"
42
50
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
51
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
43
52
  #include "src/core/ext/transport/chttp2/transport/internal.h"
44
53
  #include "src/core/lib/address_utils/sockaddr_utils.h"
45
54
  #include "src/core/lib/channel/channel_args.h"
46
- #include "src/core/lib/channel/handshaker.h"
55
+ #include "src/core/lib/channel/channel_stack_builder.h"
56
+ #include "src/core/lib/channel/channelz.h"
47
57
  #include "src/core/lib/config/core_configuration.h"
48
- #include "src/core/lib/gprpp/ref_counted.h"
58
+ #include "src/core/lib/debug/trace.h"
59
+ #include "src/core/lib/gpr/useful.h"
60
+ #include "src/core/lib/gprpp/debug_location.h"
61
+ #include "src/core/lib/gprpp/orphanable.h"
49
62
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
63
+ #include "src/core/lib/gprpp/sync.h"
64
+ #include "src/core/lib/gprpp/time.h"
65
+ #include "src/core/lib/gprpp/unique_type_name.h"
66
+ #include "src/core/lib/iomgr/closure.h"
50
67
  #include "src/core/lib/iomgr/endpoint.h"
68
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
69
+ #include "src/core/lib/iomgr/pollset.h"
70
+ #include "src/core/lib/iomgr/pollset_set.h"
51
71
  #include "src/core/lib/iomgr/resolve_address.h"
72
+ #include "src/core/lib/iomgr/resolved_address.h"
52
73
  #include "src/core/lib/iomgr/tcp_server.h"
74
+ #include "src/core/lib/iomgr/timer.h"
53
75
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
54
76
  #include "src/core/lib/resource_quota/api.h"
55
77
  #include "src/core/lib/resource_quota/memory_quota.h"
56
- #include "src/core/lib/security/context/security_context.h"
78
+ #include "src/core/lib/resource_quota/resource_quota.h"
57
79
  #include "src/core/lib/security/credentials/credentials.h"
58
80
  #include "src/core/lib/security/credentials/insecure/insecure_credentials.h"
81
+ #include "src/core/lib/security/security_connector/security_connector.h"
59
82
  #include "src/core/lib/slice/slice_internal.h"
60
83
  #include "src/core/lib/surface/api_trace.h"
61
84
  #include "src/core/lib/surface/server.h"
62
85
  #include "src/core/lib/transport/error_utils.h"
86
+ #include "src/core/lib/transport/handshaker.h"
87
+ #include "src/core/lib/transport/handshaker_registry.h"
88
+ #include "src/core/lib/transport/transport.h"
63
89
  #include "src/core/lib/uri/uri_parser.h"
64
90
 
65
91
  #ifdef GPR_SUPPORT_CHANNELS_FROM_FD
66
-
92
+ #include "src/core/lib/iomgr/ev_posix.h"
67
93
  #include "src/core/lib/iomgr/exec_ctx.h"
68
94
  #include "src/core/lib/iomgr/tcp_posix.h"
69
- #include "src/core/lib/surface/completion_queue.h"
70
-
71
95
  #endif // GPR_SUPPORT_CHANNELS_FROM_FD
72
96
 
73
97
  namespace grpc_core {
@@ -671,11 +695,15 @@ grpc_error_handle Chttp2ServerListener::Create(
671
695
  // Create channelz node.
672
696
  if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
673
697
  GRPC_ENABLE_CHANNELZ_DEFAULT)) {
674
- std::string string_address = grpc_sockaddr_to_uri(addr);
698
+ auto string_address = grpc_sockaddr_to_uri(addr);
699
+ if (!string_address.ok()) {
700
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(
701
+ string_address.status().ToString());
702
+ }
675
703
  listener->channelz_listen_socket_ =
676
704
  MakeRefCounted<channelz::ListenSocketNode>(
677
- string_address.c_str(),
678
- absl::StrFormat("chttp2 listener %s", string_address.c_str()));
705
+ *string_address,
706
+ absl::StrCat("chttp2 listener ", *string_address));
679
707
  }
680
708
  // Register with the server only upon success
681
709
  server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
@@ -744,7 +772,8 @@ void Chttp2ServerListener::Start(
744
772
  auto watcher = absl::make_unique<ConfigFetcherWatcher>(Ref());
745
773
  config_fetcher_watcher_ = watcher.get();
746
774
  server_->config_fetcher()->StartWatch(
747
- grpc_sockaddr_to_string(&resolved_address_, false), std::move(watcher));
775
+ grpc_sockaddr_to_string(&resolved_address_, false).value(),
776
+ std::move(watcher));
748
777
  } else {
749
778
  {
750
779
  MutexLock lock(&mu_);
@@ -984,7 +1013,7 @@ grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
984
1013
  if (security_connector == nullptr) {
985
1014
  *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
986
1015
  absl::StrCat("Unable to create secure server with credentials of type ",
987
- server_credentials->type()));
1016
+ server_credentials->type().name()));
988
1017
  return args;
989
1018
  }
990
1019
  grpc_arg arg_to_add =
@@ -1033,7 +1062,7 @@ int grpc_server_add_http2_port(grpc_server* server, const char* addr,
1033
1062
  if (sc == nullptr) {
1034
1063
  err = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1035
1064
  "Unable to create secure server with credentials of type ",
1036
- creds->type()));
1065
+ creds->type().name()));
1037
1066
  goto done;
1038
1067
  }
1039
1068
  grpc_arg args_to_add[2];
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <functional>
25
+
24
26
  #include <grpc/impl/codegen/grpc_types.h>
25
27
 
26
28
  #include "src/core/lib/iomgr/error.h"
@@ -20,12 +20,12 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/bin_decoder.h"
22
22
 
23
+ #include "absl/base/attributes.h"
24
+
23
25
  #include <grpc/support/alloc.h>
24
26
  #include <grpc/support/log.h>
25
27
 
26
- #include "src/core/lib/gpr/string.h"
27
- #include "src/core/lib/slice/slice_internal.h"
28
- #include "src/core/lib/slice/slice_string_helpers.h"
28
+ #include "src/core/lib/slice/slice_refcount.h"
29
29
 
30
30
  static uint8_t decode_table[] = {
31
31
  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
@@ -21,7 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdbool.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
25
26
 
26
27
  #include <grpc/slice.h>
27
28
 
@@ -20,6 +20,7 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
22
22
 
23
+ #include <stdint.h>
23
24
  #include <string.h>
24
25
 
25
26
  #include <grpc/support/log.h>