grpc 1.51.0 → 1.52.0.pre2

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 (886) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +91 -23
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/event_engine.h +17 -3
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +14 -2
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -3
  14. data/include/grpc/grpc_posix.h +1 -1
  15. data/include/grpc/impl/codegen/atm.h +3 -71
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  18. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  19. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  21. data/include/grpc/impl/codegen/compression_types.h +3 -82
  22. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  23. data/include/grpc/impl/codegen/fork.h +4 -25
  24. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  25. data/include/grpc/impl/codegen/grpc_types.h +3 -787
  26. data/include/grpc/impl/codegen/log.h +3 -86
  27. data/include/grpc/impl/codegen/port_platform.h +3 -755
  28. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  29. data/include/grpc/impl/codegen/slice.h +3 -106
  30. data/include/grpc/impl/codegen/status.h +4 -131
  31. data/include/grpc/impl/codegen/sync.h +3 -42
  32. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  33. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  34. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  35. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  36. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  37. data/include/grpc/impl/compression_types.h +109 -0
  38. data/include/grpc/impl/connectivity_state.h +47 -0
  39. data/include/grpc/impl/grpc_types.h +824 -0
  40. data/include/grpc/impl/propagation_bits.h +54 -0
  41. data/include/grpc/impl/slice_type.h +112 -0
  42. data/include/grpc/load_reporting.h +1 -1
  43. data/include/grpc/module.modulemap +5 -1
  44. data/include/grpc/slice.h +1 -1
  45. data/include/grpc/status.h +131 -1
  46. data/include/grpc/support/atm.h +70 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  48. data/include/grpc/support/atm_gcc_sync.h +58 -1
  49. data/include/grpc/support/atm_windows.h +105 -1
  50. data/include/grpc/support/log.h +87 -1
  51. data/include/grpc/support/log_windows.h +1 -1
  52. data/include/grpc/support/port_platform.h +767 -1
  53. data/include/grpc/support/string_util.h +1 -1
  54. data/include/grpc/support/sync.h +35 -2
  55. data/include/grpc/support/sync_abseil.h +11 -1
  56. data/include/grpc/support/sync_custom.h +13 -1
  57. data/include/grpc/support/sync_generic.h +24 -1
  58. data/include/grpc/support/sync_posix.h +27 -1
  59. data/include/grpc/support/sync_windows.h +15 -1
  60. data/include/grpc/support/time.h +25 -2
  61. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  62. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +9 -9
  63. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -1
  64. data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
  65. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -21
  67. data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +45 -24
  69. data/src/core/ext/filters/client_channel/client_channel.cc +40 -31
  70. data/src/core/ext/filters/client_channel/client_channel.h +7 -6
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -17
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +17 -17
  75. data/src/core/ext/filters/client_channel/config_selector.h +16 -20
  76. data/src/core/ext/filters/client_channel/dynamic_filters.cc +8 -8
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +1 -1
  79. data/src/core/ext/filters/client_channel/http_proxy.cc +39 -39
  80. data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
  81. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
  83. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
  84. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +58 -130
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -116
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +17 -17
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
  94. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +5 -5
  95. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +173 -196
  96. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +10 -19
  97. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -97
  98. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +14 -13
  99. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
  100. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +98 -84
  101. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -8
  102. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
  103. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +21 -35
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +45 -39
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +11 -23
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +16 -49
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +31 -21
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +4 -4
  111. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
  112. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +0 -1
  113. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
  114. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +21 -21
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +60 -59
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -66
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +50 -51
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  121. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
  122. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  123. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  124. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +0 -1
  125. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -33
  126. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
  127. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +59 -73
  128. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
  129. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -1
  130. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  131. data/src/core/ext/filters/client_channel/retry_throttle.cc +19 -21
  132. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -18
  133. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  134. data/src/core/ext/filters/client_channel/subchannel.cc +139 -155
  135. data/src/core/ext/filters/client_channel/subchannel.h +15 -38
  136. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
  137. data/src/core/ext/filters/deadline/deadline_filter.cc +21 -3
  138. data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
  139. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -1
  140. data/src/core/ext/filters/http/client/http_client_filter.cc +20 -21
  141. data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
  142. data/src/core/ext/filters/http/client_authority_filter.cc +18 -18
  143. data/src/core/ext/filters/http/client_authority_filter.h +18 -18
  144. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
  145. data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
  146. data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
  147. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -18
  148. data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
  149. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
  150. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  151. data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
  152. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -4
  153. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
  154. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  155. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  156. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  157. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  158. data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
  159. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +54 -44
  160. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
  161. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +24 -25
  162. data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
  163. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +17 -17
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
  165. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
  167. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +66 -35
  168. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
  169. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  170. data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
  171. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  172. data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
  173. data/src/core/ext/transport/chttp2/transport/flow_control.cc +75 -38
  174. data/src/core/ext/transport/chttp2/transport/flow_control.h +56 -31
  175. data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
  176. data/src/core/ext/transport/chttp2/transport/frame_data.cc +17 -17
  177. data/src/core/ext/transport/chttp2/transport/frame_data.h +22 -22
  178. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +23 -23
  179. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
  180. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +21 -21
  181. data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
  182. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -18
  183. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
  184. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  185. data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
  186. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +17 -17
  187. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
  188. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +129 -176
  189. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +39 -58
  190. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +69 -111
  191. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
  192. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -20
  193. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
  194. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  195. data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
  196. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  197. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  198. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  199. data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
  200. data/src/core/ext/transport/chttp2/transport/internal.h +170 -163
  201. data/src/core/ext/transport/chttp2/transport/parsing.cc +96 -28
  202. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  203. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  204. data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
  205. data/src/core/ext/transport/chttp2/transport/varint.cc +17 -17
  206. data/src/core/ext/transport/chttp2/transport/varint.h +24 -24
  207. data/src/core/ext/transport/chttp2/transport/writing.cc +45 -41
  208. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  209. data/src/core/ext/transport/inproc/inproc_transport.cc +25 -25
  210. data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
  211. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  212. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  213. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  214. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  215. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  216. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  217. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  218. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
  219. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
  220. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  221. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  222. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  223. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  224. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  225. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  226. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  227. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  228. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  229. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  230. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  231. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  232. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  233. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  234. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
  235. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  236. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  237. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  238. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  239. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  240. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  242. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  244. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  245. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  246. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  248. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  249. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  250. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  251. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  252. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  253. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  254. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  255. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  256. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  257. data/src/core/ext/xds/xds_api.cc +5 -27
  258. data/src/core/ext/xds/xds_api.h +2 -1
  259. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  260. data/src/core/ext/xds/xds_channel_args.h +1 -1
  261. data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
  262. data/src/core/ext/xds/xds_client.cc +14 -6
  263. data/src/core/ext/xds/xds_client.h +6 -3
  264. data/src/core/ext/xds/xds_client_grpc.cc +26 -0
  265. data/src/core/ext/xds/xds_client_grpc.h +1 -1
  266. data/src/core/ext/xds/xds_client_stats.cc +17 -17
  267. data/src/core/ext/xds/xds_client_stats.h +18 -18
  268. data/src/core/ext/xds/xds_cluster.cc +94 -46
  269. data/src/core/ext/xds/xds_cluster.h +44 -23
  270. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +30 -50
  271. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +14 -9
  272. data/src/core/ext/xds/xds_common_types.cc +4 -3
  273. data/src/core/ext/xds/xds_endpoint.cc +8 -2
  274. data/src/core/ext/xds/xds_health_status.cc +80 -0
  275. data/src/core/ext/xds/xds_health_status.h +82 -0
  276. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -6
  277. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  278. data/src/core/ext/xds/xds_http_filters.cc +11 -6
  279. data/src/core/ext/xds/xds_http_filters.h +5 -5
  280. data/src/core/ext/xds/xds_http_rbac_filter.cc +7 -6
  281. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  282. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  283. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  284. data/src/core/ext/xds/xds_lb_policy_registry.cc +0 -4
  285. data/src/core/ext/xds/xds_listener.cc +14 -28
  286. data/src/core/ext/xds/xds_listener.h +2 -0
  287. data/src/core/ext/xds/xds_resource_type_impl.h +8 -6
  288. data/src/core/ext/xds/xds_route_config.cc +501 -529
  289. data/src/core/ext/xds/xds_route_config.h +29 -18
  290. data/src/core/ext/xds/xds_server_config_fetcher.cc +12 -24
  291. data/src/core/ext/xds/xds_transport_grpc.cc +2 -2
  292. data/src/core/ext/xds/xds_transport_grpc.h +1 -1
  293. data/src/core/lib/address_utils/parse_address.cc +19 -19
  294. data/src/core/lib/address_utils/parse_address.h +32 -32
  295. data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
  296. data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
  297. data/src/core/lib/avl/avl.h +4 -4
  298. data/src/core/lib/backoff/backoff.cc +17 -17
  299. data/src/core/lib/backoff/backoff.h +18 -18
  300. data/src/core/lib/channel/call_tracer.h +10 -1
  301. data/src/core/lib/channel/channel_args.cc +19 -20
  302. data/src/core/lib/channel/channel_args.h +43 -42
  303. data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
  304. data/src/core/lib/channel/channel_stack.cc +39 -38
  305. data/src/core/lib/channel/channel_stack.h +127 -127
  306. data/src/core/lib/channel/channel_stack_builder.cc +17 -17
  307. data/src/core/lib/channel/channel_stack_builder_impl.cc +18 -18
  308. data/src/core/lib/channel/channel_trace.cc +17 -17
  309. data/src/core/lib/channel/channel_trace.h +19 -19
  310. data/src/core/lib/channel/channelz.cc +17 -18
  311. data/src/core/lib/channel/channelz.h +26 -26
  312. data/src/core/lib/channel/channelz_registry.cc +17 -17
  313. data/src/core/lib/channel/channelz_registry.h +18 -18
  314. data/src/core/lib/channel/connected_channel.cc +43 -34
  315. data/src/core/lib/channel/connected_channel.h +18 -18
  316. data/src/core/lib/channel/context.h +18 -18
  317. data/src/core/lib/channel/promise_based_filter.cc +191 -68
  318. data/src/core/lib/channel/promise_based_filter.h +10 -1
  319. data/src/core/lib/channel/status_util.cc +35 -17
  320. data/src/core/lib/channel/status_util.h +26 -19
  321. data/src/core/lib/compression/compression.cc +19 -19
  322. data/src/core/lib/compression/compression_internal.cc +41 -48
  323. data/src/core/lib/compression/compression_internal.h +22 -22
  324. data/src/core/lib/compression/message_compress.cc +21 -21
  325. data/src/core/lib/compression/message_compress.h +25 -25
  326. data/src/core/lib/config/core_configuration.h +1 -1
  327. data/src/core/lib/debug/stats.cc +17 -17
  328. data/src/core/lib/debug/stats.h +17 -17
  329. data/src/core/lib/debug/trace.cc +18 -18
  330. data/src/core/lib/debug/trace.h +19 -19
  331. data/src/core/lib/event_engine/executor/executor.h +1 -1
  332. data/src/core/lib/event_engine/forkable.h +1 -1
  333. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +27 -31
  334. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -2
  335. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +36 -37
  336. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  337. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
  338. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  339. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
  340. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -2
  341. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +46 -46
  342. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +10 -12
  343. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
  344. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +79 -41
  345. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -9
  346. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -40
  347. data/src/core/lib/event_engine/posix_engine/posix_engine.h +14 -14
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -2
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
  350. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
  351. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
  352. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +55 -283
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +4 -49
  355. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  356. data/src/core/lib/event_engine/posix_engine/timer.h +87 -87
  357. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  358. data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
  359. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +19 -20
  360. data/src/core/lib/event_engine/posix_engine/timer_manager.h +20 -20
  361. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +39 -8
  362. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +46 -40
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +8 -7
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +6 -7
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  367. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +28 -28
  368. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +4 -4
  369. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
  370. data/src/core/lib/event_engine/socket_notifier.h +1 -1
  371. data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
  372. data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
  373. data/src/core/lib/event_engine/thread_pool.cc +19 -18
  374. data/src/core/lib/event_engine/thread_pool.h +17 -17
  375. data/src/core/lib/event_engine/time_util.h +1 -1
  376. data/src/core/lib/event_engine/windows/iocp.cc +13 -12
  377. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  378. data/src/core/lib/event_engine/windows/win_socket.cc +2 -2
  379. data/src/core/lib/event_engine/windows/windows_engine.cc +8 -8
  380. data/src/core/lib/event_engine/windows/windows_engine.h +1 -1
  381. data/src/core/lib/experiments/experiments.cc +5 -16
  382. data/src/core/lib/experiments/experiments.h +7 -12
  383. data/src/core/lib/gpr/alloc.cc +19 -17
  384. data/src/core/lib/gpr/alloc.h +18 -18
  385. data/src/core/lib/gpr/atm.cc +17 -17
  386. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  387. data/src/core/lib/gpr/cpu_linux.cc +22 -21
  388. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  389. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  390. data/src/core/lib/gpr/log.cc +27 -19
  391. data/src/core/lib/gpr/log_android.cc +22 -20
  392. data/src/core/lib/gpr/log_linux.cc +21 -20
  393. data/src/core/lib/gpr/log_posix.cc +20 -19
  394. data/src/core/lib/gpr/log_windows.cc +25 -24
  395. data/src/core/lib/gpr/spinlock.h +18 -18
  396. data/src/core/lib/gpr/string.cc +25 -24
  397. data/src/core/lib/gpr/string.h +57 -57
  398. data/src/core/lib/gpr/string_posix.cc +24 -24
  399. data/src/core/lib/gpr/string_util_windows.cc +22 -22
  400. data/src/core/lib/gpr/string_windows.cc +24 -24
  401. data/src/core/lib/gpr/sync.cc +25 -25
  402. data/src/core/lib/gpr/sync_abseil.cc +22 -20
  403. data/src/core/lib/gpr/sync_posix.cc +23 -21
  404. data/src/core/lib/gpr/sync_windows.cc +29 -27
  405. data/src/core/lib/gpr/time.cc +23 -21
  406. data/src/core/lib/gpr/time_posix.cc +35 -30
  407. data/src/core/lib/gpr/time_precise.cc +22 -22
  408. data/src/core/lib/gpr/time_precise.h +18 -19
  409. data/src/core/lib/gpr/time_windows.cc +25 -22
  410. data/src/core/lib/gpr/tmpfile.h +22 -22
  411. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  412. data/src/core/lib/gpr/tmpfile_posix.cc +19 -18
  413. data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
  414. data/src/core/lib/gpr/useful.h +40 -27
  415. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  416. data/src/core/lib/gprpp/atomic_utils.h +18 -18
  417. data/src/core/lib/gprpp/bitset.h +24 -0
  418. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/gprpp/crash.cc} +15 -14
  419. data/src/core/lib/gprpp/crash.h +34 -0
  420. data/src/core/lib/gprpp/debug_location.h +18 -18
  421. data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
  422. data/src/core/lib/gprpp/env.h +20 -20
  423. data/src/core/lib/gprpp/env_linux.cc +21 -21
  424. data/src/core/lib/gprpp/env_posix.cc +18 -18
  425. data/src/core/lib/gprpp/env_windows.cc +18 -18
  426. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  427. data/src/core/lib/gprpp/examine_stack.h +18 -18
  428. data/src/core/lib/gprpp/fork.cc +21 -22
  429. data/src/core/lib/gprpp/fork.h +22 -22
  430. data/src/core/lib/gprpp/global_config.h +18 -18
  431. data/src/core/lib/gprpp/global_config_custom.h +18 -18
  432. data/src/core/lib/gprpp/global_config_env.cc +17 -17
  433. data/src/core/lib/gprpp/global_config_env.h +23 -23
  434. data/src/core/lib/gprpp/global_config_generic.h +18 -18
  435. data/src/core/lib/gprpp/host_port.cc +26 -26
  436. data/src/core/lib/gprpp/host_port.h +29 -28
  437. data/src/core/lib/gprpp/manual_constructor.h +18 -17
  438. data/src/core/lib/gprpp/memory.h +18 -18
  439. data/src/core/lib/gprpp/mpscq.cc +17 -17
  440. data/src/core/lib/gprpp/mpscq.h +18 -18
  441. data/src/core/lib/gprpp/no_destruct.h +1 -0
  442. data/src/core/lib/gprpp/orphanable.h +18 -18
  443. data/src/core/lib/gprpp/ref_counted.h +18 -18
  444. data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
  445. data/src/core/lib/gprpp/stat_windows.cc +1 -0
  446. data/src/core/lib/gprpp/status_helper.cc +4 -3
  447. data/src/core/lib/gprpp/sync.h +20 -20
  448. data/src/core/lib/gprpp/table.h +1 -0
  449. data/src/core/lib/gprpp/thd.h +19 -19
  450. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  451. data/src/core/lib/gprpp/thd_windows.cc +25 -24
  452. data/src/core/lib/gprpp/time.cc +13 -7
  453. data/src/core/lib/gprpp/time.h +0 -1
  454. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  455. data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
  456. data/src/core/lib/gprpp/time_util.h +1 -1
  457. data/src/core/lib/gprpp/unique_type_name.h +18 -18
  458. data/src/core/lib/handshaker/proxy_mapper.h +18 -18
  459. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  460. data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
  461. data/src/core/lib/http/format_request.cc +18 -18
  462. data/src/core/lib/http/format_request.h +18 -18
  463. data/src/core/lib/http/httpcli.cc +17 -17
  464. data/src/core/lib/http/httpcli.h +20 -21
  465. data/src/core/lib/http/httpcli_security_connector.cc +18 -19
  466. data/src/core/lib/http/parser.cc +22 -22
  467. data/src/core/lib/http/parser.h +32 -32
  468. data/src/core/lib/iomgr/block_annotate.h +21 -21
  469. data/src/core/lib/iomgr/buffer_list.cc +52 -21
  470. data/src/core/lib/iomgr/buffer_list.h +63 -57
  471. data/src/core/lib/iomgr/call_combiner.cc +18 -17
  472. data/src/core/lib/iomgr/call_combiner.h +18 -18
  473. data/src/core/lib/iomgr/cfstream_handle.cc +20 -20
  474. data/src/core/lib/iomgr/cfstream_handle.h +22 -22
  475. data/src/core/lib/iomgr/closure.h +42 -41
  476. data/src/core/lib/iomgr/combiner.cc +18 -17
  477. data/src/core/lib/iomgr/combiner.h +18 -18
  478. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  479. data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
  480. data/src/core/lib/iomgr/endpoint.cc +17 -17
  481. data/src/core/lib/iomgr/endpoint.h +46 -46
  482. data/src/core/lib/iomgr/endpoint_cfstream.cc +18 -18
  483. data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
  484. data/src/core/lib/iomgr/endpoint_pair.h +18 -18
  485. data/src/core/lib/iomgr/endpoint_pair_posix.cc +18 -17
  486. data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
  487. data/src/core/lib/iomgr/error.cc +22 -19
  488. data/src/core/lib/iomgr/error.h +20 -21
  489. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  490. data/src/core/lib/iomgr/error_cfstream.h +19 -19
  491. data/src/core/lib/iomgr/ev_apple.cc +17 -17
  492. data/src/core/lib/iomgr/ev_apple.h +17 -17
  493. data/src/core/lib/iomgr/ev_epoll1_linux.cc +182 -170
  494. data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
  495. data/src/core/lib/iomgr/ev_poll_posix.cc +185 -174
  496. data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
  497. data/src/core/lib/iomgr/ev_posix.cc +36 -28
  498. data/src/core/lib/iomgr/ev_posix.h +85 -81
  499. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  500. data/src/core/lib/iomgr/exec_ctx.cc +31 -30
  501. data/src/core/lib/iomgr/exec_ctx.h +139 -138
  502. data/src/core/lib/iomgr/executor.cc +20 -19
  503. data/src/core/lib/iomgr/executor.h +24 -24
  504. data/src/core/lib/iomgr/fork_posix.cc +24 -22
  505. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  506. data/src/core/lib/iomgr/gethostname.h +18 -18
  507. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  508. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  509. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  510. data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
  511. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  512. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  513. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  514. data/src/core/lib/iomgr/internal_errqueue.h +80 -80
  515. data/src/core/lib/iomgr/iocp_windows.cc +21 -21
  516. data/src/core/lib/iomgr/iocp_windows.h +18 -18
  517. data/src/core/lib/iomgr/iomgr.cc +19 -18
  518. data/src/core/lib/iomgr/iomgr.h +32 -32
  519. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  520. data/src/core/lib/iomgr/iomgr_internal.h +25 -25
  521. data/src/core/lib/iomgr/iomgr_posix.cc +18 -18
  522. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +18 -18
  523. data/src/core/lib/iomgr/iomgr_windows.cc +22 -21
  524. data/src/core/lib/iomgr/load_file.cc +19 -18
  525. data/src/core/lib/iomgr/load_file.h +20 -20
  526. data/src/core/lib/iomgr/lockfree_event.cc +104 -104
  527. data/src/core/lib/iomgr/lockfree_event.h +19 -19
  528. data/src/core/lib/iomgr/nameser.h +84 -84
  529. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  530. data/src/core/lib/iomgr/polling_entity.h +27 -27
  531. data/src/core/lib/iomgr/pollset.cc +17 -17
  532. data/src/core/lib/iomgr/pollset.h +51 -51
  533. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  534. data/src/core/lib/iomgr/pollset_set.h +22 -22
  535. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  536. data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
  537. data/src/core/lib/iomgr/pollset_windows.cc +26 -25
  538. data/src/core/lib/iomgr/pollset_windows.h +22 -22
  539. data/src/core/lib/iomgr/port.h +29 -29
  540. data/src/core/lib/iomgr/python_util.h +18 -18
  541. data/src/core/lib/iomgr/resolve_address.cc +18 -17
  542. data/src/core/lib/iomgr/resolve_address.h +18 -18
  543. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  544. data/src/core/lib/iomgr/resolve_address_posix.cc +21 -20
  545. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -3
  546. data/src/core/lib/iomgr/resolved_address.h +1 -1
  547. data/src/core/lib/iomgr/sockaddr.h +21 -21
  548. data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
  549. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  550. data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
  551. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  552. data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
  553. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  554. data/src/core/lib/iomgr/socket_mutator.h +37 -37
  555. data/src/core/lib/iomgr/socket_utils.h +24 -24
  556. data/src/core/lib/iomgr/socket_utils_common_posix.cc +38 -37
  557. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  558. data/src/core/lib/iomgr/socket_utils_posix.cc +21 -20
  559. data/src/core/lib/iomgr/socket_utils_posix.h +76 -76
  560. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  561. data/src/core/lib/iomgr/socket_windows.cc +35 -34
  562. data/src/core/lib/iomgr/socket_windows.h +56 -56
  563. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  564. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  565. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  566. data/src/core/lib/iomgr/tcp_client.h +26 -26
  567. data/src/core/lib/iomgr/tcp_client_cfstream.cc +19 -18
  568. data/src/core/lib/iomgr/tcp_client_posix.cc +39 -38
  569. data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
  570. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -27
  571. data/src/core/lib/iomgr/tcp_posix.cc +136 -134
  572. data/src/core/lib/iomgr/tcp_posix.h +27 -27
  573. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  574. data/src/core/lib/iomgr/tcp_server.h +68 -62
  575. data/src/core/lib/iomgr/tcp_server_posix.cc +91 -61
  576. data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
  577. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +72 -34
  578. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +28 -27
  579. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +18 -18
  580. data/src/core/lib/iomgr/tcp_server_windows.cc +71 -75
  581. data/src/core/lib/iomgr/tcp_windows.cc +83 -60
  582. data/src/core/lib/iomgr/tcp_windows.h +29 -29
  583. data/src/core/lib/iomgr/timer.cc +17 -17
  584. data/src/core/lib/iomgr/timer.h +65 -65
  585. data/src/core/lib/iomgr/timer_generic.cc +106 -107
  586. data/src/core/lib/iomgr/timer_generic.h +19 -19
  587. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  588. data/src/core/lib/iomgr/timer_heap.h +19 -19
  589. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  590. data/src/core/lib/iomgr/timer_manager.h +25 -25
  591. data/src/core/lib/iomgr/unix_sockets_posix.cc +18 -17
  592. data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
  593. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  594. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +19 -18
  595. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  596. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +19 -18
  597. data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
  598. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  599. data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
  600. data/src/core/lib/json/json_object_loader.cc +10 -0
  601. data/src/core/lib/json/json_object_loader.h +15 -1
  602. data/src/core/lib/json/json_reader.cc +28 -28
  603. data/src/core/lib/json/json_writer.cc +56 -56
  604. data/src/core/lib/load_balancing/lb_policy.cc +17 -17
  605. data/src/core/lib/load_balancing/lb_policy.h +3 -4
  606. data/src/core/lib/load_balancing/subchannel_interface.h +1 -1
  607. data/src/core/lib/matchers/matchers.cc +3 -1
  608. data/src/core/lib/matchers/matchers.h +1 -1
  609. data/src/core/lib/promise/activity.h +20 -12
  610. data/src/core/lib/promise/arena_promise.h +2 -1
  611. data/src/core/lib/promise/context.h +1 -0
  612. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  613. data/src/core/lib/promise/detail/switch.h +18 -18
  614. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +18 -12
  615. data/src/core/lib/promise/for_each.h +68 -42
  616. data/src/core/lib/promise/latch.h +13 -19
  617. data/src/core/lib/promise/map.h +1 -0
  618. data/src/core/lib/promise/map_pipe.h +1 -0
  619. data/src/core/lib/promise/poll.h +6 -0
  620. data/src/core/lib/promise/seq.h +1 -0
  621. data/src/core/lib/promise/try_concurrently.h +1 -0
  622. data/src/core/lib/promise/try_seq.h +1 -0
  623. data/src/core/lib/resolver/resolver.cc +17 -17
  624. data/src/core/lib/resolver/server_address.cc +17 -17
  625. data/src/core/lib/resolver/server_address.h +18 -18
  626. data/src/core/lib/resource_quota/api.h +1 -1
  627. data/src/core/lib/resource_quota/arena.cc +17 -17
  628. data/src/core/lib/resource_quota/arena.h +18 -18
  629. data/src/core/lib/resource_quota/memory_quota.cc +139 -43
  630. data/src/core/lib/resource_quota/memory_quota.h +85 -23
  631. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  632. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  633. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  634. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  635. data/src/core/lib/security/context/security_context.cc +22 -23
  636. data/src/core/lib/security/context/security_context.h +30 -30
  637. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  638. data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
  639. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  640. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
  641. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  642. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  643. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  644. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  645. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  646. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
  647. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  648. data/src/core/lib/security/credentials/call_creds_util.h +1 -1
  649. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -21
  650. data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
  651. data/src/core/lib/security/credentials/credentials.cc +19 -18
  652. data/src/core/lib/security/credentials/credentials.h +34 -33
  653. data/src/core/lib/security/credentials/fake/fake_credentials.cc +19 -19
  654. data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
  655. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  656. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +48 -49
  657. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
  658. data/src/core/lib/security/credentials/iam/iam_credentials.cc +17 -17
  659. data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
  660. data/src/core/lib/security/credentials/jwt/json_token.cc +23 -23
  661. data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
  662. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -17
  663. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
  664. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -70
  665. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
  666. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  667. data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
  668. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +28 -29
  669. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
  670. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +18 -18
  671. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +19 -19
  672. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  673. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
  674. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -1
  675. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -2
  676. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  677. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  678. data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
  679. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  680. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  681. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +26 -27
  682. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
  683. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -26
  684. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
  685. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +1 -2
  686. data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
  687. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  688. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +18 -18
  689. data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
  690. data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -23
  691. data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
  692. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  693. data/src/core/lib/security/security_connector/security_connector.h +32 -33
  694. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +25 -25
  695. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
  696. data/src/core/lib/security/security_connector/ssl_utils.cc +32 -32
  697. data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
  698. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  699. data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
  700. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -21
  701. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
  702. data/src/core/lib/security/transport/auth_filters.h +18 -18
  703. data/src/core/lib/security/transport/client_auth_filter.cc +20 -20
  704. data/src/core/lib/security/transport/secure_endpoint.cc +28 -28
  705. data/src/core/lib/security/transport/secure_endpoint.h +22 -22
  706. data/src/core/lib/security/transport/security_handshaker.cc +17 -17
  707. data/src/core/lib/security/transport/security_handshaker.h +19 -19
  708. data/src/core/lib/security/transport/server_auth_filter.cc +22 -23
  709. data/src/core/lib/security/transport/tsi_error.cc +17 -17
  710. data/src/core/lib/security/transport/tsi_error.h +18 -18
  711. data/src/core/lib/security/util/json_util.cc +17 -17
  712. data/src/core/lib/security/util/json_util.h +18 -18
  713. data/src/core/lib/service_config/service_config.h +1 -1
  714. data/src/core/lib/service_config/service_config_call_data.h +7 -1
  715. data/src/core/lib/slice/b64.cc +24 -24
  716. data/src/core/lib/slice/b64.h +29 -29
  717. data/src/core/lib/slice/percent_encoding.cc +17 -17
  718. data/src/core/lib/slice/percent_encoding.h +24 -24
  719. data/src/core/lib/slice/slice.cc +37 -37
  720. data/src/core/lib/slice/slice.h +38 -5
  721. data/src/core/lib/slice/slice_buffer.cc +50 -45
  722. data/src/core/lib/slice/slice_buffer.h +27 -2
  723. data/src/core/lib/slice/slice_internal.h +18 -18
  724. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  725. data/src/core/lib/slice/slice_string_helpers.h +19 -19
  726. data/src/core/lib/surface/api_trace.cc +17 -17
  727. data/src/core/lib/surface/api_trace.h +22 -22
  728. data/src/core/lib/surface/byte_buffer.cc +19 -19
  729. data/src/core/lib/surface/byte_buffer_reader.cc +19 -19
  730. data/src/core/lib/surface/call.cc +163 -104
  731. data/src/core/lib/surface/call.h +42 -39
  732. data/src/core/lib/surface/call_details.cc +17 -18
  733. data/src/core/lib/surface/call_log_batch.cc +18 -18
  734. data/src/core/lib/surface/call_test_only.h +30 -30
  735. data/src/core/lib/surface/call_trace.cc +5 -5
  736. data/src/core/lib/surface/channel.cc +18 -18
  737. data/src/core/lib/surface/channel.h +31 -31
  738. data/src/core/lib/surface/channel_init.cc +17 -17
  739. data/src/core/lib/surface/channel_init.h +18 -18
  740. data/src/core/lib/surface/channel_ping.cc +18 -18
  741. data/src/core/lib/surface/channel_stack_type.cc +17 -17
  742. data/src/core/lib/surface/channel_stack_type.h +18 -18
  743. data/src/core/lib/surface/completion_queue.cc +136 -140
  744. data/src/core/lib/surface/completion_queue.h +32 -32
  745. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  746. data/src/core/lib/surface/completion_queue_factory.h +20 -20
  747. data/src/core/lib/surface/event_string.cc +17 -17
  748. data/src/core/lib/surface/event_string.h +20 -20
  749. data/src/core/lib/surface/init.cc +21 -19
  750. data/src/core/lib/surface/init.h +18 -18
  751. data/src/core/lib/surface/init_internally.cc +1 -0
  752. data/src/core/lib/surface/init_internally.h +1 -0
  753. data/src/core/lib/surface/lame_client.cc +18 -18
  754. data/src/core/lib/surface/lame_client.h +19 -19
  755. data/src/core/lib/surface/metadata_array.cc +17 -18
  756. data/src/core/lib/surface/server.cc +15 -15
  757. data/src/core/lib/surface/server.h +2 -3
  758. data/src/core/lib/surface/validate_metadata.cc +17 -17
  759. data/src/core/lib/surface/validate_metadata.h +18 -18
  760. data/src/core/lib/surface/version.cc +21 -21
  761. data/src/core/lib/transport/bdp_estimator.cc +17 -17
  762. data/src/core/lib/transport/bdp_estimator.h +18 -19
  763. data/src/core/lib/transport/connectivity_state.cc +17 -17
  764. data/src/core/lib/transport/connectivity_state.h +19 -19
  765. data/src/core/lib/transport/error_utils.cc +17 -17
  766. data/src/core/lib/transport/error_utils.h +18 -18
  767. data/src/core/lib/transport/handshaker.cc +37 -34
  768. data/src/core/lib/transport/handshaker.h +42 -37
  769. data/src/core/lib/transport/handshaker_factory.h +18 -18
  770. data/src/core/lib/transport/handshaker_registry.cc +17 -17
  771. data/src/core/lib/transport/handshaker_registry.h +18 -18
  772. data/src/core/lib/transport/http2_errors.h +20 -20
  773. data/src/core/lib/transport/http_connect_handshaker.cc +17 -17
  774. data/src/core/lib/transport/http_connect_handshaker.h +18 -18
  775. data/src/core/lib/transport/metadata_batch.cc +4 -1
  776. data/src/core/lib/transport/metadata_batch.h +30 -20
  777. data/src/core/lib/transport/parsed_metadata.h +1 -0
  778. data/src/core/lib/transport/pid_controller.cc +20 -20
  779. data/src/core/lib/transport/pid_controller.h +24 -24
  780. data/src/core/lib/transport/status_conversion.cc +22 -22
  781. data/src/core/lib/transport/status_conversion.h +20 -20
  782. data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
  783. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  784. data/src/core/lib/transport/timeout_encoding.h +18 -18
  785. data/src/core/lib/transport/transport.cc +25 -24
  786. data/src/core/lib/transport/transport.h +134 -132
  787. data/src/core/lib/transport/transport_impl.h +41 -41
  788. data/src/core/lib/transport/transport_op_string.cc +19 -19
  789. data/src/core/plugin_registry/grpc_plugin_registry.cc +21 -19
  790. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
  791. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  792. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  793. data/src/core/tsi/alts/crypt/gsec.h +334 -334
  794. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  795. data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
  796. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  797. data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
  798. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  799. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
  800. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  801. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
  802. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  803. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  804. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  805. data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
  806. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +68 -67
  807. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
  808. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  809. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
  810. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +29 -28
  811. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
  812. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
  813. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +19 -19
  814. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
  815. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  816. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
  817. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +38 -37
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +31 -30
  820. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
  821. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
  822. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +31 -30
  823. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  825. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
  826. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +53 -52
  827. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
  828. data/src/core/tsi/fake_transport_security.cc +77 -76
  829. data/src/core/tsi/fake_transport_security.h +30 -30
  830. data/src/core/tsi/local_transport_security.cc +34 -33
  831. data/src/core/tsi/local_transport_security.h +31 -31
  832. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -0
  833. data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
  834. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +18 -18
  835. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  836. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
  837. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +19 -18
  838. data/src/core/tsi/ssl_transport_security.cc +139 -323
  839. data/src/core/tsi/ssl_transport_security.h +201 -200
  840. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  841. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  842. data/src/core/tsi/ssl_types.h +25 -25
  843. data/src/core/tsi/transport_security.cc +26 -26
  844. data/src/core/tsi/transport_security.h +45 -45
  845. data/src/core/tsi/transport_security_grpc.cc +20 -20
  846. data/src/core/tsi/transport_security_grpc.h +39 -39
  847. data/src/core/tsi/transport_security_interface.h +330 -330
  848. data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  849. data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  850. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  851. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  852. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  853. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  854. data/src/ruby/ext/grpc/extconf.rb +47 -2
  855. data/src/ruby/ext/grpc/rb_call.c +1 -0
  856. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  857. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  858. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  859. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  860. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -36
  861. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -56
  862. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  863. data/src/ruby/lib/grpc/version.rb +1 -1
  864. data/src/ruby/spec/client_server_spec.rb +20 -8
  865. data/third_party/re2/re2/bitstate.cc +3 -3
  866. data/third_party/re2/re2/dfa.cc +13 -13
  867. data/third_party/re2/re2/nfa.cc +4 -4
  868. data/third_party/re2/re2/onepass.cc +2 -2
  869. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  870. data/third_party/re2/re2/prefilter_tree.h +3 -2
  871. data/third_party/re2/re2/prog.cc +11 -2
  872. data/third_party/re2/re2/prog.h +17 -5
  873. data/third_party/re2/re2/re2.cc +6 -11
  874. data/third_party/re2/re2/re2.h +1 -1
  875. data/third_party/re2/re2/regexp.cc +1 -2
  876. data/third_party/re2/re2/stringpiece.h +10 -7
  877. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  878. data/third_party/re2/re2/unicode_groups.cc +319 -151
  879. data/third_party/re2/re2/walker-inl.h +3 -2
  880. data/third_party/re2/util/mutex.h +4 -4
  881. metadata +95 -26
  882. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  883. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  884. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  885. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  886. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
@@ -24,6 +24,7 @@
24
24
  #include "absl/base/attributes.h"
25
25
  #include "absl/functional/function_ref.h"
26
26
  #include "absl/strings/str_cat.h"
27
+ #include "absl/strings/str_format.h"
27
28
  #include "absl/strings/str_join.h"
28
29
  #include "absl/types/variant.h"
29
30
 
@@ -31,6 +32,7 @@
31
32
 
32
33
  #include "src/core/lib/channel/channel_stack.h"
33
34
  #include "src/core/lib/debug/trace.h"
35
+ #include "src/core/lib/gprpp/crash.h"
34
36
  #include "src/core/lib/gprpp/manual_constructor.h"
35
37
  #include "src/core/lib/gprpp/status_helper.h"
36
38
  #include "src/core/lib/iomgr/error.h"
@@ -246,7 +248,7 @@ BaseCallData::Flusher::~Flusher() {
246
248
  BaseCallData* call =
247
249
  static_cast<BaseCallData*>(batch->handler_private.extra_arg);
248
250
  if (grpc_trace_channel.enabled()) {
249
- gpr_log(GPR_DEBUG, "FLUSHER:forward batch via closure: %s",
251
+ gpr_log(GPR_INFO, "FLUSHER:forward batch via closure: %s",
250
252
  grpc_transport_stream_op_batch_string(batch).c_str());
251
253
  }
252
254
  grpc_call_next_op(call->elem(), batch);
@@ -255,7 +257,7 @@ BaseCallData::Flusher::~Flusher() {
255
257
  for (size_t i = 1; i < release_.size(); i++) {
256
258
  auto* batch = release_[i];
257
259
  if (grpc_trace_channel.enabled()) {
258
- gpr_log(GPR_DEBUG, "FLUSHER:queue batch to forward in closure: %s",
260
+ gpr_log(GPR_INFO, "FLUSHER:queue batch to forward in closure: %s",
259
261
  grpc_transport_stream_op_batch_string(release_[i]).c_str());
260
262
  }
261
263
  batch->handler_private.extra_arg = call_;
@@ -267,7 +269,7 @@ BaseCallData::Flusher::~Flusher() {
267
269
  }
268
270
  call_closures_.RunClosuresWithoutYielding(call_->call_combiner());
269
271
  if (grpc_trace_channel.enabled()) {
270
- gpr_log(GPR_DEBUG, "FLUSHER:forward batch: %s",
272
+ gpr_log(GPR_INFO, "FLUSHER:forward batch: %s",
271
273
  grpc_transport_stream_op_batch_string(release_[0]).c_str());
272
274
  }
273
275
  grpc_call_next_op(call_->elem(), release_[0]);
@@ -295,13 +297,15 @@ const char* BaseCallData::SendMessage::StateString(State state) {
295
297
  return "BATCH_COMPLETED";
296
298
  case State::kCancelled:
297
299
  return "CANCELLED";
300
+ case State::kCancelledButNotYetPolled:
301
+ return "CANCELLED_BUT_NOT_YET_POLLED";
298
302
  }
299
303
  return "UNKNOWN";
300
304
  }
301
305
 
302
306
  void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
303
307
  if (grpc_trace_channel.enabled()) {
304
- gpr_log(GPR_DEBUG, "%s SendMessage.StartOp st=%s", base_->LogTag().c_str(),
308
+ gpr_log(GPR_INFO, "%s SendMessage.StartOp st=%s", base_->LogTag().c_str(),
305
309
  StateString(state_));
306
310
  }
307
311
  switch (state_) {
@@ -316,8 +320,9 @@ void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
316
320
  case State::kForwardedBatch:
317
321
  case State::kBatchCompleted:
318
322
  case State::kPushedToPipe:
319
- abort();
323
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
320
324
  case State::kCancelled:
325
+ case State::kCancelledButNotYetPolled:
321
326
  return;
322
327
  }
323
328
  batch_ = batch;
@@ -326,7 +331,7 @@ void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
326
331
 
327
332
  void BaseCallData::SendMessage::GotPipe(PipeReceiver<MessageHandle>* receiver) {
328
333
  if (grpc_trace_channel.enabled()) {
329
- gpr_log(GPR_DEBUG, "%s SendMessage.GotPipe st=%s", base_->LogTag().c_str(),
334
+ gpr_log(GPR_INFO, "%s SendMessage.GotPipe st=%s", base_->LogTag().c_str(),
330
335
  StateString(state_));
331
336
  }
332
337
  GPR_ASSERT(receiver != nullptr);
@@ -344,8 +349,9 @@ void BaseCallData::SendMessage::GotPipe(PipeReceiver<MessageHandle>* receiver) {
344
349
  case State::kForwardedBatch:
345
350
  case State::kBatchCompleted:
346
351
  case State::kPushedToPipe:
347
- abort();
352
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
348
353
  case State::kCancelled:
354
+ case State::kCancelledButNotYetPolled:
349
355
  return;
350
356
  }
351
357
  receiver_ = receiver;
@@ -357,6 +363,7 @@ bool BaseCallData::SendMessage::IsIdle() const {
357
363
  case State::kIdle:
358
364
  case State::kForwardedBatch:
359
365
  case State::kCancelled:
366
+ case State::kCancelledButNotYetPolled:
360
367
  return true;
361
368
  case State::kGotBatchNoPipe:
362
369
  case State::kGotBatch:
@@ -370,7 +377,7 @@ bool BaseCallData::SendMessage::IsIdle() const {
370
377
  void BaseCallData::SendMessage::OnComplete(absl::Status status) {
371
378
  Flusher flusher(base_);
372
379
  if (grpc_trace_channel.enabled()) {
373
- gpr_log(GPR_DEBUG, "%s SendMessage.OnComplete st=%s status=%s",
380
+ gpr_log(GPR_INFO, "%s SendMessage.OnComplete st=%s status=%s",
374
381
  base_->LogTag().c_str(), StateString(state_),
375
382
  status.ToString().c_str());
376
383
  }
@@ -381,9 +388,10 @@ void BaseCallData::SendMessage::OnComplete(absl::Status status) {
381
388
  case State::kPushedToPipe:
382
389
  case State::kGotBatch:
383
390
  case State::kBatchCompleted:
384
- abort();
391
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
385
392
  break;
386
393
  case State::kCancelled:
394
+ case State::kCancelledButNotYetPolled:
387
395
  flusher.AddClosure(intercepted_on_complete_, status,
388
396
  "forward after cancel");
389
397
  break;
@@ -397,34 +405,35 @@ void BaseCallData::SendMessage::OnComplete(absl::Status status) {
397
405
 
398
406
  void BaseCallData::SendMessage::Done(const ServerMetadata& metadata) {
399
407
  if (grpc_trace_channel.enabled()) {
400
- gpr_log(GPR_DEBUG, "%s SendMessage.Done st=%s md=%s",
408
+ gpr_log(GPR_INFO, "%s SendMessage.Done st=%s md=%s",
401
409
  base_->LogTag().c_str(), StateString(state_),
402
410
  metadata.DebugString().c_str());
403
411
  }
404
412
  switch (state_) {
405
413
  case State::kCancelled:
414
+ case State::kCancelledButNotYetPolled:
406
415
  break;
407
416
  case State::kInitial:
408
417
  case State::kIdle:
409
418
  case State::kForwardedBatch:
410
- state_ = State::kCancelled;
419
+ state_ = State::kCancelledButNotYetPolled;
411
420
  break;
412
421
  case State::kGotBatchNoPipe:
413
422
  case State::kGotBatch:
414
423
  case State::kBatchCompleted:
415
- abort();
424
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
416
425
  break;
417
426
  case State::kPushedToPipe:
418
427
  push_.reset();
419
428
  next_.reset();
420
- state_ = State::kCancelled;
429
+ state_ = State::kCancelledButNotYetPolled;
421
430
  break;
422
431
  }
423
432
  }
424
433
 
425
434
  void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher) {
426
435
  if (grpc_trace_channel.enabled()) {
427
- gpr_log(GPR_DEBUG, "%s SendMessage.WakeInsideCombiner st=%s%s",
436
+ gpr_log(GPR_INFO, "%s SendMessage.WakeInsideCombiner st=%s%s",
428
437
  base_->LogTag().c_str(), StateString(state_),
429
438
  state_ == State::kBatchCompleted
430
439
  ? absl::StrCat(" status=", completed_status_.ToString()).c_str()
@@ -437,6 +446,10 @@ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher) {
437
446
  case State::kForwardedBatch:
438
447
  case State::kCancelled:
439
448
  break;
449
+ case State::kCancelledButNotYetPolled:
450
+ pipe_.sender.Close();
451
+ state_ = State::kCancelled;
452
+ break;
440
453
  case State::kGotBatch: {
441
454
  state_ = State::kPushedToPipe;
442
455
  auto message = GetContext<Arena>()->MakePooled<Message>();
@@ -451,7 +464,7 @@ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher) {
451
464
  auto r_push = (*push_)();
452
465
  if (auto* p = absl::get_if<bool>(&r_push)) {
453
466
  if (grpc_trace_channel.enabled()) {
454
- gpr_log(GPR_DEBUG,
467
+ gpr_log(GPR_INFO,
455
468
  "%s SendMessage.WakeInsideCombiner push complete, result=%s",
456
469
  base_->LogTag().c_str(), *p ? "true" : "false");
457
470
  }
@@ -465,7 +478,7 @@ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher) {
465
478
  auto r_next = (*next_)();
466
479
  if (auto* p = absl::get_if<NextResult<MessageHandle>>(&r_next)) {
467
480
  if (grpc_trace_channel.enabled()) {
468
- gpr_log(GPR_DEBUG,
481
+ gpr_log(GPR_INFO,
469
482
  "%s SendMessage.WakeInsideCombiner next complete, "
470
483
  "result.has_value=%s",
471
484
  base_->LogTag().c_str(), p->has_value() ? "true" : "false");
@@ -527,13 +540,19 @@ const char* BaseCallData::ReceiveMessage::StateString(State state) {
527
540
  return "CANCELLED_WHILST_FORWARDING";
528
541
  case State::kBatchCompletedButCancelled:
529
542
  return "BATCH_COMPLETED_BUT_CANCELLED";
543
+ case State::kCancelledWhilstIdle:
544
+ return "CANCELLED_WHILST_IDLE";
545
+ case State::kCompletedWhilePulledFromPipe:
546
+ return "COMPLETED_WHILE_PULLED_FROM_PIPE";
547
+ case State::kCompletedWhilePushedToPipe:
548
+ return "COMPLETED_WHILE_PUSHED_TO_PIPE";
530
549
  }
531
550
  return "UNKNOWN";
532
551
  }
533
552
 
534
553
  void BaseCallData::ReceiveMessage::StartOp(CapturedBatch& batch) {
535
554
  if (grpc_trace_channel.enabled()) {
536
- gpr_log(GPR_DEBUG, "%s ReceiveMessage.StartOp st=%s",
555
+ gpr_log(GPR_INFO, "%s ReceiveMessage.StartOp st=%s",
537
556
  base_->LogTag().c_str(), StateString(state_));
538
557
  }
539
558
  switch (state_) {
@@ -551,7 +570,10 @@ void BaseCallData::ReceiveMessage::StartOp(CapturedBatch& batch) {
551
570
  case State::kBatchCompletedNoPipe:
552
571
  case State::kPushedToPipe:
553
572
  case State::kPulledFromPipe:
554
- abort();
573
+ case State::kCompletedWhilePulledFromPipe:
574
+ case State::kCompletedWhilePushedToPipe:
575
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
576
+ case State::kCancelledWhilstIdle:
555
577
  case State::kCancelled:
556
578
  return;
557
579
  }
@@ -567,7 +589,7 @@ void BaseCallData::ReceiveMessage::StartOp(CapturedBatch& batch) {
567
589
 
568
590
  void BaseCallData::ReceiveMessage::GotPipe(PipeSender<MessageHandle>* sender) {
569
591
  if (grpc_trace_channel.enabled()) {
570
- gpr_log(GPR_DEBUG, "%s ReceiveMessage.GotPipe st=%s",
592
+ gpr_log(GPR_INFO, "%s ReceiveMessage.GotPipe st=%s",
571
593
  base_->LogTag().c_str(), StateString(state_));
572
594
  }
573
595
  switch (state_) {
@@ -586,9 +608,12 @@ void BaseCallData::ReceiveMessage::GotPipe(PipeSender<MessageHandle>* sender) {
586
608
  case State::kBatchCompleted:
587
609
  case State::kPushedToPipe:
588
610
  case State::kPulledFromPipe:
611
+ case State::kCompletedWhilePulledFromPipe:
612
+ case State::kCompletedWhilePushedToPipe:
589
613
  case State::kCancelledWhilstForwarding:
614
+ case State::kCancelledWhilstIdle:
590
615
  case State::kBatchCompletedButCancelled:
591
- abort();
616
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
592
617
  case State::kCancelled:
593
618
  return;
594
619
  }
@@ -597,7 +622,7 @@ void BaseCallData::ReceiveMessage::GotPipe(PipeSender<MessageHandle>* sender) {
597
622
 
598
623
  void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
599
624
  if (grpc_trace_channel.enabled()) {
600
- gpr_log(GPR_DEBUG, "%s ReceiveMessage.OnComplete st=%s status=%s",
625
+ gpr_log(GPR_INFO, "%s ReceiveMessage.OnComplete st=%s status=%s",
601
626
  base_->LogTag().c_str(), StateString(state_),
602
627
  status.ToString().c_str());
603
628
  }
@@ -610,7 +635,10 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
610
635
  case State::kBatchCompletedNoPipe:
611
636
  case State::kCancelled:
612
637
  case State::kBatchCompletedButCancelled:
613
- abort();
638
+ case State::kCancelledWhilstIdle:
639
+ case State::kCompletedWhilePulledFromPipe:
640
+ case State::kCompletedWhilePushedToPipe:
641
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
614
642
  case State::kForwardedBatchNoPipe:
615
643
  state_ = State::kBatchCompletedNoPipe;
616
644
  return;
@@ -630,34 +658,47 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
630
658
  void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
631
659
  Flusher* flusher) {
632
660
  if (grpc_trace_channel.enabled()) {
633
- gpr_log(GPR_DEBUG, "%s ReceiveMessage.Done st=%s md=%s",
661
+ gpr_log(GPR_INFO, "%s ReceiveMessage.Done st=%s md=%s",
634
662
  base_->LogTag().c_str(), StateString(state_),
635
663
  metadata.DebugString().c_str());
636
664
  }
637
665
  switch (state_) {
638
666
  case State::kInitial:
639
- case State::kIdle:
640
667
  state_ = State::kCancelled;
641
668
  break;
669
+ case State::kIdle:
670
+ state_ = State::kCancelledWhilstIdle;
671
+ break;
642
672
  case State::kForwardedBatch:
643
673
  case State::kForwardedBatchNoPipe:
644
674
  state_ = State::kCancelledWhilstForwarding;
645
675
  break;
676
+ case State::kCompletedWhilePulledFromPipe:
677
+ case State::kCompletedWhilePushedToPipe:
646
678
  case State::kPulledFromPipe:
647
679
  case State::kPushedToPipe: {
648
680
  auto status_code =
649
- metadata.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_OK);
650
- GPR_ASSERT(status_code != GRPC_STATUS_OK);
651
- push_.reset();
652
- next_.reset();
653
- flusher->AddClosure(intercepted_on_complete_,
654
- StatusFromMetadata(metadata), "recv_message_done");
655
- state_ = State::kCancelled;
681
+ metadata.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
682
+ if (status_code == GRPC_STATUS_OK) {
683
+ if (state_ == State::kCompletedWhilePulledFromPipe ||
684
+ state_ == State::kPulledFromPipe) {
685
+ state_ = State::kCompletedWhilePulledFromPipe;
686
+ } else {
687
+ state_ = State::kCompletedWhilePushedToPipe;
688
+ }
689
+ } else {
690
+ push_.reset();
691
+ next_.reset();
692
+ flusher->AddClosure(intercepted_on_complete_,
693
+ StatusFromMetadata(metadata), "recv_message_done");
694
+ state_ = State::kCancelled;
695
+ }
656
696
  } break;
657
697
  case State::kBatchCompleted:
658
698
  case State::kBatchCompletedNoPipe:
659
699
  case State::kBatchCompletedButCancelled:
660
- abort();
700
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
701
+ case State::kCancelledWhilstIdle:
661
702
  case State::kCancelledWhilstForwarding:
662
703
  case State::kCancelled:
663
704
  break;
@@ -666,8 +707,10 @@ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
666
707
 
667
708
  void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher) {
668
709
  if (grpc_trace_channel.enabled()) {
669
- gpr_log(GPR_DEBUG, "%s ReceiveMessage.WakeInsideCombiner st=%s",
670
- base_->LogTag().c_str(), StateString(state_));
710
+ gpr_log(GPR_INFO,
711
+ "%s ReceiveMessage.WakeInsideCombiner st=%s push?=%s next?=%s",
712
+ base_->LogTag().c_str(), StateString(state_),
713
+ push_.has_value() ? "yes" : "no", next_.has_value() ? "yes" : "no");
671
714
  }
672
715
  switch (state_) {
673
716
  case State::kInitial:
@@ -678,6 +721,10 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher) {
678
721
  case State::kCancelledWhilstForwarding:
679
722
  case State::kBatchCompletedNoPipe:
680
723
  break;
724
+ case State::kCancelledWhilstIdle:
725
+ sender_->Close();
726
+ state_ = State::kCancelled;
727
+ break;
681
728
  case State::kBatchCompletedButCancelled:
682
729
  sender_->Close();
683
730
  state_ = State::kCancelled;
@@ -701,10 +748,16 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher) {
701
748
  }
702
749
  GPR_ASSERT(state_ == State::kPushedToPipe);
703
750
  ABSL_FALLTHROUGH_INTENDED;
751
+ case State::kCompletedWhilePushedToPipe:
704
752
  case State::kPushedToPipe: {
705
753
  GPR_ASSERT(push_.has_value());
706
754
  auto r_push = (*push_)();
707
755
  if (auto* p = absl::get_if<bool>(&r_push)) {
756
+ if (grpc_trace_channel.enabled()) {
757
+ gpr_log(GPR_INFO,
758
+ "%s ReceiveMessage.WakeInsideCombiner push complete: %s",
759
+ base_->LogTag().c_str(), *p ? "true" : "false");
760
+ }
708
761
  // We haven't pulled through yet, so this certainly shouldn't succeed.
709
762
  GPR_ASSERT(!*p);
710
763
  state_ = State::kCancelled;
@@ -713,11 +766,21 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher) {
713
766
  GPR_ASSERT(next_.has_value());
714
767
  auto r_next = (*next_)();
715
768
  if (auto* p = absl::get_if<NextResult<MessageHandle>>(&r_next)) {
769
+ if (grpc_trace_channel.enabled()) {
770
+ gpr_log(GPR_INFO,
771
+ "%s ReceiveMessage.WakeInsideCombiner next complete: %s",
772
+ base_->LogTag().c_str(),
773
+ p->has_value() ? "got message" : "end of stream");
774
+ }
716
775
  next_.reset();
717
776
  if (p->has_value()) {
718
777
  *intercepted_slice_buffer_ = std::move(*(**p)->payload());
719
778
  *intercepted_flags_ = (**p)->flags();
720
- state_ = State::kPulledFromPipe;
779
+ if (state_ == State::kCompletedWhilePushedToPipe) {
780
+ state_ = State::kCompletedWhilePulledFromPipe;
781
+ } else {
782
+ state_ = State::kPulledFromPipe;
783
+ }
721
784
  } else {
722
785
  *intercepted_slice_buffer_ = absl::nullopt;
723
786
  *intercepted_flags_ = 0;
@@ -725,12 +788,26 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher) {
725
788
  }
726
789
  }
727
790
  }
728
- if (state_ != State::kPulledFromPipe) break;
791
+ if (state_ != State::kPulledFromPipe &&
792
+ state_ != State::kCompletedWhilePulledFromPipe) {
793
+ break;
794
+ }
729
795
  ABSL_FALLTHROUGH_INTENDED;
796
+ case State::kCompletedWhilePulledFromPipe:
730
797
  case State::kPulledFromPipe: {
731
798
  GPR_ASSERT(push_.has_value());
732
799
  if (!absl::holds_alternative<Pending>((*push_)())) {
733
- state_ = State::kIdle;
800
+ if (grpc_trace_channel.enabled()) {
801
+ gpr_log(GPR_INFO,
802
+ "%s ReceiveMessage.WakeInsideCombiner push complete",
803
+ base_->LogTag().c_str());
804
+ }
805
+ if (state_ == State::kCompletedWhilePulledFromPipe) {
806
+ sender_->Close();
807
+ state_ = State::kCancelled;
808
+ } else {
809
+ state_ = State::kIdle;
810
+ }
734
811
  push_.reset();
735
812
  flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
736
813
  absl::OkStatus(), "recv_message");
@@ -816,7 +893,7 @@ class ClientCallData::PollContext {
816
893
 
817
894
  void Run() {
818
895
  if (grpc_trace_channel.enabled()) {
819
- gpr_log(GPR_DEBUG, "%s ClientCallData.PollContext.Run %s",
896
+ gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run %s",
820
897
  self_->LogTag().c_str(), self_->DebugString().c_str());
821
898
  }
822
899
  GPR_ASSERT(have_scoped_activity_);
@@ -878,7 +955,7 @@ class ClientCallData::PollContext {
878
955
  // Poll the promise once since we're waiting for it.
879
956
  Poll<ServerMetadataHandle> poll = self_->promise_();
880
957
  if (grpc_trace_channel.enabled()) {
881
- gpr_log(GPR_DEBUG, "%s ClientCallData.PollContext.Run: poll=%s",
958
+ gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run: poll=%s",
882
959
  self_->LogTag().c_str(),
883
960
  PollToString(poll, [](const ServerMetadataHandle& h) {
884
961
  return h->DebugString();
@@ -911,7 +988,10 @@ class ClientCallData::PollContext {
911
988
  case RecvInitialMetadata::
912
989
  kRespondedToTrailingMetadataPriorToHook:
913
990
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
914
- abort(); // not reachable
991
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
992
+ RecvInitialMetadata::StateString(
993
+ self_->recv_initial_metadata_
994
+ ->state))); // not reachable
915
995
  break;
916
996
  case RecvInitialMetadata::kHookedWaitingForLatch:
917
997
  case RecvInitialMetadata::kHookedAndGotLatch:
@@ -947,7 +1027,10 @@ class ClientCallData::PollContext {
947
1027
  case RecvInitialMetadata::
948
1028
  kRespondedToTrailingMetadataPriorToHook:
949
1029
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
950
- abort(); // not reachable
1030
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1031
+ RecvInitialMetadata::StateString(
1032
+ self_->recv_initial_metadata_
1033
+ ->state))); // not reachable
951
1034
  break;
952
1035
  case RecvInitialMetadata::kCompleteWaitingForLatch:
953
1036
  case RecvInitialMetadata::kCompleteAndGotLatch:
@@ -1132,7 +1215,7 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1132
1215
  Flusher flusher(this);
1133
1216
 
1134
1217
  if (grpc_trace_channel.enabled()) {
1135
- gpr_log(GPR_DEBUG, "%s StartBatch %s", LogTag().c_str(),
1218
+ gpr_log(GPR_INFO, "%s StartBatch %s", LogTag().c_str(),
1136
1219
  DebugString().c_str());
1137
1220
  }
1138
1221
 
@@ -1174,7 +1257,10 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1174
1257
  case RecvInitialMetadata::kCompleteAndSetLatch:
1175
1258
  case RecvInitialMetadata::kResponded:
1176
1259
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
1177
- abort(); // unreachable
1260
+ Crash(absl::StrFormat(
1261
+ "ILLEGAL STATE: %s",
1262
+ RecvInitialMetadata::StateString(
1263
+ recv_initial_metadata_->state))); // unreachable
1178
1264
  }
1179
1265
  if (hook) {
1180
1266
  auto cb = [](void* ptr, grpc_error_handle error) {
@@ -1254,7 +1340,7 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1254
1340
  // Handle cancellation.
1255
1341
  void ClientCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
1256
1342
  if (grpc_trace_channel.enabled()) {
1257
- gpr_log(GPR_DEBUG, "%s Cancel error=%s", LogTag().c_str(),
1343
+ gpr_log(GPR_INFO, "%s Cancel error=%s", LogTag().c_str(),
1258
1344
  error.ToString().c_str());
1259
1345
  }
1260
1346
  // Track the latest reason for cancellation.
@@ -1291,7 +1377,9 @@ void ClientCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
1291
1377
  case RecvInitialMetadata::kResponded:
1292
1378
  break;
1293
1379
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
1294
- abort();
1380
+ Crash(absl::StrFormat(
1381
+ "ILLEGAL STATE: %s",
1382
+ RecvInitialMetadata::StateString(recv_initial_metadata_->state)));
1295
1383
  break;
1296
1384
  }
1297
1385
  }
@@ -1324,7 +1412,7 @@ void ClientCallData::StartPromise(Flusher* flusher) {
1324
1412
 
1325
1413
  void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1326
1414
  if (grpc_trace_channel.enabled()) {
1327
- gpr_log(GPR_DEBUG, "%s ClientCallData.RecvInitialMetadataReady %s",
1415
+ gpr_log(GPR_INFO, "%s ClientCallData.RecvInitialMetadataReady %s",
1328
1416
  LogTag().c_str(), DebugString().c_str());
1329
1417
  }
1330
1418
  ScopedContext context(this);
@@ -1346,7 +1434,10 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1346
1434
  case RecvInitialMetadata::kResponded:
1347
1435
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
1348
1436
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
1349
- abort(); // unreachable
1437
+ Crash(absl::StrFormat(
1438
+ "ILLEGAL STATE: %s",
1439
+ RecvInitialMetadata::StateString(
1440
+ recv_initial_metadata_->state))); // unreachable
1350
1441
  }
1351
1442
  flusher.AddClosure(
1352
1443
  std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
@@ -1375,7 +1466,10 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1375
1466
  case RecvInitialMetadata::kResponded:
1376
1467
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
1377
1468
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
1378
- abort(); // unreachable
1469
+ Crash(absl::StrFormat(
1470
+ "ILLEGAL STATE: %s",
1471
+ RecvInitialMetadata::StateString(
1472
+ recv_initial_metadata_->state))); // unreachable
1379
1473
  }
1380
1474
  }
1381
1475
  WakeInsideCombiner(&flusher);
@@ -1400,7 +1494,7 @@ void ClientCallData::HookRecvTrailingMetadata(CapturedBatch batch) {
1400
1494
  ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
1401
1495
  CallArgs call_args) {
1402
1496
  if (grpc_trace_channel.enabled()) {
1403
- gpr_log(GPR_DEBUG, "%s ClientCallData.MakeNextPromise %s", LogTag().c_str(),
1497
+ gpr_log(GPR_INFO, "%s ClientCallData.MakeNextPromise %s", LogTag().c_str(),
1404
1498
  DebugString().c_str());
1405
1499
  }
1406
1500
  GPR_ASSERT(poll_ctx_ != nullptr);
@@ -1436,7 +1530,10 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
1436
1530
  case RecvInitialMetadata::kResponded:
1437
1531
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
1438
1532
  case RecvInitialMetadata::kRespondedButNeedToSetLatch:
1439
- abort(); // unreachable
1533
+ Crash(absl::StrFormat(
1534
+ "ILLEGAL STATE: %s",
1535
+ RecvInitialMetadata::StateString(
1536
+ recv_initial_metadata_->state))); // unreachable
1440
1537
  }
1441
1538
  } else {
1442
1539
  GPR_ASSERT(call_args.server_initial_metadata == nullptr);
@@ -1461,7 +1558,7 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
1461
1558
  // application.
1462
1559
  Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
1463
1560
  if (grpc_trace_channel.enabled()) {
1464
- gpr_log(GPR_DEBUG, "%s ClientCallData.PollTrailingMetadata %s",
1561
+ gpr_log(GPR_INFO, "%s ClientCallData.PollTrailingMetadata %s",
1465
1562
  LogTag().c_str(), DebugString().c_str());
1466
1563
  }
1467
1564
  GPR_ASSERT(poll_ctx_ != nullptr);
@@ -1498,7 +1595,8 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
1498
1595
  case RecvTrailingState::kResponded:
1499
1596
  // We've already responded to the caller: we can't do anything and we
1500
1597
  // should never reach here.
1501
- abort();
1598
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1599
+ StateString(recv_trailing_state_)));
1502
1600
  }
1503
1601
  GPR_UNREACHABLE_CODE(return Pending{});
1504
1602
  }
@@ -1511,9 +1609,11 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
1511
1609
  void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
1512
1610
  Flusher flusher(this);
1513
1611
  if (grpc_trace_channel.enabled()) {
1514
- gpr_log(GPR_DEBUG,
1515
- "%s ClientCallData.RecvTrailingMetadataReady error=%s md=%s",
1516
- LogTag().c_str(), error.ToString().c_str(),
1612
+ gpr_log(GPR_INFO,
1613
+ "%s ClientCallData.RecvTrailingMetadataReady "
1614
+ "recv_trailing_state=%s error=%s md=%s",
1615
+ LogTag().c_str(), StateString(recv_trailing_state_),
1616
+ error.ToString().c_str(),
1517
1617
  recv_trailing_metadata_->DebugString().c_str());
1518
1618
  }
1519
1619
  // If we were cancelled prior to receiving this callback, we should simply
@@ -1536,6 +1636,12 @@ void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
1536
1636
  // Record that we've got the callback.
1537
1637
  GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kForwarded);
1538
1638
  recv_trailing_state_ = RecvTrailingState::kComplete;
1639
+ if (receive_message() != nullptr) {
1640
+ receive_message()->Done(*recv_trailing_metadata_, &flusher);
1641
+ }
1642
+ if (send_message() != nullptr) {
1643
+ send_message()->Done(*recv_trailing_metadata_);
1644
+ }
1539
1645
  // Repoll the promise.
1540
1646
  ScopedContext context(this);
1541
1647
  WakeInsideCombiner(&flusher);
@@ -1700,7 +1806,7 @@ ServerCallData::ServerCallData(grpc_call_element* elem,
1700
1806
 
1701
1807
  ServerCallData::~ServerCallData() {
1702
1808
  if (grpc_trace_channel.enabled()) {
1703
- gpr_log(GPR_DEBUG, "%s ~ServerCallData %s", LogTag().c_str(),
1809
+ gpr_log(GPR_INFO, "%s ~ServerCallData %s", LogTag().c_str(),
1704
1810
  DebugString().c_str());
1705
1811
  }
1706
1812
  GPR_ASSERT(poll_ctx_ == nullptr);
@@ -1721,7 +1827,7 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1721
1827
  bool wake = false;
1722
1828
 
1723
1829
  if (grpc_trace_channel.enabled()) {
1724
- gpr_log(GPR_DEBUG, "%s StartBatch: %s", LogTag().c_str(),
1830
+ gpr_log(GPR_INFO, "%s StartBatch: %s", LogTag().c_str(),
1725
1831
  DebugString().c_str());
1726
1832
  }
1727
1833
 
@@ -1789,17 +1895,21 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1789
1895
  case SendInitialMetadata::kQueuedWaitingForLatch:
1790
1896
  case SendInitialMetadata::kQueuedAndSetLatch:
1791
1897
  case SendInitialMetadata::kForwarded:
1792
- abort(); // not reachable
1898
+ Crash(absl::StrFormat(
1899
+ "ILLEGAL STATE: %s",
1900
+ SendInitialMetadata::StateString(
1901
+ send_initial_metadata_->state))); // not reachable
1793
1902
  }
1794
1903
  send_initial_metadata_->batch = batch;
1795
1904
  wake = true;
1796
1905
  }
1797
1906
 
1798
- if (send_message() != nullptr && batch->send_message) {
1907
+ if (send_message() != nullptr && batch.is_captured() && batch->send_message) {
1799
1908
  send_message()->StartOp(batch);
1800
1909
  wake = true;
1801
1910
  }
1802
- if (receive_message() != nullptr && batch->recv_message) {
1911
+ if (receive_message() != nullptr && batch.is_captured() &&
1912
+ batch->recv_message) {
1803
1913
  receive_message()->StartOp(batch);
1804
1914
  wake = true;
1805
1915
  }
@@ -1809,6 +1919,11 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1809
1919
  switch (send_trailing_state_) {
1810
1920
  case SendTrailingState::kInitial:
1811
1921
  send_trailing_metadata_batch_ = batch;
1922
+ if (receive_message() != nullptr) {
1923
+ receive_message()->Done(
1924
+ *batch->payload->send_trailing_metadata.send_trailing_metadata,
1925
+ &flusher);
1926
+ }
1812
1927
  if (send_message() != nullptr && !send_message()->IsIdle()) {
1813
1928
  send_trailing_state_ = SendTrailingState::kQueuedBehindSendMessage;
1814
1929
  } else {
@@ -1819,7 +1934,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1819
1934
  case SendTrailingState::kQueued:
1820
1935
  case SendTrailingState::kQueuedBehindSendMessage:
1821
1936
  case SendTrailingState::kForwarded:
1822
- abort(); // unreachable
1937
+ Crash(
1938
+ absl::StrFormat("ILLEGAL STATE: %s",
1939
+ StateString(send_trailing_state_))); // unreachable
1823
1940
  break;
1824
1941
  case SendTrailingState::kCancelled:
1825
1942
  batch.CancelWith(
@@ -1897,7 +2014,10 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1897
2014
  case SendInitialMetadata::kQueuedAndGotLatch:
1898
2015
  case SendInitialMetadata::kQueuedAndSetLatch:
1899
2016
  case SendInitialMetadata::kForwarded:
1900
- abort(); // not reachable
2017
+ Crash(absl::StrFormat(
2018
+ "ILLEGAL STATE: %s",
2019
+ SendInitialMetadata::StateString(
2020
+ send_initial_metadata_->state))); // not reachable
1901
2021
  break;
1902
2022
  case SendInitialMetadata::kQueuedWaitingForLatch:
1903
2023
  send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
@@ -1934,7 +2054,8 @@ Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
1934
2054
  return WrapMetadata(send_trailing_metadata_batch_->payload
1935
2055
  ->send_trailing_metadata.send_trailing_metadata);
1936
2056
  case SendTrailingState::kForwarded:
1937
- abort(); // unreachable
2057
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
2058
+ StateString(send_trailing_state_))); // unreachable
1938
2059
  case SendTrailingState::kCancelled:
1939
2060
  // We could translate cancelled_error to metadata and return it... BUT
1940
2061
  // we're not gonna be running much longer and the results going to be
@@ -1952,7 +2073,7 @@ void ServerCallData::RecvTrailingMetadataReadyCallback(
1952
2073
 
1953
2074
  void ServerCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
1954
2075
  if (grpc_trace_channel.enabled()) {
1955
- gpr_log(GPR_DEBUG, "%s: RecvTrailingMetadataReady error=%s md=%s",
2076
+ gpr_log(GPR_INFO, "%s: RecvTrailingMetadataReady error=%s md=%s",
1956
2077
  LogTag().c_str(), error.ToString().c_str(),
1957
2078
  recv_trailing_metadata_->DebugString().c_str());
1958
2079
  }
@@ -1971,7 +2092,7 @@ void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
1971
2092
  void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1972
2093
  Flusher flusher(this);
1973
2094
  if (grpc_trace_channel.enabled()) {
1974
- gpr_log(GPR_DEBUG, "%s: RecvInitialMetadataReady %s", LogTag().c_str(),
2095
+ gpr_log(GPR_INFO, "%s: RecvInitialMetadataReady %s", LogTag().c_str(),
1975
2096
  error.ToString().c_str());
1976
2097
  }
1977
2098
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kForwarded);
@@ -2033,7 +2154,7 @@ std::string ServerCallData::DebugString() const {
2033
2154
  void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2034
2155
  PollContext poll_ctx(this, flusher);
2035
2156
  if (grpc_trace_channel.enabled()) {
2036
- gpr_log(GPR_DEBUG, "%s: WakeInsideCombiner %s", LogTag().c_str(),
2157
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner %s", LogTag().c_str(),
2037
2158
  DebugString().c_str());
2038
2159
  }
2039
2160
  if (send_initial_metadata_ != nullptr &&
@@ -2059,7 +2180,7 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2059
2180
  Poll<ServerMetadataHandle> poll;
2060
2181
  poll = promise_();
2061
2182
  if (grpc_trace_channel.enabled()) {
2062
- gpr_log(GPR_DEBUG, "%s: WakeInsideCombiner poll=%s", LogTag().c_str(),
2183
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner poll=%s", LogTag().c_str(),
2063
2184
  PollToString(poll, [](const ServerMetadataHandle& h) {
2064
2185
  return h->DebugString();
2065
2186
  }).c_str());
@@ -2103,7 +2224,9 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2103
2224
  send_trailing_state_ = SendTrailingState::kForwarded;
2104
2225
  } break;
2105
2226
  case SendTrailingState::kForwarded:
2106
- abort(); // unreachable
2227
+ Crash(absl::StrFormat(
2228
+ "ILLEGAL STATE: %s",
2229
+ StateString(send_trailing_state_))); // unreachable
2107
2230
  break;
2108
2231
  case SendTrailingState::kInitial: {
2109
2232
  GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK);