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
@@ -50,14 +50,14 @@ absl::Status grpc_error_to_absl_status(grpc_error_handle error);
50
50
 
51
51
  /// Utility function to convert an absl::Status \a status to grpc_error. Note
52
52
  /// that this method does not return "special case" errors such as
53
- /// GRPC_ERROR_CANCELLED, with the exception of GRPC_ERROR_NONE returned for
53
+ /// absl::CancelledError(), with the exception of absl::OkStatus() returned for
54
54
  /// \a absl::OkStatus().
55
55
  grpc_error_handle absl_status_to_grpc_error(absl::Status status);
56
56
 
57
57
  /// A utility function to check whether there is a clear status code that
58
58
  /// doesn't need to be guessed in \a error. This means that \a error or some
59
- /// child has GRPC_ERROR_INT_GRPC_STATUS set, or that it is GRPC_ERROR_NONE or
60
- /// GRPC_ERROR_CANCELLED
59
+ /// child has grpc_core::StatusIntProperty::kRpcStatus set, or that it is
60
+ /// absl::OkStatus() or absl::CancelledError()
61
61
  bool grpc_error_has_clear_grpc_status(grpc_error_handle error);
62
62
 
63
63
  #endif /* GRPC_CORE_LIB_TRANSPORT_ERROR_UTILS_H */
@@ -25,6 +25,7 @@
25
25
  #include <string>
26
26
  #include <utility>
27
27
 
28
+ #include "absl/status/status.h"
28
29
  #include "absl/strings/str_format.h"
29
30
 
30
31
  #include <grpc/impl/codegen/grpc_types.h>
@@ -35,9 +36,9 @@
35
36
  #include "src/core/lib/channel/channel_args.h"
36
37
  #include "src/core/lib/debug/trace.h"
37
38
  #include "src/core/lib/gprpp/debug_location.h"
39
+ #include "src/core/lib/gprpp/status_helper.h"
38
40
  #include "src/core/lib/iomgr/exec_ctx.h"
39
41
  #include "src/core/lib/iomgr/timer.h"
40
- #include "src/core/lib/slice/slice_internal.h"
41
42
 
42
43
  namespace grpc_core {
43
44
 
@@ -78,10 +79,9 @@ void HandshakeManager::Shutdown(grpc_error_handle why) {
78
79
  // Shutdown the handshaker that's currently in progress, if any.
79
80
  if (!is_shutdown_ && index_ > 0) {
80
81
  is_shutdown_ = true;
81
- handshakers_[index_ - 1]->Shutdown(GRPC_ERROR_REF(why));
82
+ handshakers_[index_ - 1]->Shutdown(why);
82
83
  }
83
84
  }
84
- GRPC_ERROR_UNREF(why);
85
85
  }
86
86
 
87
87
  // Helper function to call either the next handshaker or the
@@ -92,17 +92,17 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
92
92
  gpr_log(GPR_INFO,
93
93
  "handshake_manager %p: error=%s shutdown=%d index=%" PRIuPTR
94
94
  ", args=%s",
95
- this, grpc_error_std_string(error).c_str(), is_shutdown_, index_,
95
+ this, StatusToString(error).c_str(), is_shutdown_, index_,
96
96
  HandshakerArgsString(&args_).c_str());
97
97
  }
98
98
  GPR_ASSERT(index_ <= handshakers_.size());
99
99
  // If we got an error or we've been shut down or we're exiting early or
100
100
  // we've finished the last handshaker, invoke the on_handshake_done
101
101
  // callback. Otherwise, call the next handshaker.
102
- if (!GRPC_ERROR_IS_NONE(error) || is_shutdown_ || args_.exit_early ||
102
+ if (!error.ok() || is_shutdown_ || args_.exit_early ||
103
103
  index_ == handshakers_.size()) {
104
- if (GRPC_ERROR_IS_NONE(error) && is_shutdown_) {
105
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("handshaker shutdown");
104
+ if (error.ok() && is_shutdown_) {
105
+ error = GRPC_ERROR_CREATE("handshaker shutdown");
106
106
  // It is possible that the endpoint has already been destroyed by
107
107
  // a shutdown call while this callback was sitting on the ExecCtx
108
108
  // with no error.
@@ -111,11 +111,11 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
111
111
  // before destroying then, even when we know that there are no
112
112
  // pending read/write callbacks. This should be fixed, at which
113
113
  // point this can be removed.
114
- grpc_endpoint_shutdown(args_.endpoint, GRPC_ERROR_REF(error));
114
+ grpc_endpoint_shutdown(args_.endpoint, error);
115
115
  grpc_endpoint_destroy(args_.endpoint);
116
116
  args_.endpoint = nullptr;
117
117
  args_.args = ChannelArgs();
118
- grpc_slice_buffer_destroy_internal(args_.read_buffer);
118
+ grpc_slice_buffer_destroy(args_.read_buffer);
119
119
  gpr_free(args_.read_buffer);
120
120
  args_.read_buffer = nullptr;
121
121
  }
@@ -124,7 +124,7 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
124
124
  gpr_log(GPR_INFO,
125
125
  "handshake_manager %p: handshaking complete -- scheduling "
126
126
  "on_handshake_done with error=%s",
127
- this, grpc_error_std_string(error).c_str());
127
+ this, StatusToString(error).c_str());
128
128
  }
129
129
  // Cancel deadline timer, since we're invoking the on_handshake_done
130
130
  // callback now.
@@ -151,7 +151,7 @@ void HandshakeManager::CallNextHandshakerFn(void* arg,
151
151
  bool done;
152
152
  {
153
153
  MutexLock lock(&mgr->mu_);
154
- done = mgr->CallNextHandshakerLocked(GRPC_ERROR_REF(error));
154
+ done = mgr->CallNextHandshakerLocked(error);
155
155
  }
156
156
  // If we're invoked the final callback, we won't be coming back
157
157
  // to this function, so we can release our reference to the
@@ -163,8 +163,8 @@ void HandshakeManager::CallNextHandshakerFn(void* arg,
163
163
 
164
164
  void HandshakeManager::OnTimeoutFn(void* arg, grpc_error_handle error) {
165
165
  auto* mgr = static_cast<HandshakeManager*>(arg);
166
- if (GRPC_ERROR_IS_NONE(error)) { // Timer fired, rather than being cancelled
167
- mgr->Shutdown(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake timed out"));
166
+ if (error.ok()) { // Timer fired, rather than being cancelled
167
+ mgr->Shutdown(GRPC_ERROR_CREATE("Handshake timed out"));
168
168
  }
169
169
  mgr->Unref();
170
170
  }
@@ -207,7 +207,7 @@ void HandshakeManager::DoHandshake(grpc_endpoint* endpoint,
207
207
  grpc_timer_init(&deadline_timer_, deadline, &on_timeout_);
208
208
  // Start first handshaker, which also owns a ref.
209
209
  Ref().release();
210
- done = CallNextHandshakerLocked(GRPC_ERROR_NONE);
210
+ done = CallNextHandshakerLocked(absl::OkStatus());
211
211
  }
212
212
  if (done) {
213
213
  Unref();
@@ -117,7 +117,7 @@ class HandshakeManager : public RefCounted<HandshakeManager> {
117
117
  ///
118
118
  /// When done, invokes \a on_handshake_done with a HandshakerArgs
119
119
  /// object as its argument. If the callback is invoked with error !=
120
- /// GRPC_ERROR_NONE, then handshaking failed and the handshaker has done
120
+ /// absl::OkStatus(), then handshaking failed and the handshaker has done
121
121
  /// the necessary clean-up. Otherwise, the callback takes ownership of
122
122
  /// the arguments.
123
123
  void DoHandshake(grpc_endpoint* endpoint, const ChannelArgs& channel_args,
@@ -37,9 +37,35 @@ class HandshakeManager;
37
37
 
38
38
  class HandshakerFactory {
39
39
  public:
40
+ // Enum representing the priority of the handshakers.
41
+ // The order of the handshakers is decided by the priority.
42
+ // For example kPreTCPConnect handshakers are called before kTCPConnect and so
43
+ // on.
44
+ enum class HandshakerPriority : int {
45
+ // Handshakers that should be called before a TCP connect. Applicable mainly
46
+ // for Client handshakers.
47
+ kPreTCPConnectHandshakers,
48
+ // Handshakers responsible for the actual TCP connect establishment.
49
+ // Applicable mainly for Client handshakers.
50
+ kTCPConnectHandshakers,
51
+ // Handshakers responsible for the actual HTTP connect established.
52
+ // Applicable
53
+ // mainly for Client handshakers.
54
+ kHTTPConnectHandshakers,
55
+ // Handshakers that should be called before security handshakes but after
56
+ // connect establishment. Applicable mainly for Server handshakers
57
+ // currently.
58
+ kReadAheadSecurityHandshakers,
59
+ // Handshakers that are responsible for post connect security handshakes.
60
+ // Applicable for both Client and Server handshakers.
61
+ kSecurityHandshakers,
62
+ };
63
+
40
64
  virtual void AddHandshakers(const ChannelArgs& args,
41
65
  grpc_pollset_set* interested_parties,
42
66
  HandshakeManager* handshake_mgr) = 0;
67
+ // Return the priority associated with the handshaker.
68
+ virtual HandshakerPriority Priority() = 0;
43
69
  virtual ~HandshakerFactory() = default;
44
70
  };
45
71
 
@@ -28,10 +28,16 @@
28
28
  namespace grpc_core {
29
29
 
30
30
  void HandshakerRegistry::Builder::RegisterHandshakerFactory(
31
- bool at_start, HandshakerType handshaker_type,
31
+ HandshakerType handshaker_type,
32
32
  std::unique_ptr<HandshakerFactory> factory) {
33
33
  auto& vec = factories_[handshaker_type];
34
- auto where = at_start ? vec.begin() : vec.end();
34
+ auto where = vec.empty() ? vec.begin() : vec.end();
35
+ for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
36
+ if (factory->Priority() < iter->get()->Priority()) {
37
+ where = iter;
38
+ break;
39
+ }
40
+ }
35
41
  vec.insert(where, std::move(factory));
36
42
  }
37
43
 
@@ -41,10 +41,9 @@ class HandshakerRegistry {
41
41
  class Builder {
42
42
  public:
43
43
  /// Registers a new handshaker factory. Takes ownership.
44
- /// If \a at_start is true, the new handshaker will be at the beginning of
45
- /// the list. Otherwise, it will be added to the end.
46
- void RegisterHandshakerFactory(bool at_start,
47
- HandshakerType handshaker_type,
44
+ /// The priority of the handshaker will be used to order the handshakers
45
+ /// in the list.
46
+ void RegisterHandshakerFactory(HandshakerType handshaker_type,
48
47
  std::unique_ptr<HandshakerFactory> factory);
49
48
 
50
49
  HandshakerRegistry Build();
@@ -27,7 +27,7 @@
27
27
  #include <string>
28
28
 
29
29
  #include "absl/base/thread_annotations.h"
30
- #include "absl/memory/memory.h"
30
+ #include "absl/status/status.h"
31
31
  #include "absl/strings/str_cat.h"
32
32
  #include "absl/strings/string_view.h"
33
33
  #include "absl/types/optional.h"
@@ -51,7 +51,6 @@
51
51
  #include "src/core/lib/iomgr/exec_ctx.h"
52
52
  #include "src/core/lib/iomgr/iomgr_fwd.h"
53
53
  #include "src/core/lib/iomgr/tcp_server.h"
54
- #include "src/core/lib/slice/slice_internal.h"
55
54
  #include "src/core/lib/transport/handshaker.h"
56
55
  #include "src/core/lib/transport/handshaker_factory.h"
57
56
  #include "src/core/lib/transport/handshaker_registry.h"
@@ -103,10 +102,10 @@ HttpConnectHandshaker::~HttpConnectHandshaker() {
103
102
  grpc_endpoint_destroy(endpoint_to_destroy_);
104
103
  }
105
104
  if (read_buffer_to_destroy_ != nullptr) {
106
- grpc_slice_buffer_destroy_internal(read_buffer_to_destroy_);
105
+ grpc_slice_buffer_destroy(read_buffer_to_destroy_);
107
106
  gpr_free(read_buffer_to_destroy_);
108
107
  }
109
- grpc_slice_buffer_destroy_internal(&write_buffer_);
108
+ grpc_slice_buffer_destroy(&write_buffer_);
110
109
  grpc_http_parser_destroy(&http_parser_);
111
110
  grpc_http_response_destroy(&http_response_);
112
111
  }
@@ -124,18 +123,18 @@ void HttpConnectHandshaker::CleanupArgsForFailureLocked() {
124
123
  // If the handshake failed or we're shutting down, clean up and invoke the
125
124
  // callback with the error.
126
125
  void HttpConnectHandshaker::HandshakeFailedLocked(grpc_error_handle error) {
127
- if (GRPC_ERROR_IS_NONE(error)) {
126
+ if (error.ok()) {
128
127
  // If we were shut down after an endpoint operation succeeded but
129
128
  // before the endpoint callback was invoked, we need to generate our
130
129
  // own error.
131
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshaker shutdown");
130
+ error = GRPC_ERROR_CREATE("Handshaker shutdown");
132
131
  }
133
132
  if (!is_shutdown_) {
134
133
  // TODO(ctiller): It is currently necessary to shutdown endpoints
135
134
  // before destroying them, even if we know that there are no
136
135
  // pending read/write callbacks. This should be fixed, at which
137
136
  // point this can be removed.
138
- grpc_endpoint_shutdown(args_->endpoint, GRPC_ERROR_REF(error));
137
+ grpc_endpoint_shutdown(args_->endpoint, error);
139
138
  // Not shutting down, so the handshake failed. Clean up before
140
139
  // invoking the callback.
141
140
  CleanupArgsForFailureLocked();
@@ -156,17 +155,17 @@ void HttpConnectHandshaker::OnWriteDoneScheduler(void* arg,
156
155
  GRPC_CLOSURE_INIT(&handshaker->request_done_closure_,
157
156
  &HttpConnectHandshaker::OnWriteDone,
158
157
  handshaker, grpc_schedule_on_exec_ctx),
159
- GRPC_ERROR_REF(error));
158
+ error);
160
159
  }
161
160
 
162
161
  // Callback invoked when finished writing HTTP CONNECT request.
163
162
  void HttpConnectHandshaker::OnWriteDone(void* arg, grpc_error_handle error) {
164
163
  auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
165
164
  ReleasableMutexLock lock(&handshaker->mu_);
166
- if (!GRPC_ERROR_IS_NONE(error) || handshaker->is_shutdown_) {
165
+ if (!error.ok() || handshaker->is_shutdown_) {
167
166
  // If the write failed or we're shutting down, clean up and invoke the
168
167
  // callback with the error.
169
- handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
168
+ handshaker->HandshakeFailedLocked(error);
170
169
  lock.Release();
171
170
  handshaker->Unref();
172
171
  } else {
@@ -190,17 +189,17 @@ void HttpConnectHandshaker::OnReadDoneScheduler(void* arg,
190
189
  GRPC_CLOSURE_INIT(&handshaker->response_read_closure_,
191
190
  &HttpConnectHandshaker::OnReadDone, handshaker,
192
191
  grpc_schedule_on_exec_ctx),
193
- GRPC_ERROR_REF(error));
192
+ error);
194
193
  }
195
194
 
196
195
  // Callback invoked for reading HTTP CONNECT response.
197
196
  void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
198
197
  auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
199
198
  ReleasableMutexLock lock(&handshaker->mu_);
200
- if (!GRPC_ERROR_IS_NONE(error) || handshaker->is_shutdown_) {
199
+ if (!error.ok() || handshaker->is_shutdown_) {
201
200
  // If the read failed or we're shutting down, clean up and invoke the
202
201
  // callback with the error.
203
- handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
202
+ handshaker->HandshakeFailedLocked(error);
204
203
  goto done;
205
204
  }
206
205
  // Add buffer to parser.
@@ -210,7 +209,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
210
209
  error = grpc_http_parser_parse(&handshaker->http_parser_,
211
210
  handshaker->args_->read_buffer->slices[i],
212
211
  &body_start_offset);
213
- if (!GRPC_ERROR_IS_NONE(error)) {
212
+ if (!error.ok()) {
214
213
  handshaker->HandshakeFailedLocked(error);
215
214
  goto done;
216
215
  }
@@ -230,7 +229,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
230
229
  &handshaker->args_->read_buffer->slices[i + 1],
231
230
  handshaker->args_->read_buffer->count - i - 1);
232
231
  grpc_slice_buffer_swap(handshaker->args_->read_buffer, &tmp_buffer);
233
- grpc_slice_buffer_destroy_internal(&tmp_buffer);
232
+ grpc_slice_buffer_destroy(&tmp_buffer);
234
233
  break;
235
234
  }
236
235
  }
@@ -247,7 +246,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
247
246
  // complete (e.g., handling chunked transfer encoding or looking
248
247
  // at the Content-Length: header).
249
248
  if (handshaker->http_parser_.state != GRPC_HTTP_BODY) {
250
- grpc_slice_buffer_reset_and_unref_internal(handshaker->args_->read_buffer);
249
+ grpc_slice_buffer_reset_and_unref(handshaker->args_->read_buffer);
251
250
  grpc_endpoint_read(
252
251
  handshaker->args_->endpoint, handshaker->args_->read_buffer,
253
252
  GRPC_CLOSURE_INIT(&handshaker->response_read_closure_,
@@ -259,9 +258,8 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
259
258
  // Make sure we got a 2xx response.
260
259
  if (handshaker->http_response_.status < 200 ||
261
260
  handshaker->http_response_.status >= 300) {
262
- error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
263
- absl::StrCat("HTTP proxy returned response code ",
264
- handshaker->http_response_.status));
261
+ error = GRPC_ERROR_CREATE(absl::StrCat("HTTP proxy returned response code ",
262
+ handshaker->http_response_.status));
265
263
  handshaker->HandshakeFailedLocked(error);
266
264
  goto done;
267
265
  }
@@ -284,11 +282,10 @@ void HttpConnectHandshaker::Shutdown(grpc_error_handle why) {
284
282
  MutexLock lock(&mu_);
285
283
  if (!is_shutdown_) {
286
284
  is_shutdown_ = true;
287
- grpc_endpoint_shutdown(args_->endpoint, GRPC_ERROR_REF(why));
285
+ grpc_endpoint_shutdown(args_->endpoint, why);
288
286
  CleanupArgsForFailureLocked();
289
287
  }
290
288
  }
291
- GRPC_ERROR_UNREF(why);
292
289
  }
293
290
 
294
291
  void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
@@ -305,7 +302,7 @@ void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
305
302
  MutexLock lock(&mu_);
306
303
  is_shutdown_ = true;
307
304
  }
308
- ExecCtx::Run(DEBUG_LOCATION, on_handshake_done, GRPC_ERROR_NONE);
305
+ ExecCtx::Run(DEBUG_LOCATION, on_handshake_done, absl::OkStatus());
309
306
  return;
310
307
  }
311
308
  // Get headers from channel args.
@@ -387,6 +384,9 @@ class HttpConnectHandshakerFactory : public HandshakerFactory {
387
384
  HandshakeManager* handshake_mgr) override {
388
385
  handshake_mgr->Add(MakeRefCounted<HttpConnectHandshaker>());
389
386
  }
387
+ HandshakerPriority Priority() override {
388
+ return HandshakerPriority::kHTTPConnectHandshakers;
389
+ }
390
390
  ~HttpConnectHandshakerFactory() override = default;
391
391
  };
392
392
 
@@ -394,8 +394,7 @@ class HttpConnectHandshakerFactory : public HandshakerFactory {
394
394
 
395
395
  void RegisterHttpConnectHandshaker(CoreConfiguration::Builder* builder) {
396
396
  builder->handshaker_registry()->RegisterHandshakerFactory(
397
- true /* at_start */, HANDSHAKER_CLIENT,
398
- absl::make_unique<HttpConnectHandshakerFactory>());
397
+ HANDSHAKER_CLIENT, std::make_unique<HttpConnectHandshakerFactory>());
399
398
  }
400
399
 
401
400
  } // namespace grpc_core
@@ -387,6 +387,14 @@ struct GrpcStatusContext {
387
387
  static const std::string& DisplayValue(const std::string& x);
388
388
  };
389
389
 
390
+ // Annotation added by a transport to note that the status came from the wire.
391
+ struct GrpcStatusFromWire {
392
+ static absl::string_view DebugKey() { return "GrpcStatusFromWire"; }
393
+ static constexpr bool kRepeatable = false;
394
+ using ValueType = bool;
395
+ static absl::string_view DisplayValue(bool x) { return x ? "true" : "false"; }
396
+ };
397
+
390
398
  // Annotation added by client surface code to denote wait-for-ready state
391
399
  struct WaitForReady {
392
400
  struct ValueType {
@@ -645,6 +653,13 @@ struct AdaptDisplayValueToLog<const std::string&> {
645
653
  static std::string ToString(const std::string& value) { return value; }
646
654
  };
647
655
 
656
+ template <>
657
+ struct AdaptDisplayValueToLog<absl::string_view> {
658
+ static std::string ToString(absl::string_view value) {
659
+ return std::string(value);
660
+ }
661
+ };
662
+
648
663
  template <>
649
664
  struct AdaptDisplayValueToLog<Slice> {
650
665
  static std::string ToString(Slice value) {
@@ -1301,7 +1316,8 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1301
1316
  grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
1302
1317
  // Non-encodable things
1303
1318
  grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
1304
- grpc_core::GrpcStatusContext, grpc_core::WaitForReady>;
1319
+ grpc_core::GrpcStatusContext, grpc_core::GrpcStatusFromWire,
1320
+ grpc_core::WaitForReady>;
1305
1321
 
1306
1322
  struct grpc_metadata_batch : public grpc_metadata_batch_base {
1307
1323
  using grpc_metadata_batch_base::grpc_metadata_batch_base;
@@ -16,8 +16,6 @@
16
16
 
17
17
  #include "src/core/lib/transport/parsed_metadata.h"
18
18
 
19
- #include "src/core/lib/slice/slice_refcount.h"
20
-
21
19
  namespace grpc_core {
22
20
  namespace metadata_detail {
23
21
 
@@ -26,12 +24,10 @@ std::string MakeDebugString(absl::string_view key, absl::string_view value) {
26
24
  }
27
25
 
28
26
  Slice SliceFromBuffer(const Buffer& buffer) {
29
- return Slice(grpc_slice_ref_internal(buffer.slice));
27
+ return Slice(CSliceRef(buffer.slice));
30
28
  }
31
29
 
32
- void DestroySliceValue(const Buffer& value) {
33
- grpc_slice_unref_internal(value.slice);
34
- }
30
+ void DestroySliceValue(const Buffer& value) { CSliceUnref(value.slice); }
35
31
 
36
32
  void DestroyTrivialMemento(const Buffer&) {}
37
33
 
@@ -23,12 +23,13 @@
23
23
  #include <memory>
24
24
 
25
25
  #include "absl/base/thread_annotations.h"
26
- #include "absl/memory/memory.h"
26
+ #include "absl/status/status.h"
27
27
  #include "absl/status/statusor.h"
28
28
  #include "absl/strings/string_view.h"
29
29
  #include "absl/types/optional.h"
30
30
 
31
31
  #include <grpc/slice.h>
32
+ #include <grpc/slice_buffer.h>
32
33
  #include <grpc/support/alloc.h>
33
34
  #include <grpc/support/log.h>
34
35
 
@@ -49,7 +50,6 @@
49
50
  #include "src/core/lib/iomgr/resolved_address.h"
50
51
  #include "src/core/lib/iomgr/tcp_client.h"
51
52
  #include "src/core/lib/iomgr/tcp_server.h"
52
- #include "src/core/lib/slice/slice_internal.h"
53
53
  #include "src/core/lib/transport/handshaker.h"
54
54
  #include "src/core/lib/transport/handshaker_factory.h"
55
55
  #include "src/core/lib/transport/handshaker_registry.h"
@@ -100,7 +100,7 @@ TCPConnectHandshaker::TCPConnectHandshaker(grpc_pollset_set* pollset_set)
100
100
  GRPC_CLOSURE_INIT(&connected_, Connected, this, grpc_schedule_on_exec_ctx);
101
101
  }
102
102
 
103
- void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
103
+ void TCPConnectHandshaker::Shutdown(grpc_error_handle /*why*/) {
104
104
  // TODO(anramach): After migration to EventEngine, cancel the in-progress
105
105
  // TCP connection attempt.
106
106
  {
@@ -113,12 +113,10 @@ void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
113
113
  // the necessary clean up.
114
114
  if (on_handshake_done_ != nullptr) {
115
115
  CleanupArgsForFailureLocked();
116
- FinishLocked(
117
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown"));
116
+ FinishLocked(GRPC_ERROR_CREATE("tcp handshaker shutdown"));
118
117
  }
119
118
  }
120
119
  }
121
- GRPC_ERROR_UNREF(why);
122
120
  }
123
121
 
124
122
  void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
@@ -134,8 +132,7 @@ void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
134
132
  args->args.GetString(GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS).value());
135
133
  if (!uri.ok() || !grpc_parse_uri(*uri, &addr_)) {
136
134
  MutexLock lock(&mu_);
137
- FinishLocked(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
138
- "Resolved address in invalid format"));
135
+ FinishLocked(GRPC_ERROR_CREATE("Resolved address in invalid format"));
139
136
  return;
140
137
  }
141
138
  bind_endpoint_to_pollset_ =
@@ -167,15 +164,12 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
167
164
  static_cast<TCPConnectHandshaker*>(arg));
168
165
  {
169
166
  MutexLock lock(&self->mu_);
170
- if (!GRPC_ERROR_IS_NONE(error) || self->shutdown_) {
171
- if (GRPC_ERROR_IS_NONE(error)) {
172
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown");
173
- } else {
174
- error = GRPC_ERROR_REF(error);
167
+ if (!error.ok() || self->shutdown_) {
168
+ if (error.ok()) {
169
+ error = GRPC_ERROR_CREATE("tcp handshaker shutdown");
175
170
  }
176
171
  if (self->endpoint_to_destroy_ != nullptr) {
177
- grpc_endpoint_shutdown(self->endpoint_to_destroy_,
178
- GRPC_ERROR_REF(error));
172
+ grpc_endpoint_shutdown(self->endpoint_to_destroy_, error);
179
173
  }
180
174
  if (!self->shutdown_) {
181
175
  self->CleanupArgsForFailureLocked();
@@ -185,7 +179,6 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
185
179
  // The on_handshake_done_ is already as part of shutdown when
186
180
  // connecting So nothing to be done here other than unrefing the
187
181
  // error.
188
- GRPC_ERROR_UNREF(error);
189
182
  }
190
183
  return;
191
184
  }
@@ -196,7 +189,7 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
196
189
  grpc_endpoint_add_to_pollset_set(self->args_->endpoint,
197
190
  self->interested_parties_);
198
191
  }
199
- self->FinishLocked(GRPC_ERROR_NONE);
192
+ self->FinishLocked(absl::OkStatus());
200
193
  }
201
194
  }
202
195
 
@@ -205,7 +198,7 @@ TCPConnectHandshaker::~TCPConnectHandshaker() {
205
198
  grpc_endpoint_destroy(endpoint_to_destroy_);
206
199
  }
207
200
  if (read_buffer_to_destroy_ != nullptr) {
208
- grpc_slice_buffer_destroy_internal(read_buffer_to_destroy_);
201
+ grpc_slice_buffer_destroy(read_buffer_to_destroy_);
209
202
  gpr_free(read_buffer_to_destroy_);
210
203
  }
211
204
  grpc_pollset_set_destroy(interested_parties_);
@@ -237,6 +230,9 @@ class TCPConnectHandshakerFactory : public HandshakerFactory {
237
230
  handshake_mgr->Add(
238
231
  MakeRefCounted<TCPConnectHandshaker>(interested_parties));
239
232
  }
233
+ HandshakerPriority Priority() override {
234
+ return HandshakerPriority::kTCPConnectHandshakers;
235
+ }
240
236
  ~TCPConnectHandshakerFactory() override = default;
241
237
  };
242
238
 
@@ -244,8 +240,7 @@ class TCPConnectHandshakerFactory : public HandshakerFactory {
244
240
 
245
241
  void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder) {
246
242
  builder->handshaker_registry()->RegisterHandshakerFactory(
247
- true /* at_start */, HANDSHAKER_CLIENT,
248
- absl::make_unique<TCPConnectHandshakerFactory>());
243
+ HANDSHAKER_CLIENT, std::make_unique<TCPConnectHandshakerFactory>());
249
244
  }
250
245
 
251
246
  } // namespace grpc_core