grpc 1.50.0 → 1.51.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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -24,14 +24,17 @@
24
24
  #include <stddef.h>
25
25
  #include <stdint.h>
26
26
 
27
+ #include "absl/functional/any_invocable.h"
27
28
  #include "absl/strings/string_view.h"
28
29
  #include "absl/types/optional.h"
29
30
 
30
31
  #include <grpc/impl/codegen/compression_types.h>
31
32
  #include <grpc/impl/codegen/grpc_types.h>
33
+ #include <grpc/support/atm.h>
32
34
  #include <grpc/support/log.h>
33
35
 
34
36
  #include "src/core/lib/channel/channel_fwd.h"
37
+ #include "src/core/lib/channel/channel_stack.h"
35
38
  #include "src/core/lib/channel/context.h"
36
39
  #include "src/core/lib/debug/trace.h"
37
40
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -39,6 +42,8 @@
39
42
  #include "src/core/lib/iomgr/closure.h"
40
43
  #include "src/core/lib/iomgr/error.h"
41
44
  #include "src/core/lib/iomgr/iomgr_fwd.h"
45
+ #include "src/core/lib/iomgr/polling_entity.h"
46
+ #include "src/core/lib/promise/context.h"
42
47
  #include "src/core/lib/resource_quota/arena.h"
43
48
  #include "src/core/lib/slice/slice.h"
44
49
  #include "src/core/lib/surface/api_trace.h"
@@ -67,6 +72,45 @@ typedef struct grpc_call_create_args {
67
72
  grpc_core::Timestamp send_deadline;
68
73
  } grpc_call_create_args;
69
74
 
75
+ namespace grpc_core {
76
+ class PromiseBasedCall;
77
+
78
+ // TODO(ctiller): move more call things into this type
79
+ class CallContext {
80
+ public:
81
+ explicit CallContext(PromiseBasedCall* call) : call_(call) {}
82
+
83
+ // Run some action in the call activity context. This is needed to adapt some
84
+ // legacy systems to promises, and will likely disappear once that conversion
85
+ // is complete.
86
+ void RunInContext(absl::AnyInvocable<void()> fn);
87
+
88
+ // TODO(ctiller): remove this once transport APIs are promise based
89
+ void IncrementRefCount(const char* reason = "call_context");
90
+
91
+ // TODO(ctiller): remove this once transport APIs are promise based
92
+ void Unref(const char* reason = "call_context");
93
+
94
+ grpc_call_stats* call_stats() { return &call_stats_; }
95
+ gpr_atm* peer_string_atm_ptr();
96
+ grpc_polling_entity* polling_entity() { return &pollent_; }
97
+
98
+ private:
99
+ friend class PromiseBasedCall;
100
+ // Call final info.
101
+ grpc_call_stats call_stats_;
102
+ // Pollset stuff, can't wait to remove.
103
+ // TODO(ctiller): bring forth EventEngine.
104
+ grpc_polling_entity pollent_;
105
+ // TODO(ctiller): remove this once transport APIs are promise based and we
106
+ // don't need refcounting here.
107
+ PromiseBasedCall* const call_;
108
+ };
109
+
110
+ template <>
111
+ struct ContextType<CallContext> {};
112
+ } // namespace grpc_core
113
+
70
114
  /* Create a new call based on \a args.
71
115
  Regardless of success or failure, always returns a valid new call into *call
72
116
  */
@@ -24,7 +24,7 @@
24
24
 
25
25
  #include "src/core/lib/debug/trace.h"
26
26
  #include "src/core/lib/iomgr/exec_ctx.h"
27
- #include "src/core/lib/slice/slice_refcount.h"
27
+ #include "src/core/lib/slice/slice.h"
28
28
  #include "src/core/lib/surface/api_trace.h"
29
29
 
