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,20 +20,14 @@
20
20
 
21
21
  #include "src/core/lib/channel/channel_stack_builder.h"
22
22
 
23
- #include <string.h>
24
-
25
- #include <grpc/support/alloc.h>
26
- #include <grpc/support/string_util.h>
23
+ #include <algorithm>
24
+ #include <utility>
27
25
 
28
26
  #include "src/core/lib/channel/channel_args.h"
29
- #include "src/core/lib/channel/channel_stack_builder.h"
30
- #include "src/core/lib/gprpp/memory.h"
31
27
 
32
28
  namespace grpc_core {
33
29
 
34
- ChannelStackBuilder::~ChannelStackBuilder() {
35
- grpc_channel_args_destroy(args_);
36
- }
30
+ ChannelStackBuilder::~ChannelStackBuilder() = default;
37
31
 
38
32
  ChannelStackBuilder& ChannelStackBuilder::SetTarget(const char* target) {
39
33
  if (target == nullptr) {
@@ -44,21 +38,17 @@ ChannelStackBuilder& ChannelStackBuilder::SetTarget(const char* target) {
44
38
  return *this;
45
39
  }
46
40
 
47
- ChannelStackBuilder& ChannelStackBuilder::SetChannelArgs(
48
- const grpc_channel_args* args) {
49
- grpc_channel_args_destroy(args_);
50
- args_ = grpc_channel_args_copy(args);
41
+ ChannelStackBuilder& ChannelStackBuilder::SetChannelArgs(ChannelArgs args) {
42
+ args_ = std::move(args);
51
43
  return *this;
52
44
  }
53
45
 
54
- void ChannelStackBuilder::PrependFilter(const grpc_channel_filter* filter,
55
- PostInitFunc post_init) {
56
- stack_.insert(stack_.begin(), {filter, std::move(post_init)});
46
+ void ChannelStackBuilder::PrependFilter(const grpc_channel_filter* filter) {
47
+ stack_.insert(stack_.begin(), filter);
57
48
  }
58
49
 
59
- void ChannelStackBuilder::AppendFilter(const grpc_channel_filter* filter,
60
- PostInitFunc post_init) {
61
- stack_.push_back({filter, std::move(post_init)});
50
+ void ChannelStackBuilder::AppendFilter(const grpc_channel_filter* filter) {
51
+ stack_.push_back(filter);
62
52
  }
63
53
 
64
54
  } // namespace grpc_core
@@ -17,16 +17,16 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <stdbool.h>
21
-
22
- #include <functional>
20
+ #include <string>
23
21
  #include <vector>
24
22
 
23
+ #include "absl/status/statusor.h"
25
24
  #include "absl/strings/string_view.h"
26
25
 
26
+ #include <grpc/support/log.h>
27
+
27
28
  #include "src/core/lib/channel/channel_args.h"
28
- #include "src/core/lib/iomgr/closure.h"
29
- #include "src/core/lib/iomgr/error.h"
29
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
30
  #include "src/core/lib/surface/channel_stack_type.h"
31
31
 
32
32
  typedef struct grpc_channel_stack grpc_channel_stack;
@@ -43,17 +43,6 @@ namespace grpc_core {
43
43
  // and a transport.
44
44
  class ChannelStackBuilder {
45
45
  public:
46
- // A function that will be called after the channel stack is successfully
47
- // built.
48
- using PostInitFunc = std::function<void(grpc_channel_stack* channel_stack,
49
- grpc_channel_element* elem)>;
50
-
51
- // One filter in the currently building stack.
52
- struct StackEntry {
53
- const grpc_channel_filter* filter;
54
- PostInitFunc post_init;
55
- };
56
-
57
46
  // Initialize with a name.
58
47
  ChannelStackBuilder(const char* name, grpc_channel_stack_type type)
59
48
  : name_(name), type_(type) {}
@@ -77,31 +66,29 @@ class ChannelStackBuilder {
77
66
  grpc_transport* transport() const { return transport_; }
78
67
 
79
68
  // Set channel args (takes a copy of them).
80
- ChannelStackBuilder& SetChannelArgs(const grpc_channel_args* args);
69
+ ChannelStackBuilder& SetChannelArgs(ChannelArgs args);
81
70
 
82
71
  // Query the channel args.
83
- const grpc_channel_args* channel_args() const { return args_; }
72
+ const ChannelArgs& channel_args() const { return args_; }
84
73
 
85
74
  // Mutable vector of proposed stack entries.
86
- std::vector<StackEntry>* mutable_stack() { return &stack_; }
75
+ std::vector<const grpc_channel_filter*>* mutable_stack() { return &stack_; }
87
76
 
88
77
  // The type of channel stack being built.
89
78
  grpc_channel_stack_type channel_stack_type() const { return type_; }
90
79
 
91
80
  // Helper to add a filter to the front of the stack.
92
- void PrependFilter(const grpc_channel_filter* filter, PostInitFunc post_init);
81
+ void PrependFilter(const grpc_channel_filter* filter);
93
82
 
94
83
  // Helper to add a filter to the end of the stack.
95
- void AppendFilter(const grpc_channel_filter* filter, PostInitFunc post_init);
84
+ void AppendFilter(const grpc_channel_filter* filter);
96
85
 
97
86
  // Build the channel stack.
98
87
  // After success, *result holds the new channel stack,
99
88
  // prefix_bytes are allocated before the channel stack,
100
- // initial_refs, destroy, destroy_arg are as per grpc_channel_stack_init
89
+ // destroy is as per grpc_channel_stack_init
101
90
  // On failure, *result is nullptr.
102
- virtual grpc_error_handle Build(size_t prefix_bytes, int initial_refs,
103
- grpc_iomgr_cb_func destroy, void* destroy_arg,
104
- void** result) = 0;
91
+ virtual absl::StatusOr<RefCountedPtr<grpc_channel_stack>> Build() = 0;
105
92
 
106
93
  protected:
107
94
  ~ChannelStackBuilder();
@@ -118,10 +105,11 @@ class ChannelStackBuilder {
118
105
  // The transport
119
106
  grpc_transport* transport_ = nullptr;
120
107
  // Channel args
121
- const grpc_channel_args* args_ = nullptr;
108
+ ChannelArgs args_;
122
109
  // The in-progress stack
123
- std::vector<StackEntry> stack_;
110
+ std::vector<const grpc_channel_filter*> stack_;
124
111
  };
112
+
125
113
  } // namespace grpc_core
126
114
 
127
115
  #endif // GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
@@ -22,40 +22,35 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <vector>
26
+
27
+ #include "absl/status/status.h"
28
+
29
+ #include <grpc/impl/codegen/grpc_types.h>
25
30
  #include <grpc/support/alloc.h>
26
- #include <grpc/support/string_util.h>
27
31
 
28
32
  #include "src/core/lib/channel/channel_args.h"
29
33
  #include "src/core/lib/channel/channel_stack.h"
30
- #include "src/core/lib/gprpp/memory.h"
34
+ #include "src/core/lib/gpr/useful.h"
35
+ #include "src/core/lib/iomgr/error.h"
36
+ #include "src/core/lib/transport/error_utils.h"
37
+ #include "src/core/lib/transport/transport.h"
31
38
 
32
39
  namespace grpc_core {
33
40
 
34
- grpc_error_handle ChannelStackBuilderImpl::Build(size_t prefix_bytes,
35
- int initial_refs,
36
- grpc_iomgr_cb_func destroy,
37
- void* destroy_arg,
38
- void** result) {
41
+ absl::StatusOr<RefCountedPtr<grpc_channel_stack>>
42
+ ChannelStackBuilderImpl::Build() {
39
43
  auto* stack = mutable_stack();
40
44
 
41
- // create an array of filters
42
- std::vector<const grpc_channel_filter*> filters;
43
- filters.reserve(stack->size());
44
- for (const auto& elem : *stack) {
45
- filters.push_back(elem.filter);
46
- }
47
-
48
45
  // calculate the size of the channel stack
49
46
  size_t channel_stack_size =
50
- grpc_channel_stack_size(filters.data(), filters.size());
47
+ grpc_channel_stack_size(stack->data(), stack->size());
51
48
 
52
- // allocate memory, with prefix_bytes followed by channel_stack_size
53
- *result = gpr_zalloc(prefix_bytes + channel_stack_size);
54
- // fetch a pointer to the channel stack
55
- grpc_channel_stack* channel_stack = reinterpret_cast<grpc_channel_stack*>(
56
- static_cast<char*>(*result) + prefix_bytes);
49
+ // allocate memory
50
+ auto* channel_stack =
51
+ static_cast<grpc_channel_stack*>(gpr_zalloc(channel_stack_size));
57
52
 
58
- const grpc_channel_args* final_args;
53
+ ChannelArgs final_args = channel_args();
59
54
  if (transport() != nullptr) {
60
55
  static const grpc_arg_pointer_vtable vtable = {
61
56
  // copy
@@ -65,38 +60,38 @@ grpc_error_handle ChannelStackBuilderImpl::Build(size_t prefix_bytes,
65
60
  // cmp
66
61
  [](void* a, void* b) { return QsortCompare(a, b); },
67
62
  };
68
- grpc_arg arg = grpc_channel_arg_pointer_create(
69
- const_cast<char*>(GRPC_ARG_TRANSPORT), transport(), &vtable);
70
- final_args = grpc_channel_args_copy_and_add(channel_args(), &arg, 1);
71
- } else {
72
- final_args = channel_args();
63
+ final_args = final_args.Set(GRPC_ARG_TRANSPORT,
64
+ ChannelArgs::Pointer(transport(), &vtable));
73
65
  }
74
66
 
75
67
  // and initialize it
68
+ const grpc_channel_args* c_args = final_args.ToC();
76
69
  grpc_error_handle error = grpc_channel_stack_init(
77
- initial_refs, destroy, destroy_arg == nullptr ? *result : destroy_arg,
78
- filters.data(), filters.size(), final_args, name(), channel_stack);
79
-
80
- if (final_args != channel_args()) {
81
- grpc_channel_args_destroy(final_args);
82
- }
70
+ 1,
71
+ [](void* p, grpc_error_handle) {
72
+ auto* stk = static_cast<grpc_channel_stack*>(p);
73
+ grpc_channel_stack_destroy(stk);
74
+ gpr_free(stk);
75
+ },
76
+ channel_stack, stack->data(), stack->size(), c_args, name(),
77
+ channel_stack);
78
+ grpc_channel_args_destroy(c_args);
83
79
 
84
80
  if (error != GRPC_ERROR_NONE) {
85
81
  grpc_channel_stack_destroy(channel_stack);
86
- gpr_free(*result);
87
- *result = nullptr;
88
- return error;
82
+ gpr_free(channel_stack);
83
+ auto status = grpc_error_to_absl_status(error);
84
+ GRPC_ERROR_UNREF(error);
85
+ return status;
89
86
  }
90
87
 
91
88
  // run post-initialization functions
92
- for (size_t i = 0; i < filters.size(); i++) {
93
- if ((*stack)[i].post_init != nullptr) {
94
- (*stack)[i].post_init(channel_stack,
95
- grpc_channel_stack_element(channel_stack, i));
96
- }
89
+ for (size_t i = 0; i < stack->size(); i++) {
90
+ auto* elem = grpc_channel_stack_element(channel_stack, i);
91
+ elem->filter->post_init_channel_elem(channel_stack, elem);
97
92
  }
98
93
 
99
- return GRPC_ERROR_NONE;
94
+ return RefCountedPtr<grpc_channel_stack>(channel_stack);
100
95
  }
101
96
 
102
97
  } // namespace grpc_core
@@ -17,11 +17,10 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <stdbool.h>
20
+ #include "absl/status/statusor.h"
21
21
 
22
- #include "src/core/lib/channel/channel_args.h"
23
- #include "src/core/lib/channel/channel_stack.h"
24
22
  #include "src/core/lib/channel/channel_stack_builder.h"
23
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
25
24
 
26
25
  namespace grpc_core {
27
26
 
@@ -39,9 +38,7 @@ class ChannelStackBuilderImpl final : public ChannelStackBuilder {
39
38
  // prefix_bytes are allocated before the channel stack,
40
39
  // initial_refs, destroy, destroy_arg are as per grpc_channel_stack_init
41
40
  // On failure, *result is nullptr.
42
- grpc_error_handle Build(size_t prefix_bytes, int initial_refs,
43
- grpc_iomgr_cb_func destroy, void* destroy_arg,
44
- void** result) override;
41
+ absl::StatusOr<RefCountedPtr<grpc_channel_stack>> Build() override;
45
42
  };
46
43
  } // namespace grpc_core
47
44
 
@@ -20,24 +20,19 @@
20
20
 
21
21
  #include "src/core/lib/channel/channel_trace.h"
22
22
 
23
- #include <stdio.h>
24
- #include <stdlib.h>
25
- #include <string.h>
23
+ #include <algorithm>
24
+ #include <map>
25
+ #include <string>
26
+ #include <utility>
26
27
 
27
- #include <grpc/grpc.h>
28
28
  #include <grpc/support/alloc.h>
29
- #include <grpc/support/log.h>
30
- #include <grpc/support/string_util.h>
31
29
 
32
- #include "src/core/lib/channel/status_util.h"
30
+ #include "src/core/lib/channel/channelz.h"
33
31
  #include "src/core/lib/gpr/string.h"
34
- #include "src/core/lib/gpr/useful.h"
35
- #include "src/core/lib/gprpp/memory.h"
36
- #include "src/core/lib/iomgr/error.h"
32
+ #include "src/core/lib/gprpp/time.h"
33
+ #include "src/core/lib/iomgr/exec_ctx.h"
37
34
  #include "src/core/lib/slice/slice_internal.h"
38
- #include "src/core/lib/surface/channel.h"
39
- #include "src/core/lib/transport/connectivity_state.h"
40
- #include "src/core/lib/transport/error_utils.h"
35
+ #include "src/core/lib/slice/slice_refcount.h"
41
36
 
42
37
  namespace grpc_core {
43
38
  namespace channelz {
@@ -21,11 +21,14 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/grpc.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
27
+ #include <grpc/impl/codegen/gpr_types.h>
28
+ #include <grpc/slice.h>
29
+ #include <grpc/support/sync.h>
25
30
 
26
- #include "src/core/lib/gprpp/ref_counted.h"
27
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
- #include "src/core/lib/iomgr/error.h"
29
32
  #include "src/core/lib/json/json.h"
30
33
 
31
34
  namespace grpc_core {
@@ -20,37 +20,32 @@
20
20
 
21
21
  #include "src/core/lib/channel/channelz.h"
22
22
 
23
- #include <stdio.h>
24
23
  #include <stdlib.h>
25
- #include <string.h>
26
24
 
25
+ #include <algorithm>
27
26
  #include <atomic>
27
+ #include <type_traits>
28
28
 
29
+ #include "absl/status/statusor.h"
29
30
  #include "absl/strings/escaping.h"
30
31
  #include "absl/strings/strip.h"
31
32
 
32
- #include <grpc/grpc.h>
33
- #include <grpc/support/alloc.h>
33
+ #include <grpc/impl/codegen/gpr_types.h>
34
+ #include <grpc/support/cpu.h>
34
35
  #include <grpc/support/log.h>
35
- #include <grpc/support/string_util.h>
36
+ #include <grpc/support/time.h>
36
37
 
37
38
  #include "src/core/lib/address_utils/parse_address.h"
38
39
  #include "src/core/lib/address_utils/sockaddr_utils.h"
40
+ #include "src/core/lib/channel/channel_args.h"
39
41
  #include "src/core/lib/channel/channelz_registry.h"
40
- #include "src/core/lib/channel/status_util.h"
41
42
  #include "src/core/lib/gpr/string.h"
42
43
  #include "src/core/lib/gpr/useful.h"
43
44
  #include "src/core/lib/gprpp/host_port.h"
44
- #include "src/core/lib/gprpp/memory.h"
45
45
  #include "src/core/lib/iomgr/error.h"
46
46
  #include "src/core/lib/iomgr/exec_ctx.h"
47
- #include "src/core/lib/iomgr/resolve_address.h"
48
- #include "src/core/lib/slice/b64.h"
49
- #include "src/core/lib/slice/slice_internal.h"
50
- #include "src/core/lib/surface/channel.h"
51
- #include "src/core/lib/surface/server.h"
47
+ #include "src/core/lib/iomgr/resolved_address.h"
52
48
  #include "src/core/lib/transport/connectivity_state.h"
53
- #include "src/core/lib/transport/error_utils.h"
54
49
  #include "src/core/lib/uri/uri_parser.h"
55
50
 
56
51
  namespace grpc_core {
@@ -21,23 +21,28 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stddef.h>
25
+
24
26
  #include <atomic>
27
+ #include <cstdint>
28
+ #include <map>
25
29
  #include <set>
26
30
  #include <string>
31
+ #include <utility>
27
32
 
28
33
  #include "absl/container/inlined_vector.h"
34
+ #include "absl/strings/string_view.h"
29
35
  #include "absl/types/optional.h"
30
36
 
31
- #include <grpc/grpc.h>
37
+ #include <grpc/impl/codegen/connectivity_state.h>
38
+ #include <grpc/impl/codegen/grpc_types.h>
39
+ #include <grpc/slice.h>
32
40
 
33
41
  #include "src/core/lib/channel/channel_trace.h"
34
42
  #include "src/core/lib/gpr/time_precise.h"
35
- #include "src/core/lib/gprpp/manual_constructor.h"
36
43
  #include "src/core/lib/gprpp/ref_counted.h"
37
44
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
38
45
  #include "src/core/lib/gprpp/sync.h"
39
- #include "src/core/lib/iomgr/error.h"
40
- #include "src/core/lib/iomgr/exec_ctx.h"
41
46
  #include "src/core/lib/json/json.h"
42
47
 
43
48
  // Channel arg key for channelz node.
@@ -176,6 +181,10 @@ class ChannelNode : public BaseNode {
176
181
  ChannelNode(std::string target, size_t channel_tracer_max_nodes,
177
182
  bool is_internal_channel);
178
183
 
184
+ static absl::string_view ChannelArgName() {
185
+ return GRPC_ARG_CHANNELZ_CHANNEL_NODE;
186
+ }
187
+
179
188
  // Returns the string description of the given connectivity state.
180
189
  static const char* GetChannelConnectivityStateChangeString(
181
190
  grpc_connectivity_state state);
@@ -21,39 +21,32 @@
21
21
  #include "src/core/lib/channel/channelz_registry.h"
22
22
 
23
23
  #include <algorithm>
24
+ #include <cstdint>
24
25
  #include <cstring>
26
+ #include <utility>
25
27
 
26
28
  #include "absl/container/inlined_vector.h"
27
29
 
28
- #include <grpc/support/alloc.h>
30
+ #include <grpc/grpc.h>
29
31
  #include <grpc/support/log.h>
30
32
  #include <grpc/support/string_util.h>
31
- #include <grpc/support/sync.h>
32
33
 
33
- #include "src/core/lib/channel/channel_trace.h"
34
34
  #include "src/core/lib/channel/channelz.h"
35
- #include "src/core/lib/gpr/useful.h"
36
- #include "src/core/lib/gprpp/memory.h"
37
35
  #include "src/core/lib/gprpp/sync.h"
36
+ #include "src/core/lib/iomgr/exec_ctx.h"
37
+ #include "src/core/lib/json/json.h"
38
38
 
39
39
  namespace grpc_core {
40
40
  namespace channelz {
41
41
  namespace {
42
42
 
43
- // singleton instance of the registry.
44
- ChannelzRegistry* g_channelz_registry = nullptr;
45
-
46
43
  const int kPaginationLimit = 100;
47
44
 
48
45
  } // anonymous namespace
49
46
 
50
- void ChannelzRegistry::Init() { g_channelz_registry = new ChannelzRegistry(); }
51
-
52
- void ChannelzRegistry::Shutdown() { delete g_channelz_registry; }
53
-
54
47
  ChannelzRegistry* ChannelzRegistry::Default() {
55
- GPR_DEBUG_ASSERT(g_channelz_registry != nullptr);
56
- return g_channelz_registry;
48
+ static ChannelzRegistry* singleton = new ChannelzRegistry();
49
+ return singleton;
57
50
  }
58
51
 
59
52
  void ChannelzRegistry::InternalRegister(BaseNode* node) {
@@ -21,13 +21,12 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdint.h>
25
-
24
+ #include <cstdint>
26
25
  #include <map>
27
26
  #include <string>
28
27
 
29
- #include "src/core/lib/channel/channel_trace.h"
30
28
  #include "src/core/lib/channel/channelz.h"
29
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
30
  #include "src/core/lib/gprpp/sync.h"
32
31
 
33
32
  namespace grpc_core {
@@ -37,12 +36,6 @@ namespace channelz {
37
36
  // channelz bookkeeping. All objects share globally distributed uuids.
38
37
  class ChannelzRegistry {
39
38
  public:
40
- // To be called in grpc_init()
41
- static void Init();
42
-
43
- // To be called in grpc_shutdown();
44
- static void Shutdown();
45
-
46
39
  static void Register(BaseNode* node) {
47
40
  return Default()->InternalRegister(node);
48
41
  }
@@ -67,6 +60,14 @@ class ChannelzRegistry {
67
60
  // This can aid in debugging channelz code.
68
61
  static void LogAllEntities() { Default()->InternalLogAllEntities(); }
69
62
 
63
+ // Test only helper function to reset to initial state.
64
+ static void TestOnlyReset() {
65
+ auto* p = Default();
66
+ MutexLock lock(&p->mu_);
67
+ p->node_map_.clear();
68
+ p->uuid_generator_ = 0;
69
+ }
70
+
70
71
  private:
71
72
  // Returned the singleton instance of ChannelzRegistry;
72
73
  static ChannelzRegistry* Default();
@@ -20,17 +20,17 @@
20
20
 
21
21
  #include "src/core/lib/channel/connected_channel.h"
22
22
 
23
- #include <stdarg.h>
24
- #include <stdio.h>
25
- #include <string.h>
26
-
27
- #include <grpc/byte_buffer.h>
28
- #include <grpc/slice_buffer.h>
23
+ #include <grpc/impl/codegen/grpc_types.h>
29
24
  #include <grpc/support/alloc.h>
30
25
  #include <grpc/support/log.h>
31
26
 
32
- #include "src/core/lib/gpr/string.h"
33
- #include "src/core/lib/profiling/timers.h"
27
+ #include "src/core/lib/channel/channel_args.h"
28
+ #include "src/core/lib/channel/channel_stack.h"
29
+ #include "src/core/lib/gpr/alloc.h"
30
+ #include "src/core/lib/iomgr/call_combiner.h"
31
+ #include "src/core/lib/iomgr/closure.h"
32
+ #include "src/core/lib/iomgr/error.h"
33
+ #include "src/core/lib/iomgr/polling_entity.h"
34
34
  #include "src/core/lib/transport/transport.h"
35
35
 
36
36
  #define MAX_BUFFER_LENGTH 8192
@@ -184,7 +184,8 @@ static grpc_error_handle connected_channel_init_channel_elem(
184
184
  grpc_channel_element* elem, grpc_channel_element_args* args) {
185
185
  channel_data* cd = static_cast<channel_data*>(elem->channel_data);
186
186
  GPR_ASSERT(args->is_last);
187
- cd->transport = nullptr;
187
+ cd->transport = grpc_channel_args_find_pointer<grpc_transport>(
188
+ args->channel_args, GRPC_ARG_TRANSPORT);
188
189
  return GRPC_ERROR_NONE;
189
190
  }
190
191
 
@@ -211,36 +212,25 @@ const grpc_channel_filter grpc_connected_filter = {
211
212
  connected_channel_destroy_call_elem,
212
213
  sizeof(channel_data),
213
214
  connected_channel_init_channel_elem,
215
+ [](grpc_channel_stack* channel_stack, grpc_channel_element* elem) {
216
+ /* HACK(ctiller): increase call stack size for the channel to make space
217
+ for channel data. We need a cleaner (but performant) way to do this,
218
+ and I'm not sure what that is yet.
219
+ This is only "safe" because call stacks place no additional data after
220
+ the last call element, and the last call element MUST be the connected
221
+ channel. */
222
+ channel_stack->call_stack_size += grpc_transport_stream_size(
223
+ static_cast<channel_data*>(elem->channel_data)->transport);
224
+ },
214
225
  connected_channel_destroy_channel_elem,
215
226
  connected_channel_get_channel_info,
216
227
  "connected",
217
228
  };
218
229
 
219
- static void bind_transport(grpc_channel_stack* channel_stack,
220
- grpc_channel_element* elem, void* t) {
221
- channel_data* cd = static_cast<channel_data*>(elem->channel_data);
222
- GPR_ASSERT(elem->filter == &grpc_connected_filter);
223
- GPR_ASSERT(cd->transport == nullptr);
224
- cd->transport = static_cast<grpc_transport*>(t);
225
-
226
- /* HACK(ctiller): increase call stack size for the channel to make space
227
- for channel data. We need a cleaner (but performant) way to do this,
228
- and I'm not sure what that is yet.
229
- This is only "safe" because call stacks place no additional data after
230
- the last call element, and the last call element MUST be the connected
231
- channel. */
232
- channel_stack->call_stack_size +=
233
- grpc_transport_stream_size(static_cast<grpc_transport*>(t));
234
- }
235
-
236
230
  bool grpc_add_connected_filter(grpc_core::ChannelStackBuilder* builder) {
237
231
  grpc_transport* t = builder->transport();
238
232
  GPR_ASSERT(t != nullptr);
239
- builder->AppendFilter(
240
- &grpc_connected_filter,
241
- [t](grpc_channel_stack* stk, grpc_channel_element* elem) {
242
- bind_transport(stk, elem, t);
243
- });
233
+ builder->AppendFilter(&grpc_connected_filter);
244
234
  return true;
245
235
  }
246
236
 
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include "src/core/lib/channel/channel_stack.h"
25
25
  #include "src/core/lib/channel/channel_stack_builder.h"
26
+ #include "src/core/lib/transport/transport.h"
26
27
 
27
28
  extern const grpc_channel_filter grpc_connected_filter;
28
29