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
@@ -20,69 +20,75 @@
20
20
 
21
21
  #include "src/core/lib/surface/lame_client.h"
22
22
 
23
- #include <string.h>
23
+ #include <memory>
24
+ #include <utility>
24
25
 
25
- #include <atomic>
26
+ #include "absl/memory/memory.h"
27
+ #include "absl/status/statusor.h"
26
28
 
27
29
  #include <grpc/grpc.h>
28
- #include <grpc/support/alloc.h>
30
+ #include <grpc/impl/codegen/connectivity_state.h>
31
+ #include <grpc/status.h>
29
32
  #include <grpc/support/log.h>
30
33
 
31
- #include "src/core/lib/channel/channel_stack.h"
32
- #include "src/core/lib/gpr/string.h"
33
- #include "src/core/lib/resource_quota/api.h"
34
+ #include "src/core/lib/channel/channel_args.h"
35
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
36
+ #include "src/core/lib/channel/channel_stack_builder.h"
37
+ #include "src/core/lib/channel/promise_based_filter.h"
38
+ #include "src/core/lib/config/core_configuration.h"
39
+ #include "src/core/lib/debug/trace.h"
40
+ #include "src/core/lib/gpr/useful.h"
41
+ #include "src/core/lib/gprpp/debug_location.h"
42
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
43
+ #include "src/core/lib/gprpp/sync.h"
44
+ #include "src/core/lib/iomgr/exec_ctx.h"
45
+ #include "src/core/lib/promise/poll.h"
46
+ #include "src/core/lib/promise/promise.h"
34
47
  #include "src/core/lib/surface/api_trace.h"
35
- #include "src/core/lib/surface/call.h"
36
48
  #include "src/core/lib/surface/channel.h"
49
+ #include "src/core/lib/surface/channel_stack_type.h"
37
50
  #include "src/core/lib/transport/connectivity_state.h"
51
+ #include "src/core/lib/transport/transport.h"
52
+
53
+ // Avoid some IWYU confusion:
54
+ // IWYU pragma: no_include "src/core/lib/gprpp/orphanable.h"
38
55
 
39
56
  #define GRPC_ARG_LAME_FILTER_ERROR "grpc.lame_filter_error"
40
57
 
41
58
  namespace grpc_core {
42
59
 
43
- namespace {
60
+ const grpc_channel_filter LameClientFilter::kFilter =
61
+ MakePromiseBasedFilter<LameClientFilter, FilterEndpoint::kClient,
62
+ kFilterIsLast>("lame-client");
44
63
 
45
- struct ChannelData {
46
- explicit ChannelData(grpc_channel_element_args* args)
47
- : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {
48
- grpc_error_handle* err = grpc_channel_args_find_pointer<grpc_error_handle>(
49
- args->channel_args, GRPC_ARG_LAME_FILTER_ERROR);
50
- if (err != nullptr) error = GRPC_ERROR_REF(*err);
51
- }
52
-
53
- ~ChannelData() { GRPC_ERROR_UNREF(error); }
64
+ absl::StatusOr<LameClientFilter> LameClientFilter::Create(ChannelArgs args,
65
+ ChannelFilter::Args) {
66
+ return LameClientFilter(
67
+ *args.GetPointer<absl::Status>(GRPC_ARG_LAME_FILTER_ERROR));
68
+ }
54
69
 
55
- grpc_error_handle error = GRPC_ERROR_NONE;
56
- Mutex mu;
57
- ConnectivityStateTracker state_tracker;
58
- };
70
+ LameClientFilter::LameClientFilter(absl::Status error)
71
+ : error_(std::move(error)), state_(absl::make_unique<State>()) {}
59
72
 
60
- struct CallData {
61
- CallCombiner* call_combiner;
62
- };
73
+ LameClientFilter::State::State()
74
+ : state_tracker("lame_client", GRPC_CHANNEL_SHUTDOWN) {}
63
75
 
64
- void lame_start_transport_stream_op_batch(grpc_call_element* elem,
65
- grpc_transport_stream_op_batch* op) {
66
- CallData* calld = static_cast<CallData*>(elem->call_data);
67
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
68
- grpc_transport_stream_op_batch_finish_with_failure(
69
- op, GRPC_ERROR_REF(chand->error), calld->call_combiner);
76
+ ArenaPromise<ServerMetadataHandle> LameClientFilter::MakeCallPromise(
77
+ CallArgs, NextPromiseFactory) {
78
+ return Immediate(ServerMetadataHandle(error_));
70
79
  }
71
80
 
72
- void lame_get_channel_info(grpc_channel_element* /*elem*/,
73
- const grpc_channel_info* /*channel_info*/) {}
81
+ bool LameClientFilter::GetChannelInfo(const grpc_channel_info*) { return true; }
74
82
 
75
- void lame_start_transport_op(grpc_channel_element* elem,
76
- grpc_transport_op* op) {
77
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
83
+ bool LameClientFilter::StartTransportOp(grpc_transport_op* op) {
78
84
  {
79
- MutexLock lock(&chand->mu);
85
+ MutexLock lock(&state_->mu);
80
86
  if (op->start_connectivity_watch != nullptr) {
81
- chand->state_tracker.AddWatcher(op->start_connectivity_watch_state,
82
- std::move(op->start_connectivity_watch));
87
+ state_->state_tracker.AddWatcher(op->start_connectivity_watch_state,
88
+ std::move(op->start_connectivity_watch));
83
89
  }
84
90
  if (op->stop_connectivity_watch != nullptr) {
85
- chand->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
91
+ state_->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
86
92
  }
87
93
  }
88
94
  if (op->send_ping.on_initiate != nullptr) {
@@ -97,50 +103,18 @@ void lame_start_transport_op(grpc_channel_element* elem,
97
103
  if (op->on_consumed != nullptr) {
98
104
  ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
99
105
  }
106
+ return true;
100
107
  }
101
108
 
102
- grpc_error_handle lame_init_call_elem(grpc_call_element* elem,
103
- const grpc_call_element_args* args) {
104
- CallData* calld = static_cast<CallData*>(elem->call_data);
105
- calld->call_combiner = args->call_combiner;
106
- return GRPC_ERROR_NONE;
107
- }
108
-
109
- void lame_destroy_call_elem(grpc_call_element* /*elem*/,
110
- const grpc_call_final_info* /*final_info*/,
111
- grpc_closure* then_schedule_closure) {
112
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
113
- }
114
-
115
- grpc_error_handle lame_init_channel_elem(grpc_channel_element* elem,
116
- grpc_channel_element_args* args) {
117
- new (elem->channel_data) ChannelData(args);
118
- return GRPC_ERROR_NONE;
119
- }
120
-
121
- void lame_destroy_channel_elem(grpc_channel_element* elem) {
122
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
123
- chand->~ChannelData();
124
- }
109
+ namespace {
125
110
 
126
111
  // Channel arg vtable for a grpc_error_handle.
127
112
  void* ErrorCopy(void* p) {
128
- grpc_error_handle* new_error = nullptr;
129
- if (p != nullptr) {
130
- grpc_error_handle* error = static_cast<grpc_error_handle*>(p);
131
- new_error = new grpc_error_handle();
132
- *new_error = GRPC_ERROR_REF(*error);
133
- }
134
- return new_error;
135
- }
136
- void ErrorDestroy(void* p) {
137
- if (p != nullptr) {
138
- grpc_error_handle* error = static_cast<grpc_error_handle*>(p);
139
- GRPC_ERROR_UNREF(*error);
140
- delete error;
141
- }
113
+ return new absl::Status(*static_cast<absl::Status*>(p));
142
114
  }
115
+ void ErrorDestroy(void* p) { delete static_cast<absl::Status*>(p); }
143
116
  int ErrorCompare(void* p, void* q) { return QsortCompare(p, q); }
117
+
144
118
  const grpc_arg_pointer_vtable kLameFilterErrorArgVtable = {
145
119
  ErrorCopy, ErrorDestroy, ErrorCompare};
146
120
 
@@ -154,23 +128,6 @@ grpc_arg MakeLameClientErrorArg(grpc_error_handle* error) {
154
128
 
155
129
  } // namespace grpc_core
156
130
 
157
- const grpc_channel_filter grpc_lame_filter = {
158
- grpc_core::lame_start_transport_stream_op_batch,
159
- nullptr,
160
- grpc_core::lame_start_transport_op,
161
- sizeof(grpc_core::CallData),
162
- grpc_core::lame_init_call_elem,
163
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
164
- grpc_core::lame_destroy_call_elem,
165
- sizeof(grpc_core::ChannelData),
166
- grpc_core::lame_init_channel_elem,
167
- grpc_core::lame_destroy_channel_elem,
168
- grpc_core::lame_get_channel_info,
169
- "lame-client",
170
- };
171
-
172
- #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack*)((c) + 1))
173
-
174
131
  grpc_channel* grpc_lame_client_channel_create(const char* target,
175
132
  grpc_status_code error_code,
176
133
  const char* error_message) {
@@ -179,21 +136,18 @@ grpc_channel* grpc_lame_client_channel_create(const char* target,
179
136
  "grpc_lame_client_channel_create(target=%s, error_code=%d, "
180
137
  "error_message=%s)",
181
138
  3, (target, (int)error_code, error_message));
182
- grpc_error_handle error = grpc_error_set_str(
183
- grpc_error_set_int(
184
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
185
- GRPC_ERROR_INT_GRPC_STATUS, error_code),
186
- GRPC_ERROR_STR_GRPC_MESSAGE, error_message);
187
- grpc_arg error_arg = grpc_core::MakeLameClientErrorArg(&error);
188
- grpc_channel_args* args0 =
189
- grpc_channel_args_copy_and_add(nullptr, &error_arg, 1);
190
- const grpc_channel_args* args = grpc_core::CoreConfiguration::Get()
191
- .channel_args_preconditioning()
192
- .PreconditionChannelArgs(args0);
193
- grpc_channel_args_destroy(args0);
194
- grpc_channel* channel = grpc_channel_create_internal(
195
- target, args, GRPC_CLIENT_LAME_CHANNEL, nullptr, nullptr);
196
- grpc_channel_args_destroy(args);
197
- GRPC_ERROR_UNREF(error);
198
- return channel;
139
+ if (error_code == GRPC_STATUS_OK) error_code = GRPC_STATUS_UNKNOWN;
140
+ grpc_core::ChannelArgs args =
141
+ grpc_core::CoreConfiguration::Get()
142
+ .channel_args_preconditioning()
143
+ .PreconditionChannelArgs(nullptr)
144
+ .Set(GRPC_ARG_LAME_FILTER_ERROR,
145
+ grpc_core::ChannelArgs::Pointer(
146
+ new absl::Status(static_cast<absl::StatusCode>(error_code),
147
+ error_message),
148
+ &grpc_core::kLameFilterErrorArgVtable));
149
+ auto channel = grpc_core::Channel::Create(target, std::move(args),
150
+ GRPC_CLIENT_LAME_CHANNEL, nullptr);
151
+ GPR_ASSERT(channel.ok());
152
+ return channel->release()->c_ptr();
199
153
  }
@@ -21,13 +21,51 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <memory>
25
+
26
+ #include "absl/base/thread_annotations.h"
27
+ #include "absl/status/status.h"
28
+ #include "absl/status/statusor.h"
29
+
30
+ #include <grpc/impl/codegen/grpc_types.h>
31
+
32
+ #include "src/core/lib/channel/channel_args.h"
24
33
  #include "src/core/lib/channel/channel_stack.h"
34
+ #include "src/core/lib/channel/promise_based_filter.h"
35
+ #include "src/core/lib/gprpp/sync.h"
36
+ #include "src/core/lib/iomgr/error.h"
37
+ #include "src/core/lib/promise/arena_promise.h"
38
+ #include "src/core/lib/transport/connectivity_state.h"
39
+ #include "src/core/lib/transport/transport.h"
25
40
 
26
41
  namespace grpc_core {
27
42
  // Does NOT take ownership of error.
28
43
  grpc_arg MakeLameClientErrorArg(grpc_error_handle* error);
29
- } // namespace grpc_core
30
44
 
31
- extern const grpc_channel_filter grpc_lame_filter;
45
+ // This filter becomes the entire channel stack for a channel that fails to be
46
+ // created. Every call returns failure.
47
+ class LameClientFilter : public ChannelFilter {
48
+ public:
49
+ static const grpc_channel_filter kFilter;
50
+
51
+ static absl::StatusOr<LameClientFilter> Create(
52
+ ChannelArgs args, ChannelFilter::Args filter_args);
53
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
54
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
55
+ bool StartTransportOp(grpc_transport_op*) override;
56
+ bool GetChannelInfo(const grpc_channel_info*) override;
57
+
58
+ private:
59
+ explicit LameClientFilter(absl::Status error);
60
+
61
+ absl::Status error_;
62
+ struct State {
63
+ State();
64
+ Mutex mu;
65
+ ConnectivityStateTracker state_tracker ABSL_GUARDED_BY(mu);
66
+ };
67
+ std::unique_ptr<State> state_;
68
+ };
69
+ } // namespace grpc_core
32
70
 
33
71
  #endif /* GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H */
@@ -21,8 +21,10 @@
21
21
  #include <string.h>
22
22
 
23
23
  #include <grpc/grpc.h>
24
+ #include <grpc/impl/codegen/grpc_types.h>
24
25
  #include <grpc/support/alloc.h>
25
26
 
27
+ #include "src/core/lib/debug/trace.h"
26
28
  #include "src/core/lib/surface/api_trace.h"
27
29
 
28
30
  void grpc_metadata_array_init(grpc_metadata_array* array) {
@@ -18,41 +18,48 @@
18
18
 
19
19
  #include "src/core/lib/surface/server.h"
20
20
 
21
- #include <limits.h>
21
+ #include <inttypes.h>
22
22
  #include <stdlib.h>
23
23
  #include <string.h>
24
24
 
25
25
  #include <algorithm>
26
26
  #include <atomic>
27
- #include <iterator>
28
27
  #include <list>
28
+ #include <new>
29
29
  #include <queue>
30
30
  #include <utility>
31
31
  #include <vector>
32
32
 
33
33
  #include "absl/memory/memory.h"
34
+ #include "absl/status/status.h"
34
35
  #include "absl/types/optional.h"
35
36
 
36
- #include <grpc/support/alloc.h>
37
+ #include <grpc/byte_buffer.h>
38
+ #include <grpc/impl/codegen/connectivity_state.h>
39
+ #include <grpc/status.h>
37
40
  #include <grpc/support/log.h>
38
- #include <grpc/support/string_util.h>
41
+ #include <grpc/support/time.h>
39
42
 
40
43
  #include "src/core/lib/channel/channel_args.h"
44
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
45
+ #include "src/core/lib/channel/channel_trace.h"
41
46
  #include "src/core/lib/channel/channelz.h"
42
- #include "src/core/lib/channel/connected_channel.h"
47
+ #include "src/core/lib/config/core_configuration.h"
43
48
  #include "src/core/lib/debug/stats.h"
44
- #include "src/core/lib/gpr/spinlock.h"
45
- #include "src/core/lib/gpr/string.h"
49
+ #include "src/core/lib/gpr/useful.h"
50
+ #include "src/core/lib/gprpp/debug_location.h"
46
51
  #include "src/core/lib/gprpp/mpscq.h"
47
- #include "src/core/lib/iomgr/executor.h"
48
- #include "src/core/lib/iomgr/iomgr.h"
49
- #include "src/core/lib/resource_quota/api.h"
52
+ #include "src/core/lib/iomgr/exec_ctx.h"
53
+ #include "src/core/lib/iomgr/pollset_set.h"
50
54
  #include "src/core/lib/slice/slice_internal.h"
55
+ #include "src/core/lib/slice/slice_refcount.h"
51
56
  #include "src/core/lib/surface/api_trace.h"
52
57
  #include "src/core/lib/surface/call.h"
53
58
  #include "src/core/lib/surface/channel.h"
59
+ #include "src/core/lib/surface/channel_stack_type.h"
54
60
  #include "src/core/lib/surface/completion_queue.h"
55
- #include "src/core/lib/surface/init.h"
61
+ #include "src/core/lib/transport/connectivity_state.h"
62
+ #include "src/core/lib/transport/error_utils.h"
56
63
 
57
64
  namespace grpc_core {
58
65
 
@@ -439,16 +446,16 @@ class ChannelBroadcaster {
439
446
  // when the actual setup and shutdown broadcast take place.
440
447
 
441
448
  // Copies over the channels from the locked server.
442
- void FillChannelsLocked(std::vector<grpc_channel*> channels) {
449
+ void FillChannelsLocked(std::vector<RefCountedPtr<Channel>> channels) {
443
450
  GPR_DEBUG_ASSERT(channels_.empty());
444
451
  channels_ = std::move(channels);
445
452
  }
446
453
 
447
454
  // Broadcasts a shutdown on each channel.
448
455
  void BroadcastShutdown(bool send_goaway, grpc_error_handle force_disconnect) {
449
- for (grpc_channel* channel : channels_) {
450
- SendShutdown(channel, send_goaway, GRPC_ERROR_REF(force_disconnect));
451
- GRPC_CHANNEL_INTERNAL_UNREF(channel, "broadcast");
456
+ for (const RefCountedPtr<Channel>& channel : channels_) {
457
+ SendShutdown(channel->c_ptr(), send_goaway,
458
+ GRPC_ERROR_REF(force_disconnect));
452
459
  }
453
460
  channels_.clear(); // just for safety against double broadcast
454
461
  GRPC_ERROR_UNREF(force_disconnect);
@@ -486,7 +493,7 @@ class ChannelBroadcaster {
486
493
  elem->filter->start_transport_op(elem, op);
487
494
  }
488
495
 
489
- std::vector<grpc_channel*> channels_;
496
+ std::vector<RefCountedPtr<Channel>> channels_;
490
497
  };
491
498
 
492
499
  } // namespace
@@ -505,6 +512,7 @@ const grpc_channel_filter Server::kServerTopFilter = {
505
512
  Server::CallData::DestroyCallElement,
506
513
  sizeof(Server::ChannelData),
507
514
  Server::ChannelData::InitChannelElement,
515
+ grpc_channel_stack_no_post_init,
508
516
  Server::ChannelData::DestroyChannelElement,
509
517
  grpc_channel_next_get_info,
510
518
  "server",
@@ -512,14 +520,13 @@ const grpc_channel_filter Server::kServerTopFilter = {
512
520
 
513
521
  namespace {
514
522
 
515
- RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
516
- const grpc_channel_args* args) {
523
+ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(ChannelArgs args) {
517
524
  RefCountedPtr<channelz::ServerNode> channelz_node;
518
- if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
519
- GRPC_ENABLE_CHANNELZ_DEFAULT)) {
520
- size_t channel_tracer_max_memory = grpc_channel_args_find_integer(
521
- args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
522
- {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
525
+ if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
526
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
527
+ size_t channel_tracer_max_memory = std::max(
528
+ 0, args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
529
+ .value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
523
530
  channelz_node =
524
531
  MakeRefCounted<channelz::ServerNode>(channel_tracer_max_memory);
525
532
  channelz_node->AddTraceEvent(
@@ -531,9 +538,8 @@ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
531
538
 
532
539
  } // namespace
533
540
 
534
- Server::Server(const grpc_channel_args* args)
535
- : channel_args_(grpc_channel_args_copy(args)),
536
- channelz_node_(CreateChannelzNode(args)) {}
541
+ Server::Server(ChannelArgs args)
542
+ : channel_args_(args.ToC()), channelz_node_(CreateChannelzNode(args)) {}
537
543
 
538
544
  Server::~Server() {
539
545
  grpc_channel_args_destroy(channel_args_);
@@ -601,15 +607,13 @@ grpc_error_handle Server::SetupTransport(
601
607
  const grpc_channel_args* args,
602
608
  const RefCountedPtr<channelz::SocketNode>& socket_node) {
603
609
  // Create channel.
604
- grpc_error_handle error = GRPC_ERROR_NONE;
605
- grpc_channel* channel = grpc_channel_create_internal(
606
- nullptr, args, GRPC_SERVER_CHANNEL, transport, &error);
607
- if (channel == nullptr) {
608
- return error;
610
+ absl::StatusOr<RefCountedPtr<Channel>> channel = Channel::Create(
611
+ nullptr, ChannelArgs::FromC(args), GRPC_SERVER_CHANNEL, transport);
612
+ if (!channel.ok()) {
613
+ return absl_status_to_grpc_error(channel.status());
609
614
  }
610
615
  ChannelData* chand = static_cast<ChannelData*>(
611
- grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
612
- ->channel_data);
616
+ grpc_channel_stack_element((*channel)->channel_stack(), 0)->channel_data);
613
617
  // Set up CQs.
614
618
  size_t cq_idx;
615
619
  for (cq_idx = 0; cq_idx < cqs_.size(); cq_idx++) {
@@ -626,7 +630,8 @@ grpc_error_handle Server::SetupTransport(
626
630
  channelz_node_->AddChildSocket(socket_node);
627
631
  }
628
632
  // Initialize chand.
629
- chand->InitTransport(Ref(), channel, cq_idx, transport, channelz_socket_uuid);
633
+ chand->InitTransport(Ref(), std::move(*channel), cq_idx, transport,
634
+ channelz_socket_uuid);
630
635
  return GRPC_ERROR_NONE;
631
636
  }
632
637
 
@@ -751,12 +756,11 @@ void Server::KillPendingWorkLocked(grpc_error_handle error) {
751
756
  GRPC_ERROR_UNREF(error);
752
757
  }
753
758
 
754
- std::vector<grpc_channel*> Server::GetChannelsLocked() const {
755
- std::vector<grpc_channel*> channels;
759
+ std::vector<RefCountedPtr<Channel>> Server::GetChannelsLocked() const {
760
+ std::vector<RefCountedPtr<Channel>> channels;
756
761
  channels.reserve(channels_.size());
757
762
  for (const ChannelData* chand : channels_) {
758
- channels.push_back(chand->channel());
759
- GRPC_CHANNEL_INTERNAL_REF(chand->channel(), "broadcast");
763
+ channels.push_back(chand->channel()->Ref());
760
764
  }
761
765
  return channels;
762
766
  }
@@ -852,6 +856,15 @@ void Server::CancelAllCalls() {
852
856
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls"));
853
857
  }
854
858
 
859
+ void Server::SendGoaways() {
860
+ ChannelBroadcaster broadcaster;
861
+ {
862
+ MutexLock lock(&mu_global_);
863
+ broadcaster.FillChannelsLocked(GetChannelsLocked());
864
+ }
865
+ broadcaster.BroadcastShutdown(/*send_goaway=*/true, GRPC_ERROR_NONE);
866
+ }
867
+
855
868
  void Server::Orphan() {
856
869
  {
857
870
  MutexLock lock(&mu_global_);
@@ -956,13 +969,8 @@ grpc_call_error Server::RequestRegisteredCall(
956
969
  class Server::ChannelData::ConnectivityWatcher
957
970
  : public AsyncConnectivityStateWatcherInterface {
958
971
  public:
959
- explicit ConnectivityWatcher(ChannelData* chand) : chand_(chand) {
960
- GRPC_CHANNEL_INTERNAL_REF(chand_->channel_, "connectivity");
961
- }
962
-
963
- ~ConnectivityWatcher() override {
964
- GRPC_CHANNEL_INTERNAL_UNREF(chand_->channel_, "connectivity");
965
- }
972
+ explicit ConnectivityWatcher(ChannelData* chand)
973
+ : chand_(chand), channel_(chand_->channel_->Ref()) {}
966
974
 
967
975
  private:
968
976
  void OnConnectivityStateChange(grpc_connectivity_state new_state,
@@ -974,7 +982,8 @@ class Server::ChannelData::ConnectivityWatcher
974
982
  chand_->Destroy();
975
983
  }
976
984
 
977
- ChannelData* chand_;
985
+ ChannelData* const chand_;
986
+ const RefCountedPtr<Channel> channel_;
978
987
  };
979
988
 
980
989
  //
@@ -999,7 +1008,8 @@ Server::ChannelData::~ChannelData() {
999
1008
  }
1000
1009
 
1001
1010
  void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
1002
- grpc_channel* channel, size_t cq_idx,
1011
+ RefCountedPtr<Channel> channel,
1012
+ size_t cq_idx,
1003
1013
  grpc_transport* transport,
1004
1014
  intptr_t channelz_socket_uuid) {
1005
1015
  server_ = std::move(server);
@@ -1119,8 +1129,10 @@ void Server::ChannelData::FinishDestroy(void* arg,
1119
1129
  grpc_error_handle /*error*/) {
1120
1130
  auto* chand = static_cast<Server::ChannelData*>(arg);
1121
1131
  Server* server = chand->server_.get();
1122
- GRPC_CHANNEL_INTERNAL_UNREF(chand->channel_, "server");
1132
+ auto* channel_stack = chand->channel_->channel_stack();
1133
+ chand->channel_.reset();
1123
1134
  server->Unref();
1135
+ GRPC_CHANNEL_STACK_UNREF(channel_stack, "Server::ChannelData::Destroy");
1124
1136
  }
1125
1137
 
1126
1138
  void Server::ChannelData::Destroy() {
@@ -1130,6 +1142,9 @@ void Server::ChannelData::Destroy() {
1130
1142
  list_position_.reset();
1131
1143
  server_->Ref().release();
1132
1144
  server_->MaybeFinishShutdown();
1145
+ // Unreffed by FinishDestroy
1146
+ GRPC_CHANNEL_STACK_REF(channel_->channel_stack(),
1147
+ "Server::ChannelData::Destroy");
1133
1148
  GRPC_CLOSURE_INIT(&finish_destroy_channel_closure_, FinishDestroy, this,
1134
1149
  grpc_schedule_on_exec_ctx);
1135
1150
  if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)) {
@@ -1138,9 +1153,8 @@ void Server::ChannelData::Destroy() {
1138
1153
  grpc_transport_op* op =
1139
1154
  grpc_make_transport_op(&finish_destroy_channel_closure_);
1140
1155
  op->set_accept_stream = true;
1141
- grpc_channel_next_op(
1142
- grpc_channel_stack_element(grpc_channel_get_channel_stack(channel_), 0),
1143
- op);
1156
+ grpc_channel_next_op(grpc_channel_stack_element(channel_->channel_stack(), 0),
1157
+ op);
1144
1158
  }
1145
1159
 
1146
1160
  grpc_error_handle Server::ChannelData::InitChannelElement(
@@ -1436,11 +1450,10 @@ void Server::CallData::StartTransportStreamOpBatch(
1436
1450
  grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1437
1451
  grpc_core::ExecCtx exec_ctx;
1438
1452
  GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1439
- const grpc_channel_args* new_args = grpc_core::CoreConfiguration::Get()
1440
- .channel_args_preconditioning()
1441
- .PreconditionChannelArgs(args);
1442
- grpc_core::Server* server = new grpc_core::Server(new_args);
1443
- grpc_channel_args_destroy(new_args);
1453
+ grpc_core::Server* server =
1454
+ new grpc_core::Server(grpc_core::CoreConfiguration::Get()
1455
+ .channel_args_preconditioning()
1456
+ .PreconditionChannelArgs(args));
1444
1457
  return server->c_ptr();
1445
1458
  }
1446
1459