30
30
  void grpc_call_details_init(grpc_call_details* details) {
@@ -36,6 +36,6 @@ void grpc_call_details_init(grpc_call_details* details) {
36
36
  void grpc_call_details_destroy(grpc_call_details* details) {
37
37
  GRPC_API_TRACE("grpc_call_details_destroy(details=%p)", 1, (details));
38
38
  grpc_core::ExecCtx exec_ctx;
39
- grpc_slice_unref_internal(details->method);
40
- grpc_slice_unref_internal(details->host);
39
+ grpc_core::CSliceUnref(details->method);
40
+ grpc_core::CSliceUnref(details->host);
41
41
  }
@@ -0,0 +1,113 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/surface/call_trace.h"
18
+
19
+ #include <functional>
20
+ #include <memory>
21
+ #include <string>
22
+ #include <utility>
23
+
24
+ #include "absl/base/thread_annotations.h"
25
+ #include "absl/container/flat_hash_map.h"
26
+ #include "absl/meta/type_traits.h"
27
+ #include "absl/status/status.h"
28
+ #include "absl/types/variant.h"
29
+
30
+ #include <grpc/support/log.h>
31
+
32
+ #include "src/core/lib/channel/channel_stack.h"
33
+ #include "src/core/lib/gprpp/no_destruct.h"
34
+ #include "src/core/lib/gprpp/sync.h"
35
+ #include "src/core/lib/iomgr/closure.h"
36
+ #include "src/core/lib/promise/activity.h"
37
+ #include "src/core/lib/promise/arena_promise.h"
38
+ #include "src/core/lib/transport/metadata_batch.h"
39
+ #include "src/core/lib/transport/transport.h"
40
+
41
+ namespace grpc_core {
42
+
43
+ const grpc_channel_filter* PromiseTracingFilterFor(
44
+ const grpc_channel_filter* filter) {
45
+ struct DerivedFilter : public grpc_channel_filter {
46
+ explicit DerivedFilter(const grpc_channel_filter* filter)
47
+ : grpc_channel_filter{
48
+ /* start_transport_stream_op_batch: */ grpc_call_next_op,
49
+ /* make_call_promise: */
50
+ [](grpc_channel_element* elem, CallArgs call_args,
51
+ NextPromiseFactory next_promise_factory)
52
+ -> ArenaPromise<ServerMetadataHandle> {
53
+ auto* source_filter =
54
+ static_cast<const DerivedFilter*>(elem->filter)->filter;
55
+ gpr_log(
56
+ GPR_DEBUG,
57
+ "%sCreateCallPromise[%s]: client_initial_metadata=%s",
58
+ Activity::current()->DebugTag().c_str(),
59
+ source_filter->name,
60
+ call_args.client_initial_metadata->DebugString().c_str());
61
+ return [source_filter, child = next_promise_factory(
62
+ std::move(call_args))]() mutable {
63
+ gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: begin",
64
+ Activity::current()->DebugTag().c_str(),
65
+ source_filter->name);
66
+ auto r = child();
67
+ if (auto* p = absl::get_if<ServerMetadataHandle>(&r)) {
68
+ gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: done: %s",
69
+ Activity::current()->DebugTag().c_str(),
70
+ source_filter->name, (*p)->DebugString().c_str());
71
+ } else {
72
+ gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: <<pending>",
73
+ Activity::current()->DebugTag().c_str(),
74
+ source_filter->name);
75
+ }
76
+ return r;
77
+ };
78
+ },
79
+ grpc_channel_next_op, /* sizeof_call_data: */ 0,
80
+ /* init_call_elem: */
81
+ [](grpc_call_element*, const grpc_call_element_args*) {
82
+ return absl::OkStatus();
83
+ },
84
+ grpc_call_stack_ignore_set_pollset_or_pollset_set,
85
+ /* destroy_call_elem: */
86
+ [](grpc_call_element*, const grpc_call_final_info*,
87
+ grpc_closure*) {},
88
+ /* sizeof_channel_data: */ 0, /* init_channel_elem: */
89
+ [](grpc_channel_element*, grpc_channel_element_args*) {
90
+ return absl::OkStatus();
91
+ },
92
+ /* post_init_channel_elem: */
93
+ [](grpc_channel_stack*, grpc_channel_element*) {},
94
+ /* destroy_channel_elem: */ [](grpc_channel_element*) {},
95
+ grpc_channel_next_get_info, filter->name},
96
+ filter(filter) {}
97
+ const grpc_channel_filter* const filter;
98
+ };
99
+ struct Globals {
100
+ Mutex mu;
101
+ absl::flat_hash_map<const grpc_channel_filter*,
102
+ std::unique_ptr<DerivedFilter>>
103
+ map ABSL_GUARDED_BY(mu);
104
+ };
105
+ auto* globals = NoDestructSingleton<Globals>::Get();
106
+ MutexLock lock(&globals->mu);
107
+ auto it = globals->map.find(filter);
108
+ if (it != globals->map.end()) return it->second.get();
109
+ return globals->map.emplace(filter, std::make_unique<DerivedFilter>(filter))
110
+ .first->second.get();
111
+ }
112
+
113
+ } // namespace grpc_core
@@ -0,0 +1,30 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
16
+ #define GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include "src/core/lib/channel/channel_fwd.h"
21
+ #include "src/core/lib/debug/trace.h"
22
+
23
+ extern grpc_core::TraceFlag grpc_call_trace;
24
+
25
+ namespace grpc_core {
26
+ const grpc_channel_filter* PromiseTracingFilterFor(
27
+ const grpc_channel_filter* filter);
28
+ }
29
+
30
+ #endif // GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
@@ -43,6 +43,7 @@
43
43
  #include "src/core/lib/channel/channelz.h"
44
44
  #include "src/core/lib/config/core_configuration.h"
45
45
  #include "src/core/lib/debug/stats.h"
46
+ #include "src/core/lib/debug/stats_data.h"
46
47
  #include "src/core/lib/debug/trace.h"
47
48
  #include "src/core/lib/gpr/useful.h"
48
49
  #include "src/core/lib/gprpp/manual_constructor.h"
@@ -51,7 +52,6 @@
51
52
  #include "src/core/lib/iomgr/exec_ctx.h"
52
53
  #include "src/core/lib/resource_quota/memory_quota.h"
53
54
  #include "src/core/lib/resource_quota/resource_quota.h"
54
- #include "src/core/lib/slice/slice_refcount.h"
55
55
  #include "src/core/lib/surface/api_trace.h"
56
56
  #include "src/core/lib/surface/call.h"
57
57
  #include "src/core/lib/surface/channel_init.h"
@@ -63,11 +63,12 @@
63
63
 
64
64
  namespace grpc_core {
65
65
 
66
- Channel::Channel(bool is_client, std::string target,
66
+ Channel::Channel(bool is_client, bool is_promising, std::string target,
67
67
  const ChannelArgs& channel_args,
68
68
  grpc_compression_options compression_options,
69
69
  RefCountedPtr<grpc_channel_stack> channel_stack)
70
70
  : is_client_(is_client),
71
+ is_promising_(is_promising),
71
72
  compression_options_(compression_options),
72
73
  call_size_estimate_(channel_stack->call_stack_size +
73
74
  grpc_call_get_initial_size_estimate()),
@@ -109,9 +110,9 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::CreateWithBuilder(
109
110
  ChannelStackBuilder* builder) {
110
111
  auto channel_args = builder->channel_args();
111
112
  if (builder->channel_stack_type() == GRPC_SERVER_CHANNEL) {
112
- GRPC_STATS_INC_SERVER_CHANNELS_CREATED();
113
+ global_stats().IncrementServerChannelsCreated();
113
114
  } else {
114
- GRPC_STATS_INC_CLIENT_CHANNELS_CREATED();
115
+ global_stats().IncrementClientChannelsCreated();
115
116
  }
116
117
  absl::StatusOr<RefCountedPtr<grpc_channel_stack>> r = builder->Build();
117
118
  if (!r.ok()) {
@@ -151,8 +152,8 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::CreateWithBuilder(
151
152
 
152
153
  return RefCountedPtr<Channel>(new Channel(
153
154
  grpc_channel_stack_type_is_client(builder->channel_stack_type()),
154
- std::string(builder->target()), channel_args, compression_options,
155
- std::move(*r)));
155
+ builder->IsPromising(), std::string(builder->target()), channel_args,
156
+ compression_options, std::move(*r)));
156
157
  }
157
158
 
158
159
  namespace {
@@ -169,44 +170,12 @@ void channelz_node_destroy(void* p) {
169
170
  int channelz_node_cmp(void* p1, void* p2) { return QsortCompare(p1, p2); }
170
171
  const grpc_arg_pointer_vtable channelz_node_arg_vtable = {
171
172
  channelz_node_copy, channelz_node_destroy, channelz_node_cmp};
172
-
173
- void CreateChannelzNode(ChannelStackBuilder* builder) {
174
- auto args = builder->channel_args();
175
- // Check whether channelz is enabled.
176
- const bool channelz_enabled = args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
177
- .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT);
178
- if (!channelz_enabled) return;
179
- // Get parameters needed to create the channelz node.
180
- const size_t channel_tracer_max_memory = std::max(
181
- 0, args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
182
- .value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
183
- const bool is_internal_channel =
184
- args.GetBool(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL).value_or(false);
185
- // Create the channelz node.
186
- std::string target(builder->target());
187
- RefCountedPtr<channelz::ChannelNode> channelz_node =
188
- MakeRefCounted<channelz::ChannelNode>(
189
- target.c_str(), channel_tracer_max_memory, is_internal_channel);
190
- channelz_node->AddTraceEvent(
191
- channelz::ChannelTrace::Severity::Info,
192
- grpc_slice_from_static_string("Channel created"));
193
- // Add channelz node to channel args.
194
- // We remove the is_internal_channel arg, since we no longer need it.
195
- builder->SetChannelArgs(
196
- args.Remove(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL)
197
- .Set(GRPC_ARG_CHANNELZ_CHANNEL_NODE,
198
- ChannelArgs::Pointer(channelz_node.release(),
199
- &channelz_node_arg_vtable)));
200
- }
201
-
202
173
  } // namespace
203
174
 
204
175
  absl::StatusOr<RefCountedPtr<Channel>> Channel::Create(
205
176
  const char* target, ChannelArgs args,
206
177
  grpc_channel_stack_type channel_stack_type,
207
178
  grpc_transport* optional_transport) {
208
- ChannelStackBuilderImpl builder(
209
- grpc_channel_stack_type_string(channel_stack_type), channel_stack_type);
210
179
  if (!args.GetString(GRPC_ARG_DEFAULT_AUTHORITY).has_value()) {
211
180
  auto ssl_override = args.GetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
212
181
  if (ssl_override.has_value()) {
@@ -221,15 +190,42 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::Create(
221
190
  args = channel_args_mutator(target, args, channel_stack_type);
222
191
  }
223
192
  }
224
- builder.SetChannelArgs(args).SetTarget(target).SetTransport(
225
- optional_transport);
226
- if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
227
- return nullptr;
228
- }
229
193
  // We only need to do this for clients here. For servers, this will be
230
194
  // done in src/core/lib/surface/server.cc.
231
195
  if (grpc_channel_stack_type_is_client(channel_stack_type)) {
232
- CreateChannelzNode(&builder);
196
+ // Check whether channelz is enabled.
197
+ if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
198
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
199
+ // Get parameters needed to create the channelz node.
200
+ const size_t channel_tracer_max_memory = std::max(
201
+ 0,
202
+ args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
203
+ .value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
204
+ const bool is_internal_channel =
205
+ args.GetBool(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL).value_or(false);
206
+ // Create the channelz node.
207
+ std::string channelz_node_target{target == nullptr ? "unknown" : target};
208
+ RefCountedPtr<channelz::ChannelNode> channelz_node =
209
+ MakeRefCounted<channelz::ChannelNode>(channelz_node_target,
210
+ channel_tracer_max_memory,
211
+ is_internal_channel);
212
+ channelz_node->AddTraceEvent(
213
+ channelz::ChannelTrace::Severity::Info,
214
+ grpc_slice_from_static_string("Channel created"));
215
+ // Add channelz node to channel args.
216
+ // We remove the is_internal_channel arg, since we no longer need it.
217
+ args = args.Remove(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL)
218
+ .Set(GRPC_ARG_CHANNELZ_CHANNEL_NODE,
219
+ ChannelArgs::Pointer(channelz_node.release(),
220
+ &channelz_node_arg_vtable));
221
+ }
222
+ }
223
+ ChannelStackBuilderImpl builder(
224
+ grpc_channel_stack_type_string(channel_stack_type), channel_stack_type,
225
+ args);
226
+ builder.SetTarget(target).SetTransport(optional_transport);
227
+ if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
228
+ return nullptr;
233
229
  }
234
230
  return CreateWithBuilder(&builder);
235
231
  }
@@ -320,9 +316,9 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
320
316
  grpc_core::ExecCtx exec_ctx;
321
317
  grpc_call* call = grpc_channel_create_call_internal(
322
318
  channel, parent_call, propagation_mask, completion_queue, nullptr,
323
- grpc_core::Slice(grpc_slice_ref_internal(method)),
319
+ grpc_core::Slice(grpc_core::CSliceRef(method)),
324
320
  host != nullptr
325
- ? absl::optional<grpc_core::Slice>(grpc_slice_ref_internal(*host))
321
+ ? absl::optional<grpc_core::Slice>(grpc_core::CSliceRef(*host))
326
322
  : absl::nullopt,
327
323
  grpc_core::Timestamp::FromTimespecRoundUp(deadline));
328
324
 
@@ -338,7 +334,7 @@ grpc_call* grpc_channel_create_pollset_set_call(
338
334
  channel, parent_call, propagation_mask, nullptr, pollset_set,
339
335
  grpc_core::Slice(method),
340
336
  host != nullptr
341
- ? absl::optional<grpc_core::Slice>(grpc_slice_ref_internal(*host))
337
+ ? absl::optional<grpc_core::Slice>(grpc_core::CSliceRef(*host))
342
338
  : absl::nullopt,
343
339
  deadline);
344
340
  }
@@ -429,8 +425,7 @@ void grpc_channel_destroy_internal(grpc_channel* c_channel) {
429
425
  grpc_transport_op* op = grpc_make_transport_op(nullptr);
430
426
  grpc_channel_element* elem;
431
427
  GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (c_channel));
432
- op->disconnect_with_error =
433
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Destroyed");
428
+ op->disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed");
434
429
  elem = grpc_channel_stack_element(channel->channel_stack(), 0);
435
430
  elem->filter->start_transport_op(elem, op);
436
431
  }
@@ -34,6 +34,7 @@
34
34
  #include "absl/strings/string_view.h"
35
35
  #include "absl/types/optional.h"
36
36
 
37
+ #include <grpc/event_engine/event_engine.h>
37
38
  #include <grpc/event_engine/memory_allocator.h>
38
39
  #include <grpc/impl/codegen/compression_types.h>
39
40
  #include <grpc/impl/codegen/grpc_types.h>
@@ -141,6 +142,7 @@ class Channel : public RefCounted<Channel>,
141
142
  absl::string_view target() const { return target_; }
142
143
  MemoryAllocator* allocator() { return &allocator_; }
143
144
  bool is_client() const { return is_client_; }
145
+ bool is_promising() const { return is_promising_; }
144
146
  RegisteredCall* RegisterCall(const char* method, const char* host);
145
147
 
146
148
  int TestOnlyRegisteredCalls() {
@@ -153,12 +155,18 @@ class Channel : public RefCounted<Channel>,
153
155
  return registration_table_.method_registration_attempts;
154
156
  }
155
157
 
158
+ grpc_event_engine::experimental::EventEngine* event_engine() const {
159
+ return channel_stack_->EventEngine();
160
+ }
161
+
156
162
  private:
157
- Channel(bool is_client, std::string target, const ChannelArgs& channel_args,
163
+ Channel(bool is_client, bool is_promising, std::string target,
164
+ const ChannelArgs& channel_args,
158
165
  grpc_compression_options compression_options,
159
166
  RefCountedPtr<grpc_channel_stack> channel_stack);
160
167
 
161
168
  const bool is_client_;
169
+ const bool is_promising_;
162
170
  const grpc_compression_options compression_options_;
163
171
  std::atomic<size_t> call_size_estimate_;
164
172
  CallRegistrationTable registration_table_;
@@ -45,7 +45,7 @@ static void ping_destroy(void* arg, grpc_cq_completion* /*storage*/) {
45
45
 
46
46
  static void ping_done(void* arg, grpc_error_handle error) {
47
47
  ping_result* pr = static_cast<ping_result*>(arg);
48
- grpc_cq_end_op(pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy, pr,
48
+ grpc_cq_end_op(pr->cq, pr->tag, error, ping_destroy, pr,
49
49
  &pr->completion_storage);
50
50
  }
51
51
 
@@ -30,6 +30,8 @@ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type) {
30
30
  return true;
31
31
  case GRPC_CLIENT_DIRECT_CHANNEL:
32
32
  return true;
33
+ case GRPC_CLIENT_DYNAMIC:
34
+ return true;
33
35
  case GRPC_SERVER_CHANNEL:
34
36
  return false;
35
37
  case GRPC_NUM_CHANNEL_STACK_TYPES:
@@ -50,6 +52,8 @@ const char* grpc_channel_stack_type_string(grpc_channel_stack_type type) {
50
52
  return "CLIENT_LAME_CHANNEL";
51
53
  case GRPC_CLIENT_DIRECT_CHANNEL:
52
54
  return "CLIENT_DIRECT_CHANNEL";
55
+ case GRPC_CLIENT_DYNAMIC:
56
+ return "CLIENT_DYNAMIC_CHANNEL";
53
57
  case GRPC_NUM_CHANNEL_STACK_TYPES:
54
58
  break;
55
59
  }
@@ -27,6 +27,8 @@ typedef enum {
27
27
  // bottom-half of a client channel: everything that happens post-load
28
28
  // balancing (bound to a specific transport)
29
29
  GRPC_CLIENT_SUBCHANNEL,
30
+ // dynamic part of a client channel
31
+ GRPC_CLIENT_DYNAMIC,
30
32
  // a permanently broken client channel
31
33
  GRPC_CLIENT_LAME_CHANNEL,
32
34
  // a directly connected client channel (without load-balancing, directly talks