grpc 1.50.0 → 1.51.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -26,7 +26,6 @@
26
26
  #include <stdlib.h>
27
27
 
28
28
  #include <algorithm>
29
- #include <cstdint>
30
29
  #include <string>
31
30
  #include <utility>
32
31
 
@@ -49,10 +48,11 @@
49
48
  #include "src/core/ext/transport/chttp2/transport/internal.h"
50
49
  #include "src/core/lib/debug/trace.h"
51
50
  #include "src/core/lib/experiments/experiments.h"
51
+ #include "src/core/lib/gprpp/status_helper.h"
52
52
  #include "src/core/lib/iomgr/closure.h"
53
53
  #include "src/core/lib/iomgr/combiner.h"
54
54
  #include "src/core/lib/slice/slice.h"
55
- #include "src/core/lib/slice/slice_refcount_base.h"
55
+ #include "src/core/lib/slice/slice_refcount.h"
56
56
  #include "src/core/lib/transport/http2_errors.h"
57
57
  #include "src/core/lib/transport/parsed_metadata.h"
58
58
  #include "src/core/lib/transport/transport.h"
@@ -586,15 +586,14 @@ class HPackParser::Input {
586
586
  // Extract the parse error, leaving the current error as NONE.
587
587
  grpc_error_handle TakeError() {
588
588
  grpc_error_handle out = error_;
589
- error_ = GRPC_ERROR_NONE;
589
+ error_ = absl::OkStatus();
590
590
  return out;
591
591
  }
592
592
 
593
593
  // Set the current error - allows the rest of the code not to need to pass
594
594
  // around StatusOr<> which would be prohibitive here.
595
595
  GPR_ATTRIBUTE_NOINLINE void SetError(grpc_error_handle error) {
596
- if (!GRPC_ERROR_IS_NONE(error_) || eof_error_) {
597
- GRPC_ERROR_UNREF(error);
596
+ if (!error_.ok() || eof_error_) {
598
597
  return;
599
598
  }
600
599
  error_ = error;
@@ -606,7 +605,7 @@ class HPackParser::Input {
606
605
  template <typename F, typename T>
607
606
  GPR_ATTRIBUTE_NOINLINE T MaybeSetErrorAndReturn(F error_factory,
608
607
  T return_value) {
609
- if (!GRPC_ERROR_IS_NONE(error_) || eof_error_) return return_value;
608
+ if (!error_.ok() || eof_error_) return return_value;
610
609
  error_ = error_factory();
611
610
  begin_ = end_;
612
611
  return return_value;
@@ -616,7 +615,7 @@ class HPackParser::Input {
616
615
  // is a common case)
617
616
  template <typename T>
618
617
  T UnexpectedEOF(T return_value) {
619
- if (!GRPC_ERROR_IS_NONE(error_)) return return_value;
618
+ if (!error_.ok()) return return_value;
620
619
  eof_error_ = true;
621
620
  return return_value;
622
621
  }
@@ -633,7 +632,7 @@ class HPackParser::Input {
633
632
  uint8_t last_byte) {
634
633
  return MaybeSetErrorAndReturn(
635
634
  [value, last_byte] {
636
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
635
+ return GRPC_ERROR_CREATE(absl::StrFormat(
637
636
  "integer overflow in hpack integer decoding: have 0x%08x, "
638
637
  "got byte 0x%02x on byte 5",
639
638
  value, last_byte));
@@ -650,7 +649,7 @@ class HPackParser::Input {
650
649
  // Frontier denotes the first byte past successfully processed input
651
650
  const uint8_t* frontier_;
652
651
  // Current error
653
- grpc_error_handle error_ = GRPC_ERROR_NONE;
652
+ grpc_error_handle error_;
654
653
  // If the error was EOF, we flag it here..
655
654
  bool eof_error_ = false;
656
655
  };
@@ -831,10 +830,7 @@ class HPackParser::String {
831
830
  }
832
831
  if (!result.has_value()) {
833
832
  return input->MaybeSetErrorAndReturn(
834
- [] {
835
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
836
- "illegal base64 encoding");
837
- },
833
+ [] { return GRPC_ERROR_CREATE("illegal base64 encoding"); },
838
834
  absl::optional<String>());
839
835
  }
840
836
  return String(std::move(*result));
@@ -1016,11 +1012,7 @@ class HPackParser::Parser {
1016
1012
  if (cur == 0x80) {
1017
1013
  // illegal value.
1018
1014
  return input_->MaybeSetErrorAndReturn(
1019
- [] {
1020
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1021
- "Illegal hpack op code");
1022
- },
1023
- false);
1015
+ [] { return GRPC_ERROR_CREATE("Illegal hpack op code"); }, false);
1024
1016
  }
1025
1017
  ABSL_FALLTHROUGH_INTENDED;
1026
1018
  case 9:
@@ -1084,7 +1076,7 @@ class HPackParser::Parser {
1084
1076
  auto r = EmitHeader(*md);
1085
1077
  // Add to the hpack table
1086
1078
  grpc_error_handle err = table_->Add(std::move(*md));
1087
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(err))) {
1079
+ if (GPR_UNLIKELY(!err.ok())) {
1088
1080
  input_->SetError(err);
1089
1081
  return false;
1090
1082
  };
@@ -1172,14 +1164,14 @@ class HPackParser::Parser {
1172
1164
  if (*dynamic_table_updates_allowed_ == 0) {
1173
1165
  return input_->MaybeSetErrorAndReturn(
1174
1166
  [] {
1175
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1167
+ return GRPC_ERROR_CREATE(
1176
1168
  "More than two max table size changes in a single frame");
1177
1169
  },
1178
1170
  false);
1179
1171
  }
1180
1172
  (*dynamic_table_updates_allowed_)--;
1181
1173
  grpc_error_handle err = table_->SetCurrentTableSize(*size);
1182
- if (!GRPC_ERROR_IS_NONE(err)) {
1174
+ if (!err.ok()) {
1183
1175
  input_->SetError(err);
1184
1176
  return false;
1185
1177
  }
@@ -1193,11 +1185,10 @@ class HPackParser::Parser {
1193
1185
  return input_->MaybeSetErrorAndReturn(
1194
1186
  [this, index] {
1195
1187
  return grpc_error_set_int(
1196
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1197
- "Invalid HPACK index received"),
1198
- GRPC_ERROR_INT_INDEX,
1199
- static_cast<intptr_t>(index)),
1200
- GRPC_ERROR_INT_SIZE,
1188
+ grpc_error_set_int(
1189
+ GRPC_ERROR_CREATE("Invalid HPACK index received"),
1190
+ StatusIntProperty::kIndex, static_cast<intptr_t>(index)),
1191
+ StatusIntProperty::kSize,
1201
1192
  static_cast<intptr_t>(this->table_->num_entries()));
1202
1193
  },
1203
1194
  std::move(result));
@@ -1214,9 +1205,8 @@ class HPackParser::Parser {
1214
1205
  return input_->MaybeSetErrorAndReturn(
1215
1206
  [] {
1216
1207
  return grpc_error_set_int(
1217
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1218
- "received initial metadata size exceeds limit"),
1219
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
1208
+ GRPC_ERROR_CREATE("received initial metadata size exceeds limit"),
1209
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_RESOURCE_EXHAUSTED);
1220
1210
  },
1221
1211
  false);
1222
1212
  }
@@ -1259,6 +1249,9 @@ void HPackParser::BeginFrame(grpc_metadata_batch* metadata_buffer,
1259
1249
  uint32_t metadata_size_limit, Boundary boundary,
1260
1250
  Priority priority, LogInfo log_info) {
1261
1251
  metadata_buffer_ = metadata_buffer;
1252
+ if (metadata_buffer != nullptr) {
1253
+ metadata_buffer->Set(GrpcStatusFromWire(), true);
1254
+ }
1262
1255
  boundary_ = boundary;
1263
1256
  priority_ = priority;
1264
1257
  dynamic_table_updates_allowed_ = 2;
@@ -1282,15 +1275,15 @@ grpc_error_handle HPackParser::Parse(const grpc_slice& slice, bool is_last) {
1282
1275
 
1283
1276
  grpc_error_handle HPackParser::ParseInput(Input input, bool is_last) {
1284
1277
  if (ParseInputInner(&input)) {
1285
- return GRPC_ERROR_NONE;
1278
+ return absl::OkStatus();
1286
1279
  }
1287
1280
  if (input.eof_error()) {
1288
1281
  if (GPR_UNLIKELY(is_last && is_boundary())) {
1289
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1282
+ return GRPC_ERROR_CREATE(
1290
1283
  "Incomplete header at the end of a header/continuation sequence");
1291
1284
  }
1292
1285
  unparsed_bytes_ = std::vector<uint8_t>(input.frontier(), input.end_ptr());
1293
- return GRPC_ERROR_NONE;
1286
+ return absl::OkStatus();
1294
1287
  }
1295
1288
  return input.TakeError();
1296
1289
  }
@@ -1338,7 +1331,7 @@ static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
1338
1331
  grpc_chttp2_add_rst_stream_to_next_write(t, s->id, GRPC_HTTP2_NO_ERROR,
1339
1332
  &s->stats.outgoing);
1340
1333
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM);
1341
- grpc_chttp2_mark_stream_closed(t, s, true, true, GRPC_ERROR_NONE);
1334
+ grpc_chttp2_mark_stream_closed(t, s, true, true, absl::OkStatus());
1342
1335
  }
1343
1336
  GRPC_CHTTP2_STREAM_UNREF(s, "final_rst");
1344
1337
  }
@@ -1353,7 +1346,7 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1353
1346
  s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
1354
1347
  }
1355
1348
  grpc_error_handle error = parser->Parse(slice, is_last != 0);
1356
- if (!GRPC_ERROR_IS_NONE(error)) {
1349
+ if (!error.ok()) {
1357
1350
  return error;
1358
1351
  }
1359
1352
  if (is_last) {
@@ -1362,8 +1355,7 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1362
1355
  if (s != nullptr) {
1363
1356
  if (parser->is_boundary()) {
1364
1357
  if (s->header_frames_received == 2) {
1365
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1366
- "Too many trailer frames");
1358
+ return GRPC_ERROR_CREATE("Too many trailer frames");
1367
1359
  }
1368
1360
  s->published_metadata[s->header_frames_received] =
1369
1361
  GRPC_METADATA_PUBLISHED_FROM_WIRE;
@@ -1379,12 +1371,12 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1379
1371
  GRPC_CHTTP2_STREAM_REF(s, "final_rst");
1380
1372
  t->combiner->FinallyRun(
1381
1373
  GRPC_CLOSURE_CREATE(force_client_rst_stream, s, nullptr),
1382
- GRPC_ERROR_NONE);
1374
+ absl::OkStatus());
1383
1375
  }
1384
- grpc_chttp2_mark_stream_closed(t, s, true, false, GRPC_ERROR_NONE);
1376
+ grpc_chttp2_mark_stream_closed(t, s, true, false, absl::OkStatus());
1385
1377
  }
1386
1378
  }
1387
1379
  parser->FinishFrame();
1388
1380
  }
1389
- return GRPC_ERROR_NONE;
1381
+ return absl::OkStatus();
1390
1382
  }
@@ -27,6 +27,7 @@
27
27
  #include <cstring>
28
28
  #include <utility>
29
29
 
30
+ #include "absl/status/status.h"
30
31
  #include "absl/strings/str_format.h"
31
32
  #include "absl/strings/string_view.h"
32
33
 
@@ -100,10 +101,10 @@ void HPackTable::SetMaxBytes(uint32_t max_bytes) {
100
101
 
101
102
  grpc_error_handle HPackTable::SetCurrentTableSize(uint32_t bytes) {
102
103
  if (current_table_bytes_ == bytes) {
103
- return GRPC_ERROR_NONE;
104
+ return absl::OkStatus();
104
105
  }
105
106
  if (bytes > max_bytes_) {
106
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
107
+ return GRPC_ERROR_CREATE(absl::StrFormat(
107
108
  "Attempt to make hpack table %d bytes when max is %d bytes", bytes,
108
109
  max_bytes_));
109
110
  }
@@ -117,12 +118,12 @@ grpc_error_handle HPackTable::SetCurrentTableSize(uint32_t bytes) {
117
118
  uint32_t new_cap = std::max(hpack_constants::EntriesForBytes(bytes),
118
119
  hpack_constants::kInitialTableEntries);
119
120
  entries_.Rebuild(new_cap);
120
- return GRPC_ERROR_NONE;
121
+ return absl::OkStatus();
121
122
  }
122
123
 
123
124
  grpc_error_handle HPackTable::Add(Memento md) {
124
125
  if (current_table_bytes_ > max_bytes_) {
125
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
126
+ return GRPC_ERROR_CREATE(absl::StrFormat(
126
127
  "HPACK max table size reduced to %d but not reflected by hpack "
127
128
  "stream (still at %d)",
128
129
  max_bytes_, current_table_bytes_));
@@ -140,7 +141,7 @@ grpc_error_handle HPackTable::Add(Memento md) {
140
141
  while (entries_.num_entries()) {
141
142
  EvictOne();
142
143
  }
143
- return GRPC_ERROR_NONE;
144
+ return absl::OkStatus();
144
145
  }
145
146
 
146
147
  // evict entries to ensure no overflow
@@ -152,7 +153,7 @@ grpc_error_handle HPackTable::Add(Memento md) {
152
153
  // copy the finalized entry in
153
154
  mem_used_ += md.transport_size();
154
155
  entries_.Put(std::move(md));
155
- return GRPC_ERROR_NONE;
156
+ return absl::OkStatus();
156
157
  }
157
158
 
158
159
  namespace {
@@ -60,6 +60,7 @@
60
60
  #include "src/core/lib/resource_quota/arena.h"
61
61
  #include "src/core/lib/resource_quota/memory_quota.h"
62
62
  #include "src/core/lib/slice/slice_buffer.h"
63
+ #include "src/core/lib/surface/init_internally.h"
63
64
  #include "src/core/lib/transport/connectivity_state.h"
64
65
  #include "src/core/lib/transport/metadata_batch.h"
65
66
  #include "src/core/lib/transport/transport.h"
@@ -236,7 +237,21 @@ typedef enum {
236
237
  GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED,
237
238
  } grpc_chttp2_keepalive_state;
238
239
 
239
- struct grpc_chttp2_transport {
240
+ struct grpc_chttp2_transport
241
+ // TODO(ctiller): #31319 fixed a crash on Linux & Mac whereby iomgr was
242
+ // accessed after shutdown by chttp2. We've not seen similar behavior on
243
+ // Windows afaik, but this fix has exposed another refcounting bug whereby
244
+ // transports leak on Windows and prevent test shutdown.
245
+ // This hack attempts to compromise between two things that are blocking our CI
246
+ // from giving us a good quality signal, but are unlikely to be problems for
247
+ // most customers. We should continue tracking down what's causing the failure,
248
+ // but this gives us some runway to do so - and given that we're actively
249
+ // working on removing the problematic code paths, it may be that effort brings
250
+ // the result we need.
251
+ #ifndef GPR_WINDOWS
252
+ : public grpc_core::KeepsGrpcInitialized
253
+ #endif
254
+ {
240
255
  grpc_chttp2_transport(const grpc_core::ChannelArgs& channel_args,
241
256
  grpc_endpoint* ep, bool is_client);
242
257
  ~grpc_chttp2_transport();
@@ -261,7 +276,7 @@ struct grpc_chttp2_transport {
261
276
  /** is the transport destroying itself? */
262
277
  uint8_t destroying = false;
263
278
  /** has the upper layer closed the transport? */
264
- grpc_error_handle closed_with_error = GRPC_ERROR_NONE;
279
+ grpc_error_handle closed_with_error;
265
280
 
266
281
  /** is there a read request to the endpoint outstanding? */
267
282
  uint8_t endpoint_reading = 1;
@@ -309,8 +324,8 @@ struct grpc_chttp2_transport {
309
324
  uint32_t write_buffer_size = grpc_core::chttp2::kDefaultWindow;
310
325
 
311
326
  /** Set to a grpc_error object if a goaway frame is received. By default, set
312
- * to GRPC_ERROR_NONE */
313
- grpc_error_handle goaway_error = GRPC_ERROR_NONE;
327
+ * to absl::OkStatus() */
328
+ grpc_error_handle goaway_error;
314
329
 
315
330
  grpc_chttp2_sent_goaway_state sent_goaway_state = GRPC_CHTTP2_NO_GOAWAY_SEND;
316
331
 
@@ -391,7 +406,7 @@ struct grpc_chttp2_transport {
391
406
 
392
407
  /* if non-NULL, close the transport with this error when writes are finished
393
408
  */
394
- grpc_error_handle close_transport_on_writes_finished = GRPC_ERROR_NONE;
409
+ grpc_error_handle close_transport_on_writes_finished;
395
410
 
396
411
  /* a list of closures to run after writes are finished */
397
412
  grpc_closure_list run_after_write = GRPC_CLOSURE_LIST_INIT;
@@ -499,6 +514,7 @@ struct grpc_chttp2_stream {
499
514
  grpc_metadata_batch* recv_initial_metadata;
500
515
  grpc_closure* recv_initial_metadata_ready = nullptr;
501
516
  bool* trailing_metadata_available = nullptr;
517
+ bool parsed_trailers_only = false;
502
518
  absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
503
519
  uint32_t* recv_message_flags = nullptr;
504
520
  bool* call_failed_before_recv_message = nullptr;
@@ -527,9 +543,9 @@ struct grpc_chttp2_stream {
527
543
  bool eos_sent = false;
528
544
 
529
545
  /** the error that resulted in this stream being read-closed */
530
- grpc_error_handle read_closed_error = GRPC_ERROR_NONE;
546
+ grpc_error_handle read_closed_error;
531
547
  /** the error that resulted in this stream being write-closed */
532
- grpc_error_handle write_closed_error = GRPC_ERROR_NONE;
548
+ grpc_error_handle write_closed_error;
533
549
 
534
550
  grpc_published_metadata_method published_metadata[2] = {};
535
551
  bool final_metadata_requested = false;
@@ -543,7 +559,7 @@ struct grpc_chttp2_stream {
543
559
  grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture();
544
560
 
545
561
  /** saw some stream level error */
546
- grpc_error_handle forced_close_error = GRPC_ERROR_NONE;
562
+ grpc_error_handle forced_close_error;
547
563
  /** how many header frames have we received? */
548
564
  uint8_t header_frames_received = 0;
549
565
  /** number of bytes received - reset at end of parse thread execution */