grpc 1.37.1 → 1.40.0.pre1

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 (738) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +112 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +330 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +66 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +44 -19
  12. data/include/grpc/impl/codegen/port_platform.h +46 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +975 -3282
  17. data/src/core/ext/filters/client_channel/client_channel.h +513 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +20 -7
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +53 -51
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -23
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -17
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -20
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
  44. data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +158 -102
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2598 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
  76. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  77. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  78. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  79. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  80. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  81. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  83. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  84. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  85. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  86. data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
  87. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  88. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  93. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  94. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  99. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  104. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  107. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  108. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
  109. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  110. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  111. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  112. data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
  113. data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
  114. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
  116. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  120. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  124. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
  133. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  136. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  149. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
  150. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
  151. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
  152. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  154. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  155. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
  156. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
  157. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
  163. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
  165. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
  166. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
  167. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
  168. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
  169. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
  170. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
  171. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
  172. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  173. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
  175. data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
  176. data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
  177. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
  178. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
  179. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
  180. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
  181. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
  182. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
  183. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  184. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
  185. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
  186. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
  187. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  188. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  189. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
  190. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  191. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
  193. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  194. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
  195. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  196. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  197. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
  198. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
  199. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
  201. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  202. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
  203. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
  204. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
  205. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
  206. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
  207. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  208. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
  209. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
  210. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  211. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  212. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
  213. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
  214. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
  215. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  216. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  217. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  218. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  219. data/src/core/ext/xds/xds_api.cc +665 -317
  220. data/src/core/ext/xds/xds_api.h +52 -14
  221. data/src/core/ext/xds/xds_bootstrap.cc +101 -160
  222. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  223. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  224. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  225. data/src/core/ext/xds/xds_channel_args.h +5 -2
  226. data/src/core/ext/xds/xds_client.cc +370 -215
  227. data/src/core/ext/xds/xds_client.h +38 -28
  228. data/src/core/ext/xds/xds_client_stats.h +3 -2
  229. data/src/core/ext/xds/xds_http_filters.cc +3 -2
  230. data/src/core/ext/xds/xds_http_filters.h +3 -0
  231. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  232. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  233. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  234. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  235. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  236. data/src/core/lib/channel/call_tracer.h +85 -0
  237. data/src/core/lib/channel/channel_stack.cc +10 -9
  238. data/src/core/lib/channel/channel_stack.h +11 -10
  239. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  240. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  241. data/src/core/lib/channel/channelz.cc +21 -13
  242. data/src/core/lib/channel/channelz.h +3 -0
  243. data/src/core/lib/channel/connected_channel.cc +4 -4
  244. data/src/core/lib/channel/context.h +3 -0
  245. data/src/core/lib/channel/handshaker.cc +7 -6
  246. data/src/core/lib/channel/handshaker.h +5 -5
  247. data/src/core/lib/channel/status_util.h +4 -0
  248. data/src/core/lib/compression/stream_compression.h +1 -1
  249. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  250. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  251. data/src/core/lib/debug/stats.h +1 -1
  252. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  253. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  254. data/src/core/lib/event_engine/event_engine.cc +50 -0
  255. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  256. data/src/core/lib/event_engine/sockaddr.h +44 -0
  257. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  258. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  259. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  260. data/src/core/lib/gprpp/orphanable.h +3 -3
  261. data/src/core/lib/gprpp/ref_counted.h +28 -14
  262. data/src/core/lib/gprpp/status_helper.cc +407 -0
  263. data/src/core/lib/gprpp/status_helper.h +183 -0
  264. data/src/core/lib/gprpp/sync.h +2 -30
  265. data/src/core/lib/http/httpcli.cc +11 -11
  266. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  267. data/src/core/lib/http/parser.cc +16 -16
  268. data/src/core/lib/http/parser.h +4 -4
  269. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  270. data/src/core/lib/iomgr/buffer_list.h +4 -5
  271. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  272. data/src/core/lib/iomgr/call_combiner.h +12 -14
  273. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  274. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  275. data/src/core/lib/iomgr/closure.h +7 -6
  276. data/src/core/lib/iomgr/combiner.cc +14 -12
  277. data/src/core/lib/iomgr/combiner.h +2 -2
  278. data/src/core/lib/iomgr/endpoint.cc +1 -1
  279. data/src/core/lib/iomgr/endpoint.h +2 -2
  280. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  281. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  282. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  283. data/src/core/lib/iomgr/error.cc +168 -61
  284. data/src/core/lib/iomgr/error.h +217 -106
  285. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  286. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  287. data/src/core/lib/iomgr/error_internal.h +5 -1
  288. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  289. data/src/core/lib/iomgr/ev_apple.h +1 -1
  290. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  291. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  292. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  293. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  294. data/src/core/lib/iomgr/ev_posix.h +9 -9
  295. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  296. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  297. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  298. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  299. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  300. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  301. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  302. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  303. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  304. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  305. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  306. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  307. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  308. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  309. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  310. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  311. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  312. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  313. data/src/core/lib/iomgr/executor.cc +8 -8
  314. data/src/core/lib/iomgr/executor.h +2 -2
  315. data/src/core/lib/iomgr/iomgr.cc +2 -2
  316. data/src/core/lib/iomgr/iomgr.h +1 -1
  317. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  318. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  319. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  320. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  321. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  322. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  323. data/src/core/lib/iomgr/load_file.cc +4 -4
  324. data/src/core/lib/iomgr/load_file.h +2 -2
  325. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  326. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  327. data/src/core/lib/iomgr/pollset.cc +5 -5
  328. data/src/core/lib/iomgr/pollset.h +9 -9
  329. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  330. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  331. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  332. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  333. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  334. data/src/core/lib/iomgr/port.h +7 -5
  335. data/src/core/lib/iomgr/python_util.h +2 -2
  336. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  337. data/src/core/lib/iomgr/resolve_address.h +12 -6
  338. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  339. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  340. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  341. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  342. data/src/core/lib/iomgr/resource_quota.cc +13 -10
  343. data/src/core/lib/iomgr/sockaddr.h +1 -0
  344. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  345. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  346. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  347. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  348. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  349. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  350. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  351. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  352. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  353. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  354. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  355. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  356. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  357. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  358. data/src/core/lib/iomgr/tcp_server.h +12 -11
  359. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  360. data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
  361. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  362. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  363. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  364. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  365. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  366. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  367. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  368. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  369. data/src/core/lib/iomgr/timer.h +6 -1
  370. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  371. data/src/core/lib/iomgr/timer_custom.h +1 -1
  372. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  373. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  374. data/src/core/lib/iomgr/udp_server.cc +21 -20
  375. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  376. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  377. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  378. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  379. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  380. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  381. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  382. data/src/core/lib/iomgr/work_serializer.h +17 -1
  383. data/src/core/lib/json/json.h +1 -1
  384. data/src/core/lib/json/json_reader.cc +5 -6
  385. data/src/core/lib/matchers/matchers.cc +46 -58
  386. data/src/core/lib/matchers/matchers.h +30 -29
  387. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  388. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  389. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  390. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  391. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  392. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  393. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  394. data/src/core/lib/security/credentials/credentials.h +2 -2
  395. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  396. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  397. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  398. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  399. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  400. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  401. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  402. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  403. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  404. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  405. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  406. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  407. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  408. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  409. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  410. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  411. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  412. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  413. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  414. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  415. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  416. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  417. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  418. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  419. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  420. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
  421. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
  422. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  423. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  424. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  425. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  426. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  427. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  428. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  429. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  430. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  431. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  432. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  433. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  434. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  435. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  436. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
  437. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  438. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  439. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  440. data/src/core/lib/security/transport/security_handshaker.cc +45 -36
  441. data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
  442. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  443. data/src/core/lib/security/transport/tsi_error.h +2 -1
  444. data/src/core/lib/security/util/json_util.cc +2 -2
  445. data/src/core/lib/security/util/json_util.h +1 -1
  446. data/src/core/lib/slice/slice_internal.h +1 -0
  447. data/src/core/lib/surface/call.cc +72 -52
  448. data/src/core/lib/surface/call.h +13 -2
  449. data/src/core/lib/surface/channel.cc +6 -6
  450. data/src/core/lib/surface/channel.h +3 -2
  451. data/src/core/lib/surface/channel_ping.cc +1 -1
  452. data/src/core/lib/surface/completion_queue.cc +68 -69
  453. data/src/core/lib/surface/completion_queue.h +3 -2
  454. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  455. data/src/core/lib/surface/init.cc +1 -3
  456. data/src/core/lib/surface/init.h +10 -1
  457. data/src/core/lib/surface/lame_client.cc +11 -11
  458. data/src/core/lib/surface/lame_client.h +1 -1
  459. data/src/core/lib/surface/server.cc +31 -23
  460. data/src/core/lib/surface/server.h +19 -18
  461. data/src/core/lib/surface/validate_metadata.cc +7 -7
  462. data/src/core/lib/surface/validate_metadata.h +3 -2
  463. data/src/core/lib/surface/version.cc +2 -2
  464. data/src/core/lib/transport/byte_stream.cc +5 -5
  465. data/src/core/lib/transport/byte_stream.h +8 -8
  466. data/src/core/lib/transport/connectivity_state.cc +1 -1
  467. data/src/core/lib/transport/error_utils.cc +21 -10
  468. data/src/core/lib/transport/error_utils.h +11 -5
  469. data/src/core/lib/transport/metadata_batch.cc +37 -37
  470. data/src/core/lib/transport/metadata_batch.h +19 -18
  471. data/src/core/lib/transport/transport.cc +4 -3
  472. data/src/core/lib/transport/transport.h +6 -4
  473. data/src/core/lib/transport/transport_op_string.cc +6 -6
  474. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  475. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  476. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  477. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  478. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  479. data/src/core/tsi/ssl_transport_security.cc +32 -14
  480. data/src/core/tsi/ssl_transport_security.h +3 -4
  481. data/src/ruby/bin/math_services_pb.rb +1 -1
  482. data/src/ruby/ext/grpc/extconf.rb +2 -0
  483. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  484. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  485. data/src/ruby/lib/grpc/version.rb +1 -1
  486. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  487. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  488. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  489. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  490. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  491. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  492. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  493. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  494. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  495. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  496. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  497. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  498. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  499. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  500. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  501. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  502. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  503. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  504. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  505. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  506. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  507. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  508. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  509. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  510. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  511. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  512. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  513. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  514. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  515. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  516. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  517. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  518. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  519. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  520. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  521. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  522. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  523. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  524. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  525. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  526. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  527. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  528. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  529. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  530. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  531. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  532. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  533. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  534. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  535. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  536. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  537. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  538. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  539. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  540. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  541. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  542. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  543. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  544. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  545. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  546. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  547. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  548. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  549. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  550. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  551. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  552. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  553. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  554. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  555. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  556. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  558. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  559. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  560. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  561. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  562. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  563. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  564. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  565. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  566. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  567. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  568. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  569. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  570. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  571. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  572. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  573. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  574. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  575. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  576. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  577. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  579. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  580. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  581. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  582. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  583. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  584. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  585. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  586. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  587. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  588. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  589. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  590. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  591. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  592. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  593. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  594. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  595. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  596. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  597. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  598. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  599. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  600. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  601. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  602. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  603. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  604. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  605. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  606. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  607. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  608. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  609. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  610. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  611. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  631. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  632. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  633. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  635. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  636. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  637. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  638. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  639. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  640. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  641. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  642. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  643. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  644. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  645. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  646. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  647. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  649. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  650. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  651. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  652. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  653. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  654. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  655. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  657. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  658. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  659. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  660. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  661. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  662. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  663. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  664. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  665. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  666. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  668. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  670. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  671. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  672. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  673. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  674. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  679. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  680. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  681. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  682. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  683. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  684. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  685. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  686. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  687. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  688. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  689. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  690. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  691. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  692. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  693. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  694. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  695. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  697. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  698. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  699. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  700. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  702. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  703. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  704. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  705. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  706. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  707. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  708. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  709. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  710. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  711. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  712. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  713. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  714. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  715. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  716. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  717. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  718. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  719. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  720. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  721. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  722. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  723. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  724. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  725. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  726. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  727. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  728. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  729. data/third_party/xxhash/xxhash.h +77 -195
  730. metadata +116 -51
  731. data/src/core/lib/gpr/arena.h +0 -47
  732. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  733. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  734. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  735. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  737. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  738. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -34,11 +34,11 @@ namespace grpc_core {
34
34
  // added to the server. Takes ownership of the args. Caller takes ownership of
35
35
  // returned args. On failure, the error parameter will be set.
36
36
  using Chttp2ServerArgsModifier =
37
- std::function<grpc_channel_args*(grpc_channel_args*, grpc_error**)>;
37
+ std::function<grpc_channel_args*(grpc_channel_args*, grpc_error_handle*)>;
38
38
 
39
39
  /// Adds a port to \a server. Sets \a port_num to the port number.
40
40
  /// Takes ownership of \a args.
41
- grpc_error* Chttp2ServerAddPort(
41
+ grpc_error_handle Chttp2ServerAddPort(
42
42
  Server* server, const char* addr, grpc_channel_args* args,
43
43
  Chttp2ServerArgsModifier connection_args_modifier, int* port_num);
44
44
 
@@ -30,7 +30,7 @@
30
30
  namespace {
31
31
 
32
32
  grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
33
- grpc_error** /*error*/) {
33
+ grpc_error_handle* /*error*/) {
34
34
  return args;
35
35
  }
36
36
 
@@ -41,13 +41,12 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
41
41
  int port_num = 0;
42
42
  GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
43
43
  (server, addr));
44
- grpc_error* err = grpc_core::Chttp2ServerAddPort(
44
+ grpc_error_handle err = grpc_core::Chttp2ServerAddPort(
45
45
  server->core_server.get(), addr,
46
46
  grpc_channel_args_copy(server->core_server->channel_args()),
47
47
  ModifyArgsForConnection, &port_num);
48
48
  if (err != GRPC_ERROR_NONE) {
49
- const char* msg = grpc_error_string(err);
50
- gpr_log(GPR_ERROR, "%s", msg);
49
+ gpr_log(GPR_ERROR, "%s", grpc_error_std_string(err).c_str());
51
50
 
52
51
  GRPC_ERROR_UNREF(err);
53
52
  }
@@ -51,7 +51,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
51
51
  grpc_transport* transport = grpc_create_chttp2_transport(
52
52
  server_args, server_endpoint, false /* is_client */);
53
53
 
54
- grpc_error* error =
54
+ grpc_error_handle error =
55
55
  core_server->SetupTransport(transport, nullptr, server_args, nullptr);
56
56
  if (error == GRPC_ERROR_NONE) {
57
57
  for (grpc_pollset* pollset : core_server->pollsets()) {
@@ -60,7 +60,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
60
60
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
61
61
  } else {
62
62
  gpr_log(GPR_ERROR, "Failed to create channel: %s",
63
- grpc_error_string(error));
63
+ grpc_error_std_string(error).c_str());
64
64
  GRPC_ERROR_UNREF(error);
65
65
  grpc_transport_destroy(transport);
66
66
  }
@@ -68,8 +68,9 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
68
68
 
69
69
  #else // !GPR_SUPPORT_CHANNELS_FROM_FD
70
70
 
71
- void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
72
- void* reserved, int fd) {
71
+ void grpc_server_add_insecure_channel_from_fd(grpc_server* /* server */,
72
+ void* /* reserved */,
73
+ int /* fd */) {
73
74
  GPR_ASSERT(0);
74
75
  }
75
76
 
@@ -40,7 +40,7 @@
40
40
  namespace {
41
41
 
42
42
  grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
43
- grpc_error** error) {
43
+ grpc_error_handle* error) {
44
44
  grpc_server_credentials* server_credentials =
45
45
  grpc_find_server_credentials_in_args(args);
46
46
  if (server_credentials == nullptr) {
@@ -69,7 +69,7 @@ grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
69
69
  int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
70
70
  grpc_server_credentials* creds) {
71
71
  grpc_core::ExecCtx exec_ctx;
72
- grpc_error* err = GRPC_ERROR_NONE;
72
+ grpc_error_handle err = GRPC_ERROR_NONE;
73
73
  grpc_core::RefCountedPtr<grpc_server_security_connector> sc;
74
74
  int port_num = 0;
75
75
  grpc_channel_args* args = nullptr;
@@ -121,8 +121,7 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
121
121
  done:
122
122
  sc.reset(DEBUG_LOCATION, "server");
123
123
  if (err != GRPC_ERROR_NONE) {
124
- const char* msg = grpc_error_string(err);
125
- gpr_log(GPR_ERROR, "%s", msg);
124
+ gpr_log(GPR_ERROR, "%s", grpc_error_std_string(err).c_str());
126
125
 
127
126
  GRPC_ERROR_UNREF(err);
128
127
  }
@@ -146,7 +146,7 @@ bool grpc_base64_decode_partial(struct grpc_base64_decode_context* ctx) {
146
146
  switch (input_tail) {
147
147
  case 3:
148
148
  ctx->output_cur[1] = COMPOSE_OUTPUT_BYTE_1(ctx->input_cur);
149
- /* fallthrough */
149
+ ABSL_FALLTHROUGH_INTENDED;
150
150
  case 2:
151
151
  ctx->output_cur[0] = COMPOSE_OUTPUT_BYTE_0(ctx->input_cur);
152
152
  }
@@ -0,0 +1,66 @@
1
+ // Copyright 2021 The 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
+ #include <grpc/support/port_platform.h>
15
+
16
+ #include "grpc/event_engine/slice_allocator.h"
17
+
18
+ #include <functional>
19
+
20
+ #include "absl/memory/memory.h"
21
+ #include "absl/status/status.h"
22
+
23
+ #include "src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h"
24
+ #include "src/core/lib/iomgr/resource_quota.h"
25
+
26
+ namespace grpc_event_engine {
27
+ namespace experimental {
28
+
29
+ Chttp2SliceAllocator::Chttp2SliceAllocator(grpc_resource_user* user)
30
+ : resource_user_(user) {}
31
+
32
+ Chttp2SliceAllocator::~Chttp2SliceAllocator() {
33
+ if (resource_user_ != nullptr) {
34
+ grpc_resource_user_unref(resource_user_);
35
+ }
36
+ }
37
+
38
+ absl::Status Chttp2SliceAllocator::Allocate(
39
+ size_t size, SliceBuffer* dest, SliceAllocator::AllocateCallback cb) {
40
+ // TODO(hork): merge the implementation from the uv-ee branch.
41
+ (void)size;
42
+ (void)dest;
43
+ (void)cb;
44
+ return absl::OkStatus();
45
+ }
46
+
47
+ Chttp2SliceAllocatorFactory::Chttp2SliceAllocatorFactory(
48
+ grpc_resource_quota* quota)
49
+ : resource_quota_(quota) {
50
+ grpc_resource_quota_ref_internal(resource_quota_);
51
+ }
52
+
53
+ Chttp2SliceAllocatorFactory::~Chttp2SliceAllocatorFactory() {
54
+ if (resource_quota_ != nullptr) {
55
+ grpc_resource_quota_unref_internal(resource_quota_);
56
+ }
57
+ }
58
+
59
+ std::unique_ptr<SliceAllocator>
60
+ Chttp2SliceAllocatorFactory::CreateSliceAllocator(absl::string_view peer_name) {
61
+ return absl::make_unique<Chttp2SliceAllocator>(
62
+ grpc_resource_user_create(resource_quota_, peer_name.data()));
63
+ }
64
+
65
+ } // namespace experimental
66
+ } // namespace grpc_event_engine
@@ -0,0 +1,74 @@
1
+ // Copyright 2021 The 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
+ #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_CHTTP2_SLICE_ALLOCATOR_H
15
+ #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_CHTTP2_SLICE_ALLOCATOR_H
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "grpc/event_engine/slice_allocator.h"
20
+
21
+ #include <functional>
22
+
23
+ #include "absl/status/status.h"
24
+
25
+ #include "src/core/lib/iomgr/resource_quota.h"
26
+
27
+ namespace grpc_event_engine {
28
+ namespace experimental {
29
+
30
+ class Chttp2SliceAllocator
31
+ : public grpc_event_engine::experimental::SliceAllocator {
32
+ public:
33
+ /// gRPC-internal constructor. Takes ownership of a resource_user ref from the
34
+ /// caller.
35
+ explicit Chttp2SliceAllocator(grpc_resource_user* user);
36
+ // Not copyable
37
+ Chttp2SliceAllocator(Chttp2SliceAllocator& other) = delete;
38
+ Chttp2SliceAllocator& operator=(const Chttp2SliceAllocator& other) = delete;
39
+ // Not Moveable
40
+ Chttp2SliceAllocator(Chttp2SliceAllocator&& other) = delete;
41
+ Chttp2SliceAllocator& operator=(Chttp2SliceAllocator&& other) = delete;
42
+ ~Chttp2SliceAllocator() override;
43
+ absl::Status Allocate(size_t size, SliceBuffer* dest,
44
+ SliceAllocator::AllocateCallback cb) override;
45
+
46
+ private:
47
+ grpc_resource_user* resource_user_;
48
+ };
49
+
50
+ class Chttp2SliceAllocatorFactory
51
+ : public grpc_event_engine::experimental::SliceAllocatorFactory {
52
+ public:
53
+ // gRPC-internal constructor
54
+ explicit Chttp2SliceAllocatorFactory(grpc_resource_quota* quota);
55
+ // Not copyable
56
+ Chttp2SliceAllocatorFactory(Chttp2SliceAllocatorFactory& other) = delete;
57
+ Chttp2SliceAllocatorFactory& operator=(
58
+ const Chttp2SliceAllocatorFactory& other) = delete;
59
+ // Not Moveable
60
+ Chttp2SliceAllocatorFactory(Chttp2SliceAllocatorFactory&& other) = delete;
61
+ Chttp2SliceAllocatorFactory& operator=(Chttp2SliceAllocatorFactory&& other) =
62
+ delete;
63
+ ~Chttp2SliceAllocatorFactory() override;
64
+ std::unique_ptr<SliceAllocator> CreateSliceAllocator(
65
+ absl::string_view peer_name) override;
66
+
67
+ private:
68
+ grpc_resource_quota* resource_quota_;
69
+ };
70
+
71
+ } // namespace experimental
72
+ } // namespace grpc_event_engine
73
+
74
+ #endif // GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_CHTTP2_SLICE_ALLOCATOR_H
@@ -100,23 +100,23 @@ grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
100
100
  "chttp2_refcount");
101
101
 
102
102
  // forward declarations of various callbacks that we'll build closures around
103
- static void write_action_begin_locked(void* t, grpc_error* error);
104
- static void write_action(void* t, grpc_error* error);
105
- static void write_action_end(void* t, grpc_error* error);
106
- static void write_action_end_locked(void* t, grpc_error* error);
103
+ static void write_action_begin_locked(void* t, grpc_error_handle error);
104
+ static void write_action(void* t, grpc_error_handle error);
105
+ static void write_action_end(void* t, grpc_error_handle error);
106
+ static void write_action_end_locked(void* t, grpc_error_handle error);
107
107
 
108
- static void read_action(void* t, grpc_error* error);
109
- static void read_action_locked(void* t, grpc_error* error);
108
+ static void read_action(void* t, grpc_error_handle error);
109
+ static void read_action_locked(void* t, grpc_error_handle error);
110
110
  static void continue_read_action_locked(grpc_chttp2_transport* t);
111
111
 
112
- static void complete_fetch(void* gs, grpc_error* error);
113
- static void complete_fetch_locked(void* gs, grpc_error* error);
112
+ static void complete_fetch(void* gs, grpc_error_handle error);
113
+ static void complete_fetch_locked(void* gs, grpc_error_handle error);
114
114
  // Set a transport level setting, and push it to our peer
115
115
  static void queue_setting_update(grpc_chttp2_transport* t,
116
116
  grpc_chttp2_setting_id id, uint32_t value);
117
117
 
118
118
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
119
- grpc_error* error);
119
+ grpc_error_handle error);
120
120
 
121
121
  // Start new streams that have been created if we can
122
122
  static void maybe_start_some_streams(grpc_chttp2_transport* t);
@@ -126,40 +126,43 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
126
126
  const absl::Status& status,
127
127
  const char* reason);
128
128
 
129
- static void benign_reclaimer(void* arg, grpc_error* error);
130
- static void destructive_reclaimer(void* arg, grpc_error* error);
131
- static void benign_reclaimer_locked(void* arg, grpc_error* error);
132
- static void destructive_reclaimer_locked(void* arg, grpc_error* error);
129
+ static void benign_reclaimer(void* arg, grpc_error_handle error);
130
+ static void destructive_reclaimer(void* arg, grpc_error_handle error);
131
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error);
132
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error);
133
133
 
134
134
  static void post_benign_reclaimer(grpc_chttp2_transport* t);
135
135
  static void post_destructive_reclaimer(grpc_chttp2_transport* t);
136
136
 
137
- static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
138
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
139
-
140
- static void start_bdp_ping(void* tp, grpc_error* error);
141
- static void finish_bdp_ping(void* tp, grpc_error* error);
142
- static void start_bdp_ping_locked(void* tp, grpc_error* error);
143
- static void finish_bdp_ping_locked(void* tp, grpc_error* error);
144
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error);
145
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error);
146
-
147
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error);
137
+ static void close_transport_locked(grpc_chttp2_transport* t,
138
+ grpc_error_handle error);
139
+ static void end_all_the_calls(grpc_chttp2_transport* t,
140
+ grpc_error_handle error);
141
+
142
+ static void start_bdp_ping(void* tp, grpc_error_handle error);
143
+ static void finish_bdp_ping(void* tp, grpc_error_handle error);
144
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
145
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
146
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error);
147
+ static void next_bdp_ping_timer_expired_locked(void* tp,
148
+ grpc_error_handle error);
149
+
150
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
148
151
  static void send_ping_locked(grpc_chttp2_transport* t,
149
152
  grpc_closure* on_initiate, grpc_closure* on_ack);
150
- static void retry_initiate_ping_locked(void* tp, grpc_error* error);
153
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error);
151
154
 
152
155
  // keepalive-relevant functions
153
- static void init_keepalive_ping(void* arg, grpc_error* error);
154
- static void init_keepalive_ping_locked(void* arg, grpc_error* error);
155
- static void start_keepalive_ping(void* arg, grpc_error* error);
156
- static void finish_keepalive_ping(void* arg, grpc_error* error);
157
- static void start_keepalive_ping_locked(void* arg, grpc_error* error);
158
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error);
159
- static void keepalive_watchdog_fired(void* arg, grpc_error* error);
160
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error);
156
+ static void init_keepalive_ping(void* arg, grpc_error_handle error);
157
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error);
158
+ static void start_keepalive_ping(void* arg, grpc_error_handle error);
159
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error);
160
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
161
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
162
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
163
+ static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
161
164
 
162
- static void reset_byte_stream(void* arg, grpc_error* error);
165
+ static void reset_byte_stream(void* arg, grpc_error_handle error);
163
166
 
164
167
  // Flow control default enabled. Can be disabled by setting
165
168
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
@@ -203,7 +206,7 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
203
206
  grpc_slice_buffer_destroy_internal(&outbuf);
204
207
  grpc_chttp2_hpack_compressor_destroy(&hpack_compressor);
205
208
 
206
- grpc_error* error =
209
+ grpc_error_handle error =
207
210
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
208
211
  // ContextList::Execute follows semantics of a callback function and does not
209
212
  // take a ref on error
@@ -212,7 +215,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
212
215
  cl = nullptr;
213
216
 
214
217
  grpc_slice_buffer_destroy_internal(&read_buffer);
215
- grpc_chttp2_hpack_parser_destroy(&hpack_parser);
216
218
  grpc_chttp2_goaway_parser_destroy(&goaway_parser);
217
219
 
218
220
  for (i = 0; i < STREAM_LIST_COUNT; i++) {
@@ -482,7 +484,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
482
484
  settings[j][i] = grpc_chttp2_settings_parameters[i].default_value;
483
485
  }
484
486
  }
485
- grpc_chttp2_hpack_parser_init(&hpack_parser);
486
487
  grpc_chttp2_goaway_parser_init(&goaway_parser);
487
488
 
488
489
  // configure http2 the way we like it
@@ -534,7 +535,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
534
535
  }
535
536
  }
536
537
 
537
- static void destroy_transport_locked(void* tp, grpc_error* /*error*/) {
538
+ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
538
539
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
539
540
  t->destroying = 1;
540
541
  close_transport_locked(
@@ -552,7 +553,7 @@ static void destroy_transport(grpc_transport* gt) {
552
553
  }
553
554
 
554
555
  static void close_transport_locked(grpc_chttp2_transport* t,
555
- grpc_error* error) {
556
+ grpc_error_handle error) {
556
557
  end_all_the_calls(t, GRPC_ERROR_REF(error));
557
558
  cancel_pings(t, GRPC_ERROR_REF(error));
558
559
  if (t->closed_with_error == GRPC_ERROR_NONE) {
@@ -561,7 +562,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
561
562
  GRPC_STATUS_UNAVAILABLE);
562
563
  }
563
564
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
564
- if (t->close_transport_on_writes_finished == nullptr) {
565
+ if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
565
566
  t->close_transport_on_writes_finished =
566
567
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
567
568
  "Delayed close due to in-progress write");
@@ -731,7 +732,7 @@ static int init_stream(grpc_transport* gt, grpc_stream* gs,
731
732
  return 0;
732
733
  }
733
734
 
734
- static void destroy_stream_locked(void* sp, grpc_error* /*error*/) {
735
+ static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
735
736
  GPR_TIMER_SCOPE("destroy_stream", 0);
736
737
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
737
738
  s->~grpc_chttp2_stream();
@@ -818,9 +819,9 @@ static void set_write_state(grpc_chttp2_transport* t,
818
819
  // from peer while we had some pending writes)
819
820
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
820
821
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
821
- if (t->close_transport_on_writes_finished != nullptr) {
822
- grpc_error* err = t->close_transport_on_writes_finished;
823
- t->close_transport_on_writes_finished = nullptr;
822
+ if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
823
+ grpc_error_handle err = t->close_transport_on_writes_finished;
824
+ t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
824
825
  close_transport_locked(t, err);
825
826
  }
826
827
  }
@@ -951,7 +952,8 @@ static const char* begin_writing_desc(bool partial) {
951
952
  }
952
953
  }
953
954
 
954
- static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
955
+ static void write_action_begin_locked(void* gt,
956
+ grpc_error_handle /*error_ignored*/) {
955
957
  GPR_TIMER_SCOPE("write_action_begin_locked", 0);
956
958
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
957
959
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
@@ -990,7 +992,7 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
990
992
  }
991
993
  }
992
994
 
993
- static void write_action(void* gt, grpc_error* /*error*/) {
995
+ static void write_action(void* gt, grpc_error_handle /*error*/) {
994
996
  GPR_TIMER_SCOPE("write_action", 0);
995
997
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
996
998
  void* cl = t->cl;
@@ -1002,7 +1004,7 @@ static void write_action(void* gt, grpc_error* /*error*/) {
1002
1004
  cl);
1003
1005
  }
1004
1006
 
1005
- static void write_action_end(void* tp, grpc_error* error) {
1007
+ static void write_action_end(void* tp, grpc_error_handle error) {
1006
1008
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1007
1009
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
1008
1010
  write_action_end_locked, t, nullptr),
@@ -1011,7 +1013,7 @@ static void write_action_end(void* tp, grpc_error* error) {
1011
1013
 
1012
1014
  // Callback from the grpc_endpoint after bytes have been written by calling
1013
1015
  // sendmsg
1014
- static void write_action_end_locked(void* tp, grpc_error* error) {
1016
+ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1015
1017
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1016
1018
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1017
1019
 
@@ -1100,7 +1102,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1100
1102
  // received a GOAWAY with a non NO_ERROR code.
1101
1103
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1102
1104
  gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1103
- goaway_error, grpc_error_string(t->goaway_error));
1105
+ goaway_error, grpc_error_std_string(t->goaway_error).c_str());
1104
1106
  }
1105
1107
  absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1106
1108
  // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
@@ -1206,7 +1208,8 @@ static void null_then_sched_closure(grpc_closure** closure) {
1206
1208
  void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1207
1209
  grpc_chttp2_stream* /*s*/,
1208
1210
  grpc_closure** pclosure,
1209
- grpc_error* error, const char* desc) {
1211
+ grpc_error_handle error,
1212
+ const char* desc) {
1210
1213
  grpc_closure* closure = *pclosure;
1211
1214
  *pclosure = nullptr;
1212
1215
  if (closure == nullptr) {
@@ -1215,7 +1218,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1215
1218
  }
1216
1219
  closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
1217
1220
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1218
- const char* errstr = grpc_error_string(error);
1219
1221
  gpr_log(
1220
1222
  GPR_INFO,
1221
1223
  "complete_closure_step: t=%p %p refs=%d flags=0x%04x desc=%s err=%s "
@@ -1225,7 +1227,8 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1225
1227
  CLOSURE_BARRIER_FIRST_REF_BIT),
1226
1228
  static_cast<int>(closure->next_data.scratch %
1227
1229
  CLOSURE_BARRIER_FIRST_REF_BIT),
1228
- desc, errstr, write_state_name(t->write_state));
1230
+ desc, grpc_error_std_string(error).c_str(),
1231
+ write_state_name(t->write_state));
1229
1232
  }
1230
1233
  if (error != GRPC_ERROR_NONE) {
1231
1234
  if (closure->error_data.error == GRPC_ERROR_NONE) {
@@ -1283,7 +1286,6 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1283
1286
  if (s->fetching_send_message == nullptr) {
1284
1287
  // Stream was cancelled before message fetch completed
1285
1288
  abort(); /* TODO(ctiller): what cleanup here? */
1286
- return; /* early out */
1287
1289
  }
1288
1290
  if (s->fetched_send_message_length == s->fetching_send_message->length()) {
1289
1291
  int64_t notify_offset = s->next_message_end_offset;
@@ -1314,7 +1316,8 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1314
1316
  UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1315
1317
  ::complete_fetch, s,
1316
1318
  grpc_schedule_on_exec_ctx))) {
1317
- grpc_error* error = s->fetching_send_message->Pull(&s->fetching_slice);
1319
+ grpc_error_handle error =
1320
+ s->fetching_send_message->Pull(&s->fetching_slice);
1318
1321
  if (error != GRPC_ERROR_NONE) {
1319
1322
  s->fetching_send_message.reset();
1320
1323
  grpc_chttp2_cancel_stream(t, s, error);
@@ -1325,14 +1328,14 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1325
1328
  }
1326
1329
  }
1327
1330
 
1328
- static void complete_fetch(void* gs, grpc_error* error) {
1331
+ static void complete_fetch(void* gs, grpc_error_handle error) {
1329
1332
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1330
1333
  s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1331
1334
  ::complete_fetch_locked, s, nullptr),
1332
1335
  GRPC_ERROR_REF(error));
1333
1336
  }
1334
1337
 
1335
- static void complete_fetch_locked(void* gs, grpc_error* error) {
1338
+ static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1336
1339
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1337
1340
  grpc_chttp2_transport* t = s->t;
1338
1341
  if (error == GRPC_ERROR_NONE) {
@@ -1362,7 +1365,7 @@ static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1362
1365
  }
1363
1366
 
1364
1367
  static void perform_stream_op_locked(void* stream_op,
1365
- grpc_error* /*error_ignored*/) {
1368
+ grpc_error_handle /*error_ignored*/) {
1366
1369
  GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
1367
1370
 
1368
1371
  grpc_transport_stream_op_batch* op =
@@ -1576,6 +1579,8 @@ static void perform_stream_op_locked(void* stream_op,
1576
1579
  GPR_ASSERT(!s->pending_byte_stream);
1577
1580
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1578
1581
  s->recv_message = op_payload->recv_message.recv_message;
1582
+ s->call_failed_before_recv_message =
1583
+ op_payload->recv_message.call_failed_before_recv_message;
1579
1584
  if (s->id != 0) {
1580
1585
  if (!s->read_closed) {
1581
1586
  before = s->frame_storage.length +
@@ -1585,8 +1590,7 @@ static void perform_stream_op_locked(void* stream_op,
1585
1590
  grpc_chttp2_maybe_complete_recv_message(t, s);
1586
1591
  if (s->id != 0) {
1587
1592
  if (!s->read_closed && s->frame_storage.length == 0) {
1588
- size_t after = s->frame_storage.length +
1589
- s->unprocessed_incoming_frames_buffer_cached_length;
1593
+ size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
1590
1594
  s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
1591
1595
  before - after);
1592
1596
  grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
@@ -1646,7 +1650,7 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1646
1650
  GRPC_ERROR_NONE);
1647
1651
  }
1648
1652
 
1649
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error) {
1653
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1650
1654
  // callback remaining pings: they're not allowed to call into the transport,
1651
1655
  // and maybe they hold resources that need to be freed
1652
1656
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
@@ -1713,14 +1717,14 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1713
1717
  GRPC_ERROR_NONE);
1714
1718
  }
1715
1719
 
1716
- void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error* error) {
1720
+ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1717
1721
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1718
1722
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
1719
1723
  retry_initiate_ping_locked, t, nullptr),
1720
1724
  GRPC_ERROR_REF(error));
1721
1725
  }
1722
1726
 
1723
- static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1727
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1724
1728
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1725
1729
  t->ping_state.is_delayed_ping_timer_set = false;
1726
1730
  if (error == GRPC_ERROR_NONE) {
@@ -1743,10 +1747,10 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1743
1747
  }
1744
1748
  }
1745
1749
 
1746
- static void send_goaway(grpc_chttp2_transport* t, grpc_error* error) {
1750
+ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1747
1751
  // We want to log this irrespective of whether http tracing is enabled
1748
1752
  gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1749
- grpc_error_string(error));
1753
+ grpc_error_std_string(error).c_str());
1750
1754
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1751
1755
  grpc_http2_error_code http_error;
1752
1756
  grpc_slice slice;
@@ -1784,12 +1788,12 @@ void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
1784
1788
  }
1785
1789
 
1786
1790
  static void perform_transport_op_locked(void* stream_op,
1787
- grpc_error* /*error_ignored*/) {
1791
+ grpc_error_handle /*error_ignored*/) {
1788
1792
  grpc_transport_op* op = static_cast<grpc_transport_op*>(stream_op);
1789
1793
  grpc_chttp2_transport* t =
1790
1794
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1791
1795
 
1792
- if (op->goaway_error) {
1796
+ if (op->goaway_error != GRPC_ERROR_NONE) {
1793
1797
  send_goaway(t, op->goaway_error);
1794
1798
  }
1795
1799
 
@@ -1864,7 +1868,7 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(
1864
1868
 
1865
1869
  void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1866
1870
  grpc_chttp2_stream* s) {
1867
- grpc_error* error = GRPC_ERROR_NONE;
1871
+ grpc_error_handle error = GRPC_ERROR_NONE;
1868
1872
  if (s->recv_message_ready != nullptr) {
1869
1873
  *s->recv_message = nullptr;
1870
1874
  if (s->final_metadata_requested && s->seen_error) {
@@ -1941,6 +1945,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1941
1945
  null_then_sched_closure(&s->recv_message_ready);
1942
1946
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
1943
1947
  *s->recv_message = nullptr;
1948
+ if (s->call_failed_before_recv_message != nullptr) {
1949
+ *s->call_failed_before_recv_message =
1950
+ (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
1951
+ }
1944
1952
  null_then_sched_closure(&s->recv_message_ready);
1945
1953
  }
1946
1954
  GRPC_ERROR_UNREF(error);
@@ -2014,7 +2022,7 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2014
2022
  }
2015
2023
 
2016
2024
  static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2017
- grpc_error* error) {
2025
+ grpc_error_handle error) {
2018
2026
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
2019
2027
  grpc_chttp2_stream_map_delete(&t->stream_map, id));
2020
2028
  GPR_DEBUG_ASSERT(s);
@@ -2057,7 +2065,7 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2057
2065
  }
2058
2066
 
2059
2067
  void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2060
- grpc_error* due_to_error) {
2068
+ grpc_error_handle due_to_error) {
2061
2069
  if (!t->is_client && !s->sent_trailing_metadata &&
2062
2070
  grpc_error_has_clear_grpc_status(due_to_error)) {
2063
2071
  close_from_api(t, s, due_to_error);
@@ -2081,7 +2089,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2081
2089
  }
2082
2090
 
2083
2091
  void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2084
- grpc_error* error) {
2092
+ grpc_error_handle error) {
2085
2093
  grpc_status_code status;
2086
2094
  grpc_slice slice;
2087
2095
  grpc_error_get_status(error, s->deadline, &status, &slice, nullptr, nullptr);
@@ -2118,7 +2126,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2118
2126
  GRPC_ERROR_UNREF(error);
2119
2127
  }
2120
2128
 
2121
- static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2129
+ static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2130
+ size_t* nrefs) {
2122
2131
  if (error == GRPC_ERROR_NONE) return;
2123
2132
  for (size_t i = 0; i < *nrefs; i++) {
2124
2133
  if (error == refs[i]) {
@@ -2129,14 +2138,15 @@ static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2129
2138
  ++*nrefs;
2130
2139
  }
2131
2140
 
2132
- static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2133
- const char* main_error_msg) {
2134
- grpc_error* refs[3];
2141
+ static grpc_error_handle removal_error(grpc_error_handle extra_error,
2142
+ grpc_chttp2_stream* s,
2143
+ const char* main_error_msg) {
2144
+ grpc_error_handle refs[3];
2135
2145
  size_t nrefs = 0;
2136
2146
  add_error(s->read_closed_error, refs, &nrefs);
2137
2147
  add_error(s->write_closed_error, refs, &nrefs);
2138
2148
  add_error(extra_error, refs, &nrefs);
2139
- grpc_error* error = GRPC_ERROR_NONE;
2149
+ grpc_error_handle error = GRPC_ERROR_NONE;
2140
2150
  if (nrefs > 0) {
2141
2151
  error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(main_error_msg,
2142
2152
  refs, nrefs);
@@ -2146,7 +2156,8 @@ static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2146
2156
  }
2147
2157
 
2148
2158
  static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2149
- grpc_chttp2_write_cb** list, grpc_error* error) {
2159
+ grpc_chttp2_write_cb** list,
2160
+ grpc_error_handle error) {
2150
2161
  while (*list) {
2151
2162
  grpc_chttp2_write_cb* cb = *list;
2152
2163
  *list = cb->next;
@@ -2159,7 +2170,8 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2159
2170
  }
2160
2171
 
2161
2172
  void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2162
- grpc_chttp2_stream* s, grpc_error* error) {
2173
+ grpc_chttp2_stream* s,
2174
+ grpc_error_handle error) {
2163
2175
  error =
2164
2176
  removal_error(error, s, "Pending writes failed due to stream closure");
2165
2177
  s->send_initial_metadata = nullptr;
@@ -2183,10 +2195,10 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2183
2195
 
2184
2196
  void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2185
2197
  grpc_chttp2_stream* s, int close_reads,
2186
- int close_writes, grpc_error* error) {
2198
+ int close_writes, grpc_error_handle error) {
2187
2199
  if (s->read_closed && s->write_closed) {
2188
2200
  // already closed, but we should still fake the status if needed.
2189
- grpc_error* overall_error = removal_error(error, s, "Stream removed");
2201
+ grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2190
2202
  if (overall_error != GRPC_ERROR_NONE) {
2191
2203
  grpc_chttp2_fake_status(t, s, overall_error);
2192
2204
  }
@@ -2207,7 +2219,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2207
2219
  }
2208
2220
  if (s->read_closed && s->write_closed) {
2209
2221
  became_closed = true;
2210
- grpc_error* overall_error =
2222
+ grpc_error_handle overall_error =
2211
2223
  removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
2212
2224
  if (s->id != 0) {
2213
2225
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
@@ -2236,7 +2248,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2236
2248
  }
2237
2249
 
2238
2250
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2239
- grpc_error* error) {
2251
+ grpc_error_handle error) {
2240
2252
  grpc_slice hdr;
2241
2253
  grpc_slice status_hdr;
2242
2254
  grpc_slice http_status_hdr;
@@ -2394,7 +2406,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2394
2406
  }
2395
2407
 
2396
2408
  struct cancel_stream_cb_args {
2397
- grpc_error* error;
2409
+ grpc_error_handle error;
2398
2410
  grpc_chttp2_transport* t;
2399
2411
  };
2400
2412
 
@@ -2404,7 +2416,8 @@ static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2404
2416
  grpc_chttp2_cancel_stream(args->t, s, GRPC_ERROR_REF(args->error));
2405
2417
  }
2406
2418
 
2407
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2419
+ static void end_all_the_calls(grpc_chttp2_transport* t,
2420
+ grpc_error_handle error) {
2408
2421
  intptr_t http2_error;
2409
2422
  // If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
2410
2423
  if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
@@ -2430,7 +2443,7 @@ static void WithUrgency(grpc_chttp2_transport* t,
2430
2443
  break;
2431
2444
  case grpc_core::chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY:
2432
2445
  grpc_chttp2_initiate_write(t, reason);
2433
- // fallthrough
2446
+ ABSL_FALLTHROUGH_INTENDED;
2434
2447
  case grpc_core::chttp2::FlowControlAction::Urgency::QUEUE_UPDATE:
2435
2448
  action();
2436
2449
  break;
@@ -2458,15 +2471,15 @@ void grpc_chttp2_act_on_flowctl_action(
2458
2471
  });
2459
2472
  }
2460
2473
 
2461
- static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2474
+ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2462
2475
  grpc_http_parser parser;
2463
2476
  size_t i = 0;
2464
- grpc_error* error = GRPC_ERROR_NONE;
2477
+ grpc_error_handle error = GRPC_ERROR_NONE;
2465
2478
  grpc_http_response response;
2466
2479
 
2467
2480
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2468
2481
 
2469
- grpc_error* parse_error = GRPC_ERROR_NONE;
2482
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
2470
2483
  for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) {
2471
2484
  parse_error =
2472
2485
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
@@ -2487,34 +2500,34 @@ static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2487
2500
  return error;
2488
2501
  }
2489
2502
 
2490
- static void read_action(void* tp, grpc_error* error) {
2503
+ static void read_action(void* tp, grpc_error_handle error) {
2491
2504
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2492
2505
  t->combiner->Run(
2493
2506
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
2494
2507
  GRPC_ERROR_REF(error));
2495
2508
  }
2496
2509
 
2497
- static void read_action_locked(void* tp, grpc_error* error) {
2510
+ static void read_action_locked(void* tp, grpc_error_handle error) {
2498
2511
  GPR_TIMER_SCOPE("reading_action_locked", 0);
2499
2512
 
2500
2513
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2501
2514
 
2502
2515
  GRPC_ERROR_REF(error);
2503
2516
 
2504
- grpc_error* err = error;
2517
+ grpc_error_handle err = error;
2505
2518
  if (err != GRPC_ERROR_NONE) {
2506
2519
  err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2507
2520
  "Endpoint read failed", &err, 1),
2508
2521
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
2509
2522
  t->write_state);
2510
2523
  }
2511
- GPR_SWAP(grpc_error*, err, error);
2524
+ GPR_SWAP(grpc_error_handle, err, error);
2512
2525
  GRPC_ERROR_UNREF(err);
2513
2526
  if (t->closed_with_error == GRPC_ERROR_NONE) {
2514
2527
  GPR_TIMER_SCOPE("reading_action.parse", 0);
2515
2528
  size_t i = 0;
2516
- grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2517
- GRPC_ERROR_NONE};
2529
+ grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2530
+ GRPC_ERROR_NONE};
2518
2531
  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2519
2532
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2520
2533
  }
@@ -2605,18 +2618,18 @@ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2605
2618
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2606
2619
  }
2607
2620
 
2608
- static void start_bdp_ping(void* tp, grpc_error* error) {
2621
+ static void start_bdp_ping(void* tp, grpc_error_handle error) {
2609
2622
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2610
2623
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
2611
2624
  start_bdp_ping_locked, t, nullptr),
2612
2625
  GRPC_ERROR_REF(error));
2613
2626
  }
2614
2627
 
2615
- static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2628
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2616
2629
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2617
2630
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2618
2631
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2619
- grpc_error_string(error));
2632
+ grpc_error_std_string(error).c_str());
2620
2633
  }
2621
2634
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2622
2635
  return;
@@ -2629,18 +2642,18 @@ static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2629
2642
  t->bdp_ping_started = true;
2630
2643
  }
2631
2644
 
2632
- static void finish_bdp_ping(void* tp, grpc_error* error) {
2645
+ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
2633
2646
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2634
2647
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2635
2648
  finish_bdp_ping_locked, t, nullptr),
2636
2649
  GRPC_ERROR_REF(error));
2637
2650
  }
2638
2651
 
2639
- static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2652
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2640
2653
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2641
2654
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2642
2655
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2643
- grpc_error_string(error));
2656
+ grpc_error_std_string(error).c_str());
2644
2657
  }
2645
2658
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2646
2659
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
@@ -2666,7 +2679,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2666
2679
  &t->next_bdp_ping_timer_expired_locked);
2667
2680
  }
2668
2681
 
2669
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2682
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error) {
2670
2683
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2671
2684
  t->combiner->Run(
2672
2685
  GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
@@ -2674,7 +2687,8 @@ static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2674
2687
  GRPC_ERROR_REF(error));
2675
2688
  }
2676
2689
 
2677
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2690
+ static void next_bdp_ping_timer_expired_locked(void* tp,
2691
+ grpc_error_handle error) {
2678
2692
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2679
2693
  GPR_ASSERT(t->have_next_bdp_ping_timer);
2680
2694
  t->have_next_bdp_ping_timer = false;
@@ -2750,14 +2764,14 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2750
2764
  }
2751
2765
  }
2752
2766
 
2753
- static void init_keepalive_ping(void* arg, grpc_error* error) {
2767
+ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2754
2768
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2755
2769
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
2756
2770
  init_keepalive_ping_locked, t, nullptr),
2757
2771
  GRPC_ERROR_REF(error));
2758
2772
  }
2759
2773
 
2760
- static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2774
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2761
2775
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2762
2776
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2763
2777
  if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2790,14 +2804,14 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2790
2804
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
2791
2805
  }
2792
2806
 
2793
- static void start_keepalive_ping(void* arg, grpc_error* error) {
2807
+ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2794
2808
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2795
2809
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
2796
2810
  start_keepalive_ping_locked, t, nullptr),
2797
2811
  GRPC_ERROR_REF(error));
2798
2812
  }
2799
2813
 
2800
- static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2814
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2801
2815
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2802
2816
  if (error != GRPC_ERROR_NONE) {
2803
2817
  return;
@@ -2818,14 +2832,14 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2818
2832
  t->keepalive_ping_started = true;
2819
2833
  }
2820
2834
 
2821
- static void finish_keepalive_ping(void* arg, grpc_error* error) {
2835
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2822
2836
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2823
2837
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2824
2838
  finish_keepalive_ping_locked, t, nullptr),
2825
2839
  GRPC_ERROR_REF(error));
2826
2840
  }
2827
2841
 
2828
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2842
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2829
2843
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2830
2844
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2831
2845
  if (error == GRPC_ERROR_NONE) {
@@ -2856,7 +2870,7 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2856
2870
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
2857
2871
  }
2858
2872
 
2859
- static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2873
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error) {
2860
2874
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2861
2875
  t->combiner->Run(
2862
2876
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2864,7 +2878,8 @@ static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2864
2878
  GRPC_ERROR_REF(error));
2865
2879
  }
2866
2880
 
2867
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2881
+ static void keepalive_watchdog_fired_locked(void* arg,
2882
+ grpc_error_handle error) {
2868
2883
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2869
2884
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2870
2885
  if (error == GRPC_ERROR_NONE) {
@@ -2921,7 +2936,7 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2921
2936
  // BYTE STREAM
2922
2937
  //
2923
2938
 
2924
- static void reset_byte_stream(void* arg, grpc_error* error) {
2939
+ static void reset_byte_stream(void* arg, grpc_error_handle error) {
2925
2940
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
2926
2941
  s->pending_byte_stream = false;
2927
2942
  if (error == GRPC_ERROR_NONE) {
@@ -2952,8 +2967,8 @@ Chttp2IncomingByteStream::Chttp2IncomingByteStream(
2952
2967
  stream->byte_stream_error = GRPC_ERROR_NONE;
2953
2968
  }
2954
2969
 
2955
- void Chttp2IncomingByteStream::OrphanLocked(void* arg,
2956
- grpc_error* /*error_ignored*/) {
2970
+ void Chttp2IncomingByteStream::OrphanLocked(
2971
+ void* arg, grpc_error_handle /*error_ignored*/) {
2957
2972
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2958
2973
  grpc_chttp2_stream* s = bs->stream_;
2959
2974
  grpc_chttp2_transport* t = s->t;
@@ -2972,7 +2987,7 @@ void Chttp2IncomingByteStream::Orphan() {
2972
2987
  }
2973
2988
 
2974
2989
  void Chttp2IncomingByteStream::NextLocked(void* arg,
2975
- grpc_error* /*error_ignored*/) {
2990
+ grpc_error_handle /*error_ignored*/) {
2976
2991
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2977
2992
  grpc_chttp2_transport* t = bs->transport_;
2978
2993
  grpc_chttp2_stream* s = bs->stream_;
@@ -3042,9 +3057,9 @@ void Chttp2IncomingByteStream::MaybeCreateStreamDecompressionCtx() {
3042
3057
  }
3043
3058
  }
3044
3059
 
3045
- grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3060
+ grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3046
3061
  GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3047
- grpc_error* error;
3062
+ grpc_error_handle error;
3048
3063
  if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3049
3064
  if (!stream_->unprocessed_incoming_frames_decompressed &&
3050
3065
  stream_->stream_decompression_method !=
@@ -3087,7 +3102,7 @@ grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3087
3102
  return GRPC_ERROR_NONE;
3088
3103
  }
3089
3104
 
3090
- void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3105
+ void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3091
3106
  GPR_ASSERT(error != GRPC_ERROR_NONE);
3092
3107
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, stream_->on_next,
3093
3108
  GRPC_ERROR_REF(error));
@@ -3097,10 +3112,10 @@ void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3097
3112
  grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3098
3113
  }
3099
3114
 
3100
- grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3101
- grpc_slice* slice_out) {
3115
+ grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3116
+ grpc_slice* slice_out) {
3102
3117
  if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3103
- grpc_error* error =
3118
+ grpc_error_handle error =
3104
3119
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3105
3120
  transport_->combiner->Run(&stream_->reset_byte_stream,
3106
3121
  GRPC_ERROR_REF(error));
@@ -3115,8 +3130,8 @@ grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3115
3130
  }
3116
3131
  }
3117
3132
 
3118
- grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3119
- bool reset_on_error) {
3133
+ grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3134
+ bool reset_on_error) {
3120
3135
  if (error == GRPC_ERROR_NONE) {
3121
3136
  if (remaining_bytes_ != 0) {
3122
3137
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
@@ -3130,7 +3145,7 @@ grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3130
3145
  return error;
3131
3146
  }
3132
3147
 
3133
- void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3148
+ void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3134
3149
  GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3135
3150
  }
3136
3151
 
@@ -3162,14 +3177,14 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3162
3177
  }
3163
3178
  }
3164
3179
 
3165
- static void benign_reclaimer(void* arg, grpc_error* error) {
3180
+ static void benign_reclaimer(void* arg, grpc_error_handle error) {
3166
3181
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3167
3182
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked,
3168
3183
  benign_reclaimer_locked, t, nullptr),
3169
3184
  GRPC_ERROR_REF(error));
3170
3185
  }
3171
3186
 
3172
- static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3187
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3173
3188
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3174
3189
  if (error == GRPC_ERROR_NONE &&
3175
3190
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
@@ -3199,14 +3214,14 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3199
3214
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
3200
3215
  }
3201
3216
 
3202
- static void destructive_reclaimer(void* arg, grpc_error* error) {
3217
+ static void destructive_reclaimer(void* arg, grpc_error_handle error) {
3203
3218
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3204
3219
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked,
3205
3220
  destructive_reclaimer_locked, t, nullptr),
3206
3221
  GRPC_ERROR_REF(error));
3207
3222
  }
3208
3223
 
3209
- static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3224
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3210
3225
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3211
3226
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3212
3227
  t->destructive_reclaimer_registered = false;