grpc 1.42.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (2080) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +705 -451
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/endpoint_config.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +122 -44
  6. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  7. data/include/grpc/event_engine/memory_allocator.h +27 -26
  8. data/include/grpc/event_engine/memory_request.h +57 -0
  9. data/include/grpc/event_engine/port.h +1 -1
  10. data/include/grpc/event_engine/slice.h +286 -0
  11. data/include/grpc/event_engine/slice_buffer.h +135 -0
  12. data/include/grpc/grpc.h +43 -27
  13. data/include/grpc/grpc_posix.h +20 -19
  14. data/include/grpc/grpc_security.h +323 -195
  15. data/include/grpc/grpc_security_constants.h +1 -14
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  18. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  19. data/include/grpc/impl/codegen/compression_types.h +2 -3
  20. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  21. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  22. data/include/grpc/impl/codegen/grpc_types.h +31 -30
  23. data/include/grpc/impl/codegen/port_platform.h +107 -47
  24. data/include/grpc/impl/codegen/slice.h +5 -2
  25. data/include/grpc/slice.h +0 -11
  26. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  27. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  28. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  29. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  30. data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
  31. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  32. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  33. data/src/core/ext/filters/client_channel/backup_poller.cc +23 -19
  34. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  35. data/src/core/ext/filters/client_channel/channel_connectivity.cc +54 -30
  36. data/src/core/ext/filters/client_channel/client_channel.cc +684 -615
  37. data/src/core/ext/filters/client_channel/client_channel.h +103 -58
  38. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -6
  39. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  40. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  41. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  42. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -41
  43. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  44. data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
  45. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  46. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  47. data/src/core/ext/filters/client_channel/connector.h +13 -8
  48. data/src/core/ext/filters/client_channel/dynamic_filters.cc +36 -51
  49. data/src/core/ext/filters/client_channel/dynamic_filters.h +19 -10
  50. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  51. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  52. data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
  53. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  54. data/src/core/ext/filters/client_channel/http_proxy.cc +96 -130
  55. data/src/core/ext/filters/client_channel/http_proxy.h +25 -1
  56. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +12 -8
  57. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  58. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +36 -15
  60. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +15 -9
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -19
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +380 -313
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  66. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  67. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -5
  68. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  69. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  70. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  71. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  73. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1152 -0
  74. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  75. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +228 -207
  76. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +491 -452
  77. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +523 -391
  78. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +16 -6
  79. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +636 -626
  80. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +280 -254
  81. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +147 -134
  82. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +275 -223
  83. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +266 -249
  84. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +64 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +288 -277
  87. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -182
  88. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +589 -737
  89. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  90. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  91. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  92. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +43 -33
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -334
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -24
  96. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -71
  97. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +358 -357
  98. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  99. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  100. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  101. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  102. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +124 -255
  103. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
  104. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  105. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -102
  106. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +258 -0
  107. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +123 -0
  108. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
  109. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +648 -503
  110. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  111. data/src/core/ext/filters/client_channel/retry_filter.cc +382 -294
  112. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  113. data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
  114. data/src/core/ext/filters/client_channel/retry_service_config.h +41 -32
  115. data/src/core/ext/filters/client_channel/retry_throttle.cc +18 -39
  116. data/src/core/ext/filters/client_channel/retry_throttle.h +26 -13
  117. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +37 -19
  118. data/src/core/ext/filters/client_channel/subchannel.cc +272 -319
  119. data/src/core/ext/filters/client_channel/subchannel.h +100 -47
  120. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  121. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  123. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  124. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  125. data/src/core/ext/filters/deadline/deadline_filter.cc +48 -39
  126. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  127. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +179 -403
  128. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +38 -6
  129. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  130. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
  131. data/src/core/ext/filters/http/client/http_client_filter.cc +106 -551
  132. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  133. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  134. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  135. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  136. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +112 -333
  137. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  138. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +85 -161
  139. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  140. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  141. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  142. data/src/core/ext/filters/message_size/message_size_filter.cc +130 -159
  143. data/src/core/ext/filters/message_size/message_size_filter.h +41 -17
  144. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  145. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  146. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
  147. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  149. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  150. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +160 -0
  151. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +268 -110
  153. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  154. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +387 -216
  155. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  156. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  157. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  160. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +791 -1179
  161. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  162. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  163. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  164. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  165. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  166. data/src/core/ext/transport/chttp2/transport/flow_control.cc +297 -285
  167. data/src/core/ext/transport/chttp2/transport/flow_control.h +191 -293
  168. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  169. data/src/core/ext/transport/chttp2/transport/frame_data.cc +66 -218
  170. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  171. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +16 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  173. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -7
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -9
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +27 -59
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -16
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  181. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +381 -260
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  184. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
  185. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  186. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +157 -229
  187. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +143 -42
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +50 -50
  190. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  191. data/src/core/ext/transport/chttp2/transport/internal.h +74 -163
  192. data/src/core/ext/transport/chttp2/transport/parsing.cc +170 -91
  193. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  194. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  196. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  197. data/src/core/ext/transport/chttp2/transport/varint.h +13 -8
  198. data/src/core/ext/transport/chttp2/transport/writing.cc +150 -183
  199. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  200. data/src/core/ext/transport/inproc/inproc_transport.cc +237 -323
  201. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  202. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  207. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  208. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  224. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  226. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  227. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  228. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  229. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  230. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  231. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  233. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  234. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  235. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  236. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  237. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  240. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  241. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  274. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  275. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  276. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  277. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  278. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  279. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  283. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  284. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  285. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  290. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  291. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  292. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  293. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  294. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  295. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  296. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  297. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  298. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  299. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  300. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  301. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  302. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  303. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  304. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  305. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  329. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  333. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  340. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  343. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  401. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  402. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  404. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  405. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  414. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  415. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  432. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  433. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  446. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  447. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  448. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  449. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  450. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  451. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  452. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  453. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  454. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  456. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  457. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  458. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  459. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  460. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  467. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  468. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  469. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  471. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  472. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  473. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  474. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  475. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  476. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  477. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  478. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  479. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  482. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  483. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  484. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  485. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  486. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  487. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  490. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  491. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  492. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  493. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  494. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  495. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  513. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  515. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  516. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  517. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  519. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  521. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  522. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  523. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  524. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  525. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  528. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  529. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  530. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  531. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  532. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  533. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  535. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  568. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  569. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  570. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  571. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  573. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  580. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  581. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  584. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  587. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  588. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  589. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  590. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  593. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  594. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  595. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  596. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  597. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  598. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  637. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  638. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  639. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  640. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  641. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  642. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  644. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  645. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  646. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  647. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  648. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  649. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  650. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  651. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  652. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  653. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  655. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  667. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  668. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  669. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  670. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  671. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  672. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  673. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  675. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  676. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  677. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  693. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  694. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  697. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  698. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  699. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  700. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  701. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  702. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  703. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  704. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  705. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  706. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  709. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  710. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  711. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  713. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  714. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  715. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  716. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  717. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  719. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  720. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  721. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  723. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  724. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  725. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  729. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  730. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  731. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  732. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  733. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  734. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  735. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  736. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  737. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  741. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  743. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  744. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  745. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  746. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  747. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  755. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  756. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  757. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  758. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  759. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  760. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  761. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  762. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  763. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  764. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  765. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  767. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  768. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  769. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  770. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  771. data/src/core/ext/xds/certificate_provider_store.h +28 -2
  772. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +20 -14
  773. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +11 -3
  774. data/src/core/ext/xds/upb_utils.h +45 -0
  775. data/src/core/ext/xds/xds_api.cc +329 -3648
  776. data/src/core/ext/xds/xds_api.h +78 -630
  777. data/src/core/ext/xds/xds_bootstrap.cc +10 -443
  778. data/src/core/ext/xds/xds_bootstrap.h +44 -81
  779. data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
  780. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  781. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  782. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  783. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -21
  784. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  785. data/src/core/ext/xds/xds_client.cc +1278 -2037
  786. data/src/core/ext/xds/xds_client.h +158 -197
  787. data/src/core/ext/xds/xds_client_grpc.cc +210 -0
  788. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  789. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  790. data/src/core/ext/xds/xds_client_stats.h +9 -7
  791. data/src/core/ext/xds/xds_cluster.cc +659 -0
  792. data/src/core/ext/xds/xds_cluster.h +116 -0
  793. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +152 -0
  794. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +92 -0
  795. data/src/core/ext/xds/xds_common_types.cc +501 -0
  796. data/src/core/ext/xds/xds_common_types.h +108 -0
  797. data/src/core/ext/xds/xds_endpoint.cc +468 -0
  798. data/src/core/ext/xds/xds_endpoint.h +139 -0
  799. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -59
  800. data/src/core/ext/xds/xds_http_fault_filter.h +18 -24
  801. data/src/core/ext/xds/xds_http_filters.cc +66 -66
  802. data/src/core/ext/xds/xds_http_filters.h +72 -24
  803. data/src/core/ext/xds/xds_http_rbac_filter.cc +505 -0
  804. data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
  805. data/src/core/ext/xds/xds_lb_policy_registry.cc +243 -0
  806. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  807. data/src/core/ext/xds/xds_listener.cc +1144 -0
  808. data/src/core/ext/xds/xds_listener.h +224 -0
  809. data/src/core/ext/xds/xds_resource_type.h +104 -0
  810. data/src/core/ext/xds/xds_resource_type_impl.h +86 -0
  811. data/src/core/ext/xds/xds_route_config.cc +1166 -0
  812. data/src/core/ext/xds/xds_route_config.h +241 -0
  813. data/src/core/ext/xds/xds_routing.cc +264 -0
  814. data/src/core/ext/xds/xds_routing.h +106 -0
  815. data/src/core/ext/xds/xds_server_config_fetcher.cc +1155 -324
  816. data/src/core/ext/xds/xds_transport.h +86 -0
  817. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  818. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  819. data/src/core/lib/address_utils/parse_address.cc +36 -16
  820. data/src/core/lib/address_utils/parse_address.h +11 -2
  821. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  822. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  823. data/src/core/lib/avl/avl.h +476 -88
  824. data/src/core/lib/backoff/backoff.cc +9 -40
  825. data/src/core/lib/backoff/backoff.h +12 -12
  826. data/src/core/lib/channel/call_finalization.h +88 -0
  827. data/src/core/lib/channel/call_tracer.h +16 -7
  828. data/src/core/lib/channel/channel_args.cc +274 -48
  829. data/src/core/lib/channel/channel_args.h +413 -12
  830. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  831. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  832. data/src/core/lib/channel/channel_fwd.h +26 -0
  833. data/src/core/lib/channel/channel_stack.cc +64 -17
  834. data/src/core/lib/channel/channel_stack.h +96 -14
  835. data/src/core/lib/channel/channel_stack_builder.cc +18 -280
  836. data/src/core/lib/channel/channel_stack_builder.h +112 -150
  837. data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
  838. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  839. data/src/core/lib/channel/channel_trace.cc +12 -22
  840. data/src/core/lib/channel/channel_trace.h +6 -3
  841. data/src/core/lib/channel/channelz.cc +36 -49
  842. data/src/core/lib/channel/channelz.h +24 -7
  843. data/src/core/lib/channel/channelz_registry.cc +11 -19
  844. data/src/core/lib/channel/channelz_registry.h +10 -9
  845. data/src/core/lib/channel/connected_channel.cc +704 -48
  846. data/src/core/lib/channel/connected_channel.h +3 -4
  847. data/src/core/lib/channel/context.h +11 -0
  848. data/src/core/lib/channel/promise_based_filter.cc +2126 -0
  849. data/src/core/lib/channel/promise_based_filter.h +848 -0
  850. data/src/core/lib/channel/status_util.cc +29 -0
  851. data/src/core/lib/channel/status_util.h +9 -2
  852. data/src/core/lib/compression/compression.cc +26 -113
  853. data/src/core/lib/compression/compression_internal.cc +170 -204
  854. data/src/core/lib/compression/compression_internal.h +68 -72
  855. data/src/core/lib/compression/message_compress.cc +18 -16
  856. data/src/core/lib/compression/message_compress.h +4 -5
  857. data/src/core/lib/config/core_configuration.cc +18 -3
  858. data/src/core/lib/config/core_configuration.h +133 -36
  859. data/src/core/lib/debug/event_log.cc +88 -0
  860. data/src/core/lib/debug/event_log.h +81 -0
  861. data/src/core/lib/debug/histogram_view.cc +69 -0
  862. data/src/core/lib/debug/histogram_view.h +37 -0
  863. data/src/core/lib/debug/stats.cc +31 -135
  864. data/src/core/lib/debug/stats.h +30 -37
  865. data/src/core/lib/debug/stats_data.cc +290 -638
  866. data/src/core/lib/debug/stats_data.h +263 -527
  867. data/src/core/lib/debug/trace.cc +0 -2
  868. data/src/core/lib/debug/trace.h +15 -14
  869. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
  870. data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
  871. data/src/core/lib/event_engine/common_closures.h +71 -0
  872. data/src/core/lib/event_engine/default_event_engine.cc +94 -0
  873. data/src/core/lib/event_engine/default_event_engine.h +49 -0
  874. data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
  875. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  876. data/src/core/lib/event_engine/executor/executor.h +38 -0
  877. data/src/core/lib/event_engine/forkable.cc +101 -0
  878. data/src/core/lib/event_engine/forkable.h +61 -0
  879. data/src/core/lib/event_engine/handle_containers.h +67 -0
  880. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  881. data/src/core/lib/event_engine/poller.h +62 -0
  882. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  883. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  884. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  885. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  886. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  887. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  888. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  889. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  890. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  891. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  892. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  893. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  894. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  895. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +577 -0
  896. data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
  897. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  898. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  899. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  900. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  901. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  902. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  903. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  904. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +174 -0
  905. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  906. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  907. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  908. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  909. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  910. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  911. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  912. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  913. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  914. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  915. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  916. data/src/core/lib/event_engine/slice.cc +103 -0
  917. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  918. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  919. data/src/core/lib/event_engine/thread_pool.cc +276 -0
  920. data/src/core/lib/event_engine/thread_pool.h +137 -0
  921. data/src/core/lib/event_engine/time_util.cc +30 -0
  922. data/src/core/lib/event_engine/time_util.h +32 -0
  923. data/src/core/lib/event_engine/trace.cc +18 -0
  924. data/src/core/lib/event_engine/trace.h +30 -0
  925. data/src/core/lib/event_engine/utils.cc +44 -0
  926. data/src/core/lib/event_engine/utils.h +36 -0
  927. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  928. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  929. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  930. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  931. data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
  932. data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
  933. data/src/core/lib/experiments/config.cc +146 -0
  934. data/src/core/lib/experiments/config.h +43 -0
  935. data/src/core/lib/experiments/experiments.cc +86 -0
  936. data/src/core/lib/experiments/experiments.h +63 -0
  937. data/src/core/lib/gpr/alloc.cc +1 -9
  938. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  939. data/src/core/lib/gpr/log.cc +5 -0
  940. data/src/core/lib/gpr/log_linux.cc +3 -4
  941. data/src/core/lib/gpr/log_windows.cc +0 -1
  942. data/src/core/lib/gpr/string.h +1 -1
  943. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  944. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  945. data/src/core/lib/gpr/sync_posix.cc +1 -14
  946. data/src/core/lib/gpr/time.cc +13 -10
  947. data/src/core/lib/gpr/time_posix.cc +6 -15
  948. data/src/core/lib/gpr/time_precise.h +1 -1
  949. data/src/core/lib/gpr/time_windows.cc +10 -7
  950. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  951. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  952. data/src/core/lib/gpr/useful.h +58 -0
  953. data/src/core/lib/gprpp/bitset.h +27 -14
  954. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  955. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  956. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  957. data/src/core/lib/gprpp/debug_location.h +41 -7
  958. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  959. data/src/core/lib/gprpp/env.h +53 -0
  960. data/src/core/lib/gprpp/env_linux.cc +80 -0
  961. data/src/core/lib/gprpp/env_posix.cc +47 -0
  962. data/src/core/lib/gprpp/env_windows.cc +56 -0
  963. data/src/core/lib/gprpp/examine_stack.h +0 -1
  964. data/src/core/lib/gprpp/fork.cc +17 -28
  965. data/src/core/lib/gprpp/fork.h +0 -8
  966. data/src/core/lib/gprpp/global_config.h +2 -4
  967. data/src/core/lib/gprpp/global_config_env.cc +16 -14
  968. data/src/core/lib/gprpp/global_config_env.h +5 -3
  969. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  970. data/src/core/lib/gprpp/host_port.cc +2 -0
  971. data/src/core/lib/gprpp/load_file.cc +75 -0
  972. data/src/core/lib/gprpp/load_file.h +33 -0
  973. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  974. data/src/core/lib/gprpp/match.h +2 -0
  975. data/src/core/lib/gprpp/memory.h +1 -5
  976. data/src/core/lib/gprpp/no_destruct.h +94 -0
  977. data/src/core/lib/gprpp/notification.h +67 -0
  978. data/src/core/lib/gprpp/orphanable.h +2 -5
  979. data/src/core/lib/gprpp/packed_table.h +40 -0
  980. data/src/core/lib/gprpp/per_cpu.h +46 -0
  981. data/src/core/lib/gprpp/ref_counted.h +4 -4
  982. data/src/core/lib/gprpp/ref_counted_ptr.h +23 -39
  983. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  984. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  985. data/src/core/lib/gprpp/stat.h +0 -2
  986. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  987. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  988. data/src/core/lib/gprpp/status_helper.cc +75 -48
  989. data/src/core/lib/gprpp/status_helper.h +16 -21
  990. data/src/core/lib/gprpp/strerror.cc +41 -0
  991. data/src/core/lib/gprpp/strerror.h +29 -0
  992. data/src/core/lib/gprpp/sync.h +3 -1
  993. data/src/core/lib/gprpp/table.h +42 -2
  994. data/src/core/lib/gprpp/tchar.cc +49 -0
  995. data/src/core/lib/gprpp/tchar.h +33 -0
  996. data/src/core/lib/gprpp/thd.h +2 -5
  997. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  998. data/src/core/lib/gprpp/thd_windows.cc +3 -2
  999. data/src/core/lib/gprpp/time.cc +234 -0
  1000. data/src/core/lib/gprpp/time.h +367 -0
  1001. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  1002. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1003. data/src/core/lib/gprpp/time_util.cc +4 -0
  1004. data/src/core/lib/gprpp/time_util.h +1 -1
  1005. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  1006. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  1007. data/src/core/lib/gprpp/validation_errors.h +127 -0
  1008. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  1009. data/src/core/lib/gprpp/work_serializer.h +86 -0
  1010. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1011. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1012. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1013. data/src/core/lib/http/format_request.cc +62 -29
  1014. data/src/core/lib/http/format_request.h +10 -7
  1015. data/src/core/lib/http/httpcli.cc +313 -244
  1016. data/src/core/lib/http/httpcli.h +234 -90
  1017. data/src/core/lib/http/httpcli_security_connector.cc +84 -86
  1018. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  1019. data/src/core/lib/http/parser.cc +124 -65
  1020. data/src/core/lib/http/parser.h +18 -2
  1021. data/src/core/lib/iomgr/buffer_list.cc +110 -121
  1022. data/src/core/lib/iomgr/buffer_list.h +68 -52
  1023. data/src/core/lib/iomgr/call_combiner.cc +17 -40
  1024. data/src/core/lib/iomgr/call_combiner.h +3 -4
  1025. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  1026. data/src/core/lib/iomgr/closure.h +68 -14
  1027. data/src/core/lib/iomgr/combiner.cc +11 -9
  1028. data/src/core/lib/iomgr/endpoint.cc +4 -4
  1029. data/src/core/lib/iomgr/endpoint.h +7 -6
  1030. data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -53
  1031. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  1032. data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
  1033. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  1034. data/src/core/lib/iomgr/error.cc +30 -813
  1035. data/src/core/lib/iomgr/error.h +22 -295
  1036. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  1037. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  1038. data/src/core/lib/iomgr/ev_epoll1_linux.cc +88 -84
  1039. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  1040. data/src/core/lib/iomgr/ev_poll_posix.cc +123 -109
  1041. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  1042. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  1043. data/src/core/lib/iomgr/ev_posix.h +6 -4
  1044. data/src/core/lib/iomgr/exec_ctx.cc +14 -109
  1045. data/src/core/lib/iomgr/exec_ctx.h +24 -66
  1046. data/src/core/lib/iomgr/executor.cc +16 -21
  1047. data/src/core/lib/iomgr/executor.h +1 -4
  1048. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  1049. data/src/core/lib/iomgr/internal_errqueue.cc +40 -47
  1050. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1051. data/src/core/lib/iomgr/iocp_windows.cc +10 -10
  1052. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1053. data/src/core/lib/iomgr/iomgr.cc +6 -2
  1054. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1055. data/src/core/lib/iomgr/iomgr_posix.cc +4 -3
  1056. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +4 -2
  1057. data/src/core/lib/iomgr/iomgr_windows.cc +3 -2
  1058. data/src/core/lib/iomgr/load_file.cc +5 -9
  1059. data/src/core/lib/iomgr/lockfree_event.cc +10 -27
  1060. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1061. data/src/core/lib/iomgr/pollset.cc +1 -1
  1062. data/src/core/lib/iomgr/pollset.h +5 -5
  1063. data/src/core/lib/iomgr/pollset_set.h +1 -3
  1064. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1065. data/src/core/lib/iomgr/port.h +29 -12
  1066. data/src/core/lib/iomgr/python_util.h +2 -2
  1067. data/src/core/lib/iomgr/resolve_address.cc +16 -22
  1068. data/src/core/lib/iomgr/resolve_address.h +79 -46
  1069. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1070. data/src/core/lib/iomgr/resolve_address_posix.cc +112 -78
  1071. data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
  1072. data/src/core/lib/iomgr/resolve_address_windows.cc +125 -81
  1073. data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
  1074. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1075. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1076. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1077. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +63 -0
  1078. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1079. data/src/core/lib/iomgr/socket_utils_common_posix.cc +44 -81
  1080. data/src/core/lib/iomgr/socket_utils_posix.cc +84 -1
  1081. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  1082. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  1083. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1084. data/src/core/lib/iomgr/tcp_client.cc +11 -9
  1085. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1086. data/src/core/lib/iomgr/tcp_client_cfstream.cc +28 -26
  1087. data/src/core/lib/iomgr/tcp_client_posix.cc +194 -85
  1088. data/src/core/lib/iomgr/tcp_client_posix.h +14 -12
  1089. data/src/core/lib/iomgr/tcp_client_windows.cc +33 -35
  1090. data/src/core/lib/iomgr/tcp_posix.cc +465 -254
  1091. data/src/core/lib/iomgr/tcp_posix.h +4 -4
  1092. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  1093. data/src/core/lib/iomgr/tcp_server.h +5 -4
  1094. data/src/core/lib/iomgr/tcp_server_posix.cc +109 -101
  1095. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -20
  1096. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +50 -49
  1097. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -16
  1098. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  1099. data/src/core/lib/iomgr/tcp_server_windows.cc +45 -48
  1100. data/src/core/lib/iomgr/tcp_windows.cc +43 -46
  1101. data/src/core/lib/iomgr/tcp_windows.h +1 -3
  1102. data/src/core/lib/iomgr/timer.cc +2 -2
  1103. data/src/core/lib/iomgr/timer.h +18 -13
  1104. data/src/core/lib/iomgr/timer_generic.cc +108 -97
  1105. data/src/core/lib/iomgr/timer_manager.cc +14 -14
  1106. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -34
  1107. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1108. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1109. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -5
  1110. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  1111. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1112. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1113. data/src/core/lib/json/json.h +20 -24
  1114. data/src/core/lib/json/json_args.h +34 -0
  1115. data/src/core/lib/json/json_channel_args.h +42 -0
  1116. data/src/core/lib/json/json_object_loader.cc +207 -0
  1117. data/src/core/lib/json/json_object_loader.h +620 -0
  1118. data/src/core/lib/json/json_reader.cc +155 -75
  1119. data/src/core/lib/json/json_util.cc +17 -37
  1120. data/src/core/lib/json/json_util.h +18 -9
  1121. data/src/core/lib/json/json_writer.cc +6 -1
  1122. data/src/core/lib/load_balancing/lb_policy.cc +93 -0
  1123. data/src/core/lib/load_balancing/lb_policy.h +439 -0
  1124. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1125. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  1126. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1127. data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
  1128. data/src/core/lib/matchers/matchers.cc +10 -8
  1129. data/src/core/lib/matchers/matchers.h +2 -0
  1130. data/src/core/lib/promise/activity.cc +134 -0
  1131. data/src/core/lib/promise/activity.h +604 -0
  1132. data/src/core/lib/promise/arena_promise.h +230 -0
  1133. data/src/core/lib/promise/context.h +92 -0
  1134. data/src/core/lib/promise/detail/basic_seq.h +497 -0
  1135. data/src/core/lib/promise/detail/promise_factory.h +235 -0
  1136. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1137. data/src/core/lib/promise/detail/status.h +78 -0
  1138. data/src/core/lib/promise/detail/switch.h +1455 -0
  1139. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +50 -0
  1140. data/src/core/lib/promise/for_each.h +129 -0
  1141. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1142. data/src/core/lib/promise/latch.h +103 -0
  1143. data/src/core/lib/promise/loop.h +138 -0
  1144. data/src/core/lib/promise/map.h +87 -0
  1145. data/src/core/lib/promise/map_pipe.h +87 -0
  1146. data/src/core/lib/promise/pipe.cc +19 -0
  1147. data/src/core/lib/promise/pipe.h +505 -0
  1148. data/src/core/lib/promise/poll.h +79 -0
  1149. data/src/core/lib/promise/promise.h +96 -0
  1150. data/src/core/lib/promise/race.h +83 -0
  1151. data/src/core/lib/promise/seq.h +106 -0
  1152. data/src/core/lib/promise/sleep.cc +90 -0
  1153. data/src/core/lib/promise/sleep.h +84 -0
  1154. data/src/core/lib/promise/try_concurrently.h +341 -0
  1155. data/src/core/lib/promise/try_seq.h +174 -0
  1156. data/src/core/lib/resolver/resolver.cc +37 -0
  1157. data/src/core/lib/resolver/resolver.h +138 -0
  1158. data/src/core/lib/resolver/resolver_factory.h +77 -0
  1159. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1160. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1161. data/src/core/lib/resolver/server_address.cc +181 -0
  1162. data/src/core/lib/resolver/server_address.h +145 -0
  1163. data/src/core/lib/resource_quota/api.cc +104 -0
  1164. data/src/core/lib/resource_quota/api.h +49 -0
  1165. data/src/core/lib/resource_quota/arena.cc +138 -0
  1166. data/src/core/lib/resource_quota/arena.h +252 -0
  1167. data/src/core/lib/resource_quota/memory_quota.cc +603 -0
  1168. data/src/core/lib/resource_quota/memory_quota.h +530 -0
  1169. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1170. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1171. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1172. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1173. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1174. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1175. data/src/core/lib/resource_quota/trace.cc +19 -0
  1176. data/src/core/lib/resource_quota/trace.h +24 -0
  1177. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1178. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1179. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1180. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1181. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
  1182. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1183. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
  1184. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1185. data/src/core/lib/security/authorization/matchers.cc +241 -0
  1186. data/src/core/lib/security/authorization/matchers.h +218 -0
  1187. data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
  1188. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1189. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
  1190. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1191. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1192. data/src/core/lib/security/context/security_context.cc +9 -4
  1193. data/src/core/lib/security/context/security_context.h +33 -4
  1194. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1195. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1198. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1199. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1200. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1201. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1202. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1203. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1204. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1205. data/src/core/lib/security/credentials/credentials.h +106 -99
  1206. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +249 -107
  1207. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1208. data/src/core/lib/security/credentials/external/aws_request_signer.cc +13 -3
  1209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +137 -103
  1210. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1211. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
  1212. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1213. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +76 -45
  1214. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1215. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -43
  1216. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1217. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -8
  1218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +118 -80
  1219. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1220. data/src/core/lib/security/credentials/iam/iam_credentials.cc +32 -30
  1221. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1222. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1223. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1224. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -12
  1225. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1226. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1227. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +96 -61
  1229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +6 -4
  1230. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1231. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1232. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +214 -222
  1233. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1234. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +104 -156
  1235. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1236. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1237. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +21 -29
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +75 -58
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +73 -14
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1244. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1245. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1246. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1247. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1248. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1249. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1250. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1251. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1252. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +46 -45
  1253. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1254. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -70
  1255. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1256. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +23 -24
  1257. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +34 -27
  1258. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
  1260. data/src/core/lib/security/security_connector/load_system_roots_supported.h +46 -0
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.cc +52 -40
  1262. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1263. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1264. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -34
  1266. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1267. data/src/core/lib/security/security_connector/ssl_utils.cc +54 -40
  1268. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +391 -230
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1272. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +122 -368
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +282 -158
  1275. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1276. data/src/core/lib/security/transport/security_handshaker.cc +123 -92
  1277. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +87 -58
  1279. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  1280. data/src/core/lib/security/util/json_util.cc +7 -7
  1281. data/src/core/lib/security/util/json_util.h +0 -2
  1282. data/src/core/lib/service_config/service_config.h +89 -0
  1283. data/src/core/lib/service_config/service_config_call_data.h +76 -0
  1284. data/src/core/lib/service_config/service_config_impl.cc +191 -0
  1285. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1286. data/src/core/lib/service_config/service_config_parser.cc +81 -0
  1287. data/src/core/lib/service_config/service_config_parser.h +105 -0
  1288. data/src/core/lib/slice/b64.cc +2 -2
  1289. data/src/core/lib/slice/b64.h +2 -0
  1290. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1291. data/src/core/lib/slice/percent_encoding.h +4 -16
  1292. data/src/core/lib/slice/slice.cc +94 -184
  1293. data/src/core/lib/slice/slice.h +402 -0
  1294. data/src/core/lib/slice/slice_buffer.cc +92 -33
  1295. data/src/core/lib/slice/slice_buffer.h +137 -0
  1296. data/src/core/lib/slice/slice_internal.h +22 -48
  1297. data/src/core/lib/slice/slice_refcount.h +32 -93
  1298. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1299. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1300. data/src/core/lib/surface/builtins.cc +11 -6
  1301. data/src/core/lib/surface/byte_buffer.cc +9 -4
  1302. data/src/core/lib/surface/byte_buffer_reader.cc +7 -7
  1303. data/src/core/lib/surface/call.cc +2324 -1337
  1304. data/src/core/lib/surface/call.h +69 -21
  1305. data/src/core/lib/surface/call_details.cc +6 -6
  1306. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1307. data/src/core/lib/surface/call_test_only.h +4 -1
  1308. data/src/core/lib/surface/call_trace.cc +113 -0
  1309. data/src/core/lib/surface/call_trace.h +30 -0
  1310. data/src/core/lib/surface/channel.cc +230 -328
  1311. data/src/core/lib/surface/channel.h +110 -74
  1312. data/src/core/lib/surface/channel_init.cc +2 -3
  1313. data/src/core/lib/surface/channel_init.h +4 -6
  1314. data/src/core/lib/surface/channel_ping.cc +9 -3
  1315. data/src/core/lib/surface/channel_stack_type.cc +4 -2
  1316. data/src/core/lib/surface/channel_stack_type.h +2 -2
  1317. data/src/core/lib/surface/completion_queue.cc +76 -94
  1318. data/src/core/lib/surface/completion_queue.h +8 -6
  1319. data/src/core/lib/surface/completion_queue_factory.cc +6 -0
  1320. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1321. data/src/core/lib/surface/event_string.cc +1 -7
  1322. data/src/core/lib/surface/event_string.h +1 -1
  1323. data/src/core/lib/surface/init.cc +87 -78
  1324. data/src/core/lib/surface/init.h +0 -10
  1325. data/src/core/lib/surface/init_internally.cc +24 -0
  1326. data/src/core/lib/surface/init_internally.h +36 -0
  1327. data/src/core/lib/surface/lame_client.cc +69 -107
  1328. data/src/core/lib/surface/lame_client.h +41 -3
  1329. data/src/core/lib/surface/metadata_array.cc +2 -0
  1330. data/src/core/lib/surface/server.cc +153 -206
  1331. data/src/core/lib/surface/server.h +64 -36
  1332. data/src/core/lib/surface/validate_metadata.cc +17 -31
  1333. data/src/core/lib/surface/validate_metadata.h +3 -0
  1334. data/src/core/lib/surface/version.cc +2 -2
  1335. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1336. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1337. data/src/core/lib/transport/connectivity_state.cc +7 -6
  1338. data/src/core/lib/transport/connectivity_state.h +3 -4
  1339. data/src/core/lib/transport/error_utils.cc +45 -65
  1340. data/src/core/lib/transport/error_utils.h +10 -5
  1341. data/src/core/lib/transport/handshaker.cc +225 -0
  1342. data/src/core/lib/transport/handshaker.h +167 -0
  1343. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1344. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1345. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1346. data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
  1347. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1348. data/src/core/lib/transport/metadata_batch.cc +266 -69
  1349. data/src/core/lib/transport/metadata_batch.h +1108 -837
  1350. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  1351. data/src/core/lib/transport/parsed_metadata.h +239 -93
  1352. data/src/core/lib/transport/pid_controller.cc +4 -4
  1353. data/src/core/lib/transport/status_conversion.cc +3 -3
  1354. data/src/core/lib/transport/status_conversion.h +3 -3
  1355. data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
  1356. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1357. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1358. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1359. data/src/core/lib/transport/transport.cc +82 -58
  1360. data/src/core/lib/transport/transport.h +154 -35
  1361. data/src/core/lib/transport/transport_fwd.h +20 -0
  1362. data/src/core/lib/transport/transport_impl.h +24 -0
  1363. data/src/core/lib/transport/transport_op_string.cc +24 -66
  1364. data/src/core/lib/uri/uri_parser.cc +248 -66
  1365. data/src/core/lib/uri/uri_parser.h +39 -25
  1366. data/src/core/plugin_registry/grpc_plugin_registry.cc +56 -140
  1367. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +61 -0
  1368. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +76 -52
  1369. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1370. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -28
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -3
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +14 -6
  1381. data/src/core/tsi/fake_transport_security.cc +69 -34
  1382. data/src/core/tsi/fake_transport_security.h +6 -0
  1383. data/src/core/tsi/local_transport_security.cc +24 -28
  1384. data/src/core/tsi/local_transport_security.h +1 -4
  1385. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +145 -0
  1386. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1387. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1388. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +3 -1
  1389. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1390. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +8 -2
  1391. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1392. data/src/core/tsi/ssl_transport_security.h +47 -8
  1393. data/src/core/tsi/transport_security.cc +18 -6
  1394. data/src/core/tsi/transport_security.h +2 -1
  1395. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1396. data/src/core/tsi/transport_security_grpc.h +5 -2
  1397. data/src/core/tsi/transport_security_interface.h +19 -5
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1401. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1402. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1403. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1404. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -36
  1405. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -55
  1406. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1407. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1408. data/src/ruby/lib/grpc/errors.rb +1 -1
  1409. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1410. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1411. data/src/ruby/lib/grpc/version.rb +1 -1
  1412. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1414. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1415. data/src/ruby/pb/test/client.rb +769 -0
  1416. data/src/ruby/pb/test/server.rb +252 -0
  1417. data/src/ruby/pb/test/xds_client.rb +415 -0
  1418. data/src/ruby/spec/channel_spec.rb +5 -43
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1427. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1434. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1436. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1437. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1439. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1442. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1443. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1445. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1446. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1447. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1448. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1449. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1450. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1451. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1452. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1453. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1454. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1455. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1456. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1457. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1458. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1459. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1460. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1461. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1462. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1463. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1464. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1465. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1466. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1467. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1468. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1469. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1470. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1471. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1474. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1475. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1476. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1477. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1478. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1479. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1480. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1481. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1482. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1483. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1484. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1485. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1486. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1487. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1489. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1490. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1491. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1492. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1493. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1494. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1495. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1496. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1497. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1498. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1499. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1500. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1501. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1503. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1504. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1505. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1506. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1507. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1508. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1509. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1510. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1511. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1522. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1523. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1524. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1525. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1526. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1528. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1529. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1530. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1531. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1532. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1533. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1534. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1535. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1536. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1537. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1538. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1539. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1540. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1541. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1542. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1543. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1544. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1545. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1546. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1547. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1548. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1549. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1550. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1551. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1552. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1553. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1554. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1555. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1556. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1557. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1558. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1559. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1560. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1561. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1562. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1564. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1585. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1588. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1592. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1605. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1606. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1607. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1608. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1609. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1610. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1611. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1612. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1613. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1614. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1615. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1616. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1617. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1618. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1619. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1620. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1621. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1622. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1627. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1628. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1629. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1630. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1631. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1632. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1633. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1634. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1635. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1636. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1637. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1638. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1639. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1640. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1641. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1642. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1643. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1644. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1645. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1646. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1647. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1656. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1657. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1658. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1659. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1660. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1661. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1665. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1666. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1669. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1670. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1671. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1672. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1693. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1694. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1695. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1697. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1698. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1699. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1700. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1702. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1703. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1704. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1705. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1706. data/third_party/cares/cares/include/ares.h +742 -0
  1707. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1708. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1709. data/third_party/cares/cares/include/ares_version.h +24 -0
  1710. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1711. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1712. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1713. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1714. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1715. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1716. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1717. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1718. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1719. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1720. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1721. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1722. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1723. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1724. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1725. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1726. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1727. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1728. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1729. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1730. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1731. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1732. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1733. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1734. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1735. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1736. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1737. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1738. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1739. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1741. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1742. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1743. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1744. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1745. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1746. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1747. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1748. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1749. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1750. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1751. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1752. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1753. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1754. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1755. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1756. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1757. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1758. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1759. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1760. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1761. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1762. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1763. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1764. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1765. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1766. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1767. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1768. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1769. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1770. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1771. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1772. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1773. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1774. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1775. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1776. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1777. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1778. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1779. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1780. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1781. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1782. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1783. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1784. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1785. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1786. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1787. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1788. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1789. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1790. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1791. data/third_party/upb/upb/arena.c +277 -0
  1792. data/third_party/upb/upb/arena.h +225 -0
  1793. data/third_party/upb/upb/array.c +114 -0
  1794. data/third_party/upb/upb/array.h +83 -0
  1795. data/third_party/upb/upb/collections.h +36 -0
  1796. data/third_party/upb/upb/decode.c +832 -382
  1797. data/third_party/upb/upb/decode.h +44 -17
  1798. data/third_party/upb/upb/decode_fast.c +304 -302
  1799. data/third_party/upb/upb/decode_fast.h +18 -18
  1800. data/third_party/upb/upb/def.c +2083 -982
  1801. data/third_party/upb/upb/def.h +339 -260
  1802. data/third_party/upb/upb/def.hpp +144 -171
  1803. data/third_party/upb/upb/encode.c +287 -185
  1804. data/third_party/upb/upb/encode.h +24 -16
  1805. data/third_party/upb/upb/extension_registry.c +93 -0
  1806. data/third_party/upb/upb/extension_registry.h +84 -0
  1807. data/third_party/upb/upb/internal/decode.h +211 -0
  1808. data/third_party/upb/upb/internal/table.h +385 -0
  1809. data/third_party/upb/upb/internal/upb.h +68 -0
  1810. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1811. data/third_party/upb/upb/json_decode.c +1512 -0
  1812. data/third_party/upb/upb/json_decode.h +47 -0
  1813. data/third_party/upb/upb/json_encode.c +780 -0
  1814. data/third_party/upb/upb/json_encode.h +65 -0
  1815. data/third_party/upb/upb/map.c +108 -0
  1816. data/third_party/upb/upb/map.h +117 -0
  1817. data/third_party/upb/upb/message_value.h +66 -0
  1818. data/third_party/upb/upb/mini_table.c +1147 -0
  1819. data/third_party/upb/upb/mini_table.h +189 -0
  1820. data/third_party/upb/upb/mini_table.hpp +112 -0
  1821. data/third_party/upb/upb/msg.c +132 -161
  1822. data/third_party/upb/upb/msg.h +18 -55
  1823. data/third_party/upb/upb/msg_internal.h +404 -254
  1824. data/third_party/upb/upb/port_def.inc +10 -1
  1825. data/third_party/upb/upb/port_undef.inc +2 -0
  1826. data/third_party/upb/upb/reflection.c +203 -280
  1827. data/third_party/upb/upb/reflection.h +40 -126
  1828. data/third_party/upb/upb/reflection.hpp +6 -6
  1829. data/third_party/upb/upb/status.c +86 -0
  1830. data/third_party/upb/upb/status.h +66 -0
  1831. data/third_party/upb/upb/table.c +233 -149
  1832. data/third_party/upb/upb/table_internal.h +9 -324
  1833. data/third_party/upb/upb/text_encode.c +116 -92
  1834. data/third_party/upb/upb/text_encode.h +10 -10
  1835. data/third_party/upb/upb/upb.c +34 -273
  1836. data/third_party/upb/upb/upb.h +79 -262
  1837. data/third_party/upb/upb/upb.hpp +31 -28
  1838. data/third_party/xxhash/xxhash.h +607 -352
  1839. data/third_party/zlib/compress.c +3 -3
  1840. data/third_party/zlib/crc32.c +975 -292
  1841. data/third_party/zlib/crc32.h +9441 -436
  1842. data/third_party/zlib/deflate.c +183 -129
  1843. data/third_party/zlib/deflate.h +12 -15
  1844. data/third_party/zlib/gzguts.h +3 -2
  1845. data/third_party/zlib/gzlib.c +6 -4
  1846. data/third_party/zlib/gzread.c +8 -12
  1847. data/third_party/zlib/gzwrite.c +26 -14
  1848. data/third_party/zlib/infback.c +12 -8
  1849. data/third_party/zlib/inffast.c +14 -14
  1850. data/third_party/zlib/inflate.c +44 -10
  1851. data/third_party/zlib/inflate.h +3 -2
  1852. data/third_party/zlib/inftrees.c +3 -3
  1853. data/third_party/zlib/inftrees.h +1 -1
  1854. data/third_party/zlib/trees.c +85 -107
  1855. data/third_party/zlib/uncompr.c +2 -2
  1856. data/third_party/zlib/zconf.h +16 -3
  1857. data/third_party/zlib/zlib.h +129 -106
  1858. data/third_party/zlib/zutil.c +11 -9
  1859. data/third_party/zlib/zutil.h +13 -9
  1860. metadata +713 -295
  1861. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -392
  1862. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1863. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1864. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1865. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
  1866. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
  1867. data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
  1868. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1869. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1870. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1871. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1872. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1873. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1874. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  1875. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
  1876. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1877. data/src/core/ext/filters/client_channel/resolver.h +0 -136
  1878. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
  1879. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1880. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1881. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
  1882. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
  1883. data/src/core/ext/filters/client_channel/server_address.cc +0 -170
  1884. data/src/core/ext/filters/client_channel/server_address.h +0 -144
  1885. data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
  1886. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1887. data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
  1888. data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
  1889. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
  1890. data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
  1891. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1892. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  1893. data/src/core/ext/service_config/service_config.cc +0 -227
  1894. data/src/core/ext/service_config/service_config.h +0 -127
  1895. data/src/core/ext/service_config/service_config_call_data.h +0 -72
  1896. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1897. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1898. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1899. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1900. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1901. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1902. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1903. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1904. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1905. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1906. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1907. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
  1908. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1909. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1910. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1911. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1912. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1913. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1914. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1915. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1916. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1918. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1919. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1920. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1921. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1922. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1923. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1924. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1925. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1926. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1927. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1928. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1929. data/src/core/ext/xds/certificate_provider_factory.h +0 -61
  1930. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1931. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1932. data/src/core/lib/avl/avl.cc +0 -306
  1933. data/src/core/lib/channel/handshaker.cc +0 -222
  1934. data/src/core/lib/channel/handshaker.h +0 -161
  1935. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1936. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1937. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1938. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1939. data/src/core/lib/compression/compression_args.cc +0 -138
  1940. data/src/core/lib/compression/compression_args.h +0 -56
  1941. data/src/core/lib/compression/stream_compression.cc +0 -81
  1942. data/src/core/lib/compression/stream_compression.h +0 -117
  1943. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1944. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1945. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1946. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1947. data/src/core/lib/event_engine/endpoint_config.cc +0 -45
  1948. data/src/core/lib/event_engine/endpoint_config_internal.h +0 -42
  1949. data/src/core/lib/event_engine/event_engine.cc +0 -50
  1950. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1951. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1952. data/src/core/lib/gpr/env.h +0 -40
  1953. data/src/core/lib/gpr/env_linux.cc +0 -75
  1954. data/src/core/lib/gpr/env_posix.cc +0 -46
  1955. data/src/core/lib/gpr/env_windows.cc +0 -74
  1956. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1957. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1958. data/src/core/lib/gpr/string_windows.h +0 -32
  1959. data/src/core/lib/gpr/tls.h +0 -151
  1960. data/src/core/lib/gprpp/arena.cc +0 -104
  1961. data/src/core/lib/gprpp/arena.h +0 -131
  1962. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1963. data/src/core/lib/iomgr/error_internal.h +0 -66
  1964. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1965. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1966. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1967. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1968. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1969. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1970. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1971. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1972. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1973. data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
  1974. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  1975. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
  1976. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
  1977. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1978. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1979. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1980. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1981. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1982. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1983. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1984. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1985. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1986. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1987. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1988. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1989. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1990. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1991. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1992. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1993. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1994. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1995. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1996. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1997. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1998. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1999. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  2000. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  2001. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2002. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2003. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  2004. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2005. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  2006. data/src/core/lib/iomgr/work_serializer.h +0 -81
  2007. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2008. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2009. data/src/core/lib/profiling/timers.h +0 -94
  2010. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  2011. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  2012. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  2013. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
  2014. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  2015. data/src/core/lib/slice/slice_api.cc +0 -39
  2016. data/src/core/lib/slice/slice_intern.cc +0 -367
  2017. data/src/core/lib/slice/slice_refcount.cc +0 -17
  2018. data/src/core/lib/slice/slice_refcount_base.h +0 -173
  2019. data/src/core/lib/slice/slice_split.cc +0 -100
  2020. data/src/core/lib/slice/slice_split.h +0 -40
  2021. data/src/core/lib/slice/slice_utils.h +0 -200
  2022. data/src/core/lib/slice/static_slice.cc +0 -529
  2023. data/src/core/lib/slice/static_slice.h +0 -331
  2024. data/src/core/lib/surface/init_secure.cc +0 -103
  2025. data/src/core/lib/transport/byte_stream.cc +0 -158
  2026. data/src/core/lib/transport/byte_stream.h +0 -166
  2027. data/src/core/lib/transport/metadata.cc +0 -714
  2028. data/src/core/lib/transport/metadata.h +0 -449
  2029. data/src/core/lib/transport/static_metadata.cc +0 -1117
  2030. data/src/core/lib/transport/static_metadata.h +0 -340
  2031. data/src/core/lib/transport/status_metadata.cc +0 -63
  2032. data/src/core/lib/transport/status_metadata.h +0 -48
  2033. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2034. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2035. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  2036. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +0 -111
  2037. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +0 -48
  2038. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2039. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2040. data/third_party/cares/cares/ares.h +0 -670
  2041. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2042. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2043. data/third_party/cares/cares/ares_create_query.c +0 -206
  2044. data/third_party/cares/cares/ares_data.c +0 -222
  2045. data/third_party/cares/cares/ares_data.h +0 -72
  2046. data/third_party/cares/cares/ares_dns.h +0 -103
  2047. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2048. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2049. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2050. data/third_party/cares/cares/ares_getenv.c +0 -30
  2051. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2052. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2053. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2054. data/third_party/cares/cares/ares_getopt.c +0 -122
  2055. data/third_party/cares/cares/ares_getopt.h +0 -53
  2056. data/third_party/cares/cares/ares_init.c +0 -2615
  2057. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2058. data/third_party/cares/cares/ares_library_init.c +0 -195
  2059. data/third_party/cares/cares/ares_library_init.h +0 -43
  2060. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2061. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2062. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2063. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2064. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2065. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2066. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2067. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2068. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2069. data/third_party/cares/cares/ares_private.h +0 -382
  2070. data/third_party/cares/cares/ares_process.c +0 -1473
  2071. data/third_party/cares/cares/ares_query.c +0 -186
  2072. data/third_party/cares/cares/ares_search.c +0 -323
  2073. data/third_party/cares/cares/ares_send.c +0 -137
  2074. data/third_party/cares/cares/ares_setup.h +0 -217
  2075. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2076. data/third_party/cares/cares/ares_version.h +0 -24
  2077. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2078. data/third_party/cares/cares/inet_ntop.c +0 -207
  2079. data/third_party/upb/upb/decode_internal.h +0 -193
  2080. data/third_party/upb/upb/upb_internal.h +0 -58
@@ -18,30 +18,61 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/retry_filter.h"
20
20
 
21
+ #include <inttypes.h>
22
+ #include <limits.h>
23
+ #include <stddef.h>
24
+
25
+ #include <memory>
26
+ #include <new>
27
+ #include <string>
28
+ #include <utility>
29
+
21
30
  #include "absl/container/inlined_vector.h"
31
+ #include "absl/status/status.h"
22
32
  #include "absl/status/statusor.h"
33
+ #include "absl/strings/str_cat.h"
34
+ #include "absl/strings/string_view.h"
23
35
  #include "absl/strings/strip.h"
36
+ #include "absl/types/optional.h"
24
37
 
38
+ #include <grpc/impl/codegen/grpc_types.h>
39
+ #include <grpc/slice.h>
40
+ #include <grpc/status.h>
41
+ #include <grpc/support/atm.h>
25
42
  #include <grpc/support/log.h>
26
43
 
27
44
  #include "src/core/ext/filters/client_channel/client_channel.h"
45
+ #include "src/core/ext/filters/client_channel/config_selector.h"
28
46
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
29
47
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
30
- #include "src/core/ext/service_config/service_config.h"
31
- #include "src/core/ext/service_config/service_config_call_data.h"
32
48
  #include "src/core/lib/backoff/backoff.h"
33
49
  #include "src/core/lib/channel/channel_args.h"
34
50
  #include "src/core/lib/channel/channel_stack.h"
51
+ #include "src/core/lib/channel/context.h"
35
52
  #include "src/core/lib/channel/status_util.h"
36
- #include "src/core/lib/gprpp/manual_constructor.h"
53
+ #include "src/core/lib/debug/trace.h"
54
+ #include "src/core/lib/gpr/useful.h"
55
+ #include "src/core/lib/gprpp/construct_destruct.h"
56
+ #include "src/core/lib/gprpp/debug_location.h"
57
+ #include "src/core/lib/gprpp/orphanable.h"
58
+ #include "src/core/lib/gprpp/ref_counted.h"
59
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
60
+ #include "src/core/lib/gprpp/status_helper.h"
61
+ #include "src/core/lib/gprpp/time.h"
62
+ #include "src/core/lib/iomgr/call_combiner.h"
63
+ #include "src/core/lib/iomgr/closure.h"
64
+ #include "src/core/lib/iomgr/error.h"
65
+ #include "src/core/lib/iomgr/exec_ctx.h"
37
66
  #include "src/core/lib/iomgr/polling_entity.h"
38
- #include "src/core/lib/slice/slice_internal.h"
39
- #include "src/core/lib/slice/slice_string_helpers.h"
67
+ #include "src/core/lib/iomgr/timer.h"
68
+ #include "src/core/lib/resource_quota/arena.h"
69
+ #include "src/core/lib/service_config/service_config.h"
70
+ #include "src/core/lib/service_config/service_config_call_data.h"
71
+ #include "src/core/lib/slice/slice.h"
72
+ #include "src/core/lib/slice/slice_buffer.h"
40
73
  #include "src/core/lib/transport/error_utils.h"
41
- #include "src/core/lib/transport/metadata.h"
42
74
  #include "src/core/lib/transport/metadata_batch.h"
43
- #include "src/core/lib/transport/static_metadata.h"
44
- #include "src/core/lib/transport/status_metadata.h"
75
+ #include "src/core/lib/transport/transport.h"
45
76
  #include "src/core/lib/uri/uri_parser.h"
46
77
 
47
78
  //
@@ -87,7 +118,6 @@
87
118
  // which batches need to be sent on the LB call for a given attempt.
88
119
 
89
120
  // TODO(roth): In subsequent PRs:
90
- // - add support for transparent retries (including initial metadata)
91
121
  // - implement hedging
92
122
 
93
123
  // By default, we buffer 256 KiB per RPC for retries.
@@ -121,7 +151,7 @@ class RetryFilter {
121
151
  grpc_channel_element_args* args) {
122
152
  GPR_ASSERT(args->is_last);
123
153
  GPR_ASSERT(elem->filter == &kRetryFilterVtable);
124
- grpc_error_handle error = GRPC_ERROR_NONE;
154
+ grpc_error_handle error;
125
155
  new (elem->channel_data) RetryFilter(args->channel_args, &error);
126
156
  return error;
127
157
  }
@@ -147,7 +177,9 @@ class RetryFilter {
147
177
  RetryFilter(const grpc_channel_args* args, grpc_error_handle* error)
148
178
  : client_channel_(grpc_channel_args_find_pointer<ClientChannel>(
149
179
  args, GRPC_ARG_CLIENT_CHANNEL)),
150
- per_rpc_retry_buffer_size_(GetMaxPerRpcRetryBufferSize(args)) {
180
+ per_rpc_retry_buffer_size_(GetMaxPerRpcRetryBufferSize(args)),
181
+ service_config_parser_index_(
182
+ internal::RetryServiceConfigParser::ParserIndex()) {
151
183
  // Get retry throttling parameters from service config.
152
184
  auto* service_config = grpc_channel_args_find_pointer<ServiceConfig>(
153
185
  args, GRPC_ARG_SERVICE_CONFIG_OBJ);
@@ -160,26 +192,32 @@ class RetryFilter {
160
192
  const char* server_uri =
161
193
  grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
162
194
  if (server_uri == nullptr) {
163
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
195
+ *error = GRPC_ERROR_CREATE(
164
196
  "server URI channel arg missing or wrong type in client channel "
165
197
  "filter");
166
198
  return;
167
199
  }
168
200
  absl::StatusOr<URI> uri = URI::Parse(server_uri);
169
201
  if (!uri.ok() || uri->path().empty()) {
170
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
171
- "could not extract server name from target URI");
202
+ *error =
203
+ GRPC_ERROR_CREATE("could not extract server name from target URI");
172
204
  return;
173
205
  }
174
206
  std::string server_name(absl::StripPrefix(uri->path(), "/"));
175
207
  // Get throttling config for server_name.
176
- retry_throttle_data_ = internal::ServerRetryThrottleMap::GetDataForServer(
177
- server_name, config->max_milli_tokens(), config->milli_token_ratio());
208
+ retry_throttle_data_ =
209
+ internal::ServerRetryThrottleMap::Get()->GetDataForServer(
210
+ server_name, config->max_milli_tokens(),
211
+ config->milli_token_ratio());
178
212
  }
179
213
 
214
+ const RetryMethodConfig* GetRetryPolicy(
215
+ const grpc_call_context_element* context);
216
+
180
217
  ClientChannel* client_channel_;
181
218
  size_t per_rpc_retry_buffer_size_;
182
219
  RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
220
+ const size_t service_config_parser_index_;
183
221
  };
184
222
 
185
223
  //
@@ -211,7 +249,7 @@ class RetryFilter::CallData {
211
249
  // State associated with each call attempt.
212
250
  class CallAttempt : public RefCounted<CallAttempt> {
213
251
  public:
214
- explicit CallAttempt(CallData* calld);
252
+ CallAttempt(CallData* calld, bool is_transparent_retry);
215
253
  ~CallAttempt() override;
216
254
 
217
255
  bool lb_call_committed() const { return lb_call_committed_; }
@@ -314,7 +352,11 @@ class RetryFilter::CallData {
314
352
  // cancel_stream op.
315
353
  static void OnCompleteForCancelOp(void* arg, grpc_error_handle error);
316
354
 
317
- RefCountedPtr<CallAttempt> call_attempt_;
355
+ // This DOES hold a ref, but it cannot be a RefCountedPtr<>, because
356
+ // our dtor unrefs the owning call, which may delete the arena in
357
+ // which we are allocated, which means that running the dtor of any
358
+ // data members after that would cause a crash.
359
+ CallAttempt* call_attempt_;
318
360
  // The batch to use in the LB call.
319
361
  // Its payload field points to CallAttempt::batch_payload_.
320
362
  grpc_transport_stream_op_batch batch_;
@@ -373,9 +415,10 @@ class RetryFilter::CallData {
373
415
  void AddBatchForInternalRecvTrailingMetadata(
374
416
  CallCombinerClosureList* closures);
375
417
 
376
- // Adds a batch to closures to cancel this call attempt.
377
- void AddBatchForCancelOp(grpc_error_handle error,
378
- CallCombinerClosureList* closures);
418
+ // Adds a batch to closures to cancel this call attempt, if
419
+ // cancellation has not already been sent on the LB call.
420
+ void MaybeAddBatchForCancelOp(grpc_error_handle error,
421
+ CallCombinerClosureList* closures);
379
422
 
380
423
  // Adds batches for pending batches to closures.
381
424
  void AddBatchesForPendingBatches(CallCombinerClosureList* closures);
@@ -396,10 +439,8 @@ class RetryFilter::CallData {
396
439
  void MaybeSwitchToFastPath();
397
440
 
398
441
  // Returns true if the call should be retried.
399
- // If server_pushback_md is non-null, sets *server_pushback_ms.
400
- bool ShouldRetry(absl::optional<grpc_status_code> status, bool is_lb_drop,
401
- grpc_mdelem* server_pushback_md,
402
- grpc_millis* server_pushback_ms);
442
+ bool ShouldRetry(absl::optional<grpc_status_code> status,
443
+ absl::optional<Duration> server_pushback_ms);
403
444
 
404
445
  // Abandons the call attempt. Unrefs any deferred batches.
405
446
  void Abandon();
@@ -420,11 +461,7 @@ class RetryFilter::CallData {
420
461
  // BatchData.batch.payload points to this.
421
462
  grpc_transport_stream_op_batch_payload batch_payload_;
422
463
  // For send_initial_metadata.
423
- grpc_linked_mdelem retry_attempts_metadata_;
424
464
  grpc_metadata_batch send_initial_metadata_{calld_->arena_};
425
- // For send_message.
426
- // TODO(roth): Restructure this to eliminate use of ManualConstructor.
427
- ManualConstructor<ByteStreamCache::CachingByteStream> send_message_;
428
465
  // For send_trailing_metadata.
429
466
  grpc_metadata_batch send_trailing_metadata_{calld_->arena_};
430
467
  // For intercepting recv_initial_metadata.
@@ -433,7 +470,8 @@ class RetryFilter::CallData {
433
470
  bool trailing_metadata_available_ = false;
434
471
  // For intercepting recv_message.
435
472
  grpc_closure recv_message_ready_;
436
- OrphanablePtr<ByteStream> recv_message_;
473
+ absl::optional<SliceBuffer> recv_message_;
474
+ uint32_t recv_message_flags_;
437
475
  // For intercepting recv_trailing_metadata.
438
476
  grpc_metadata_batch recv_trailing_metadata_{calld_->arena_};
439
477
  grpc_transport_stream_stats collect_stats_;
@@ -452,11 +490,12 @@ class RetryFilter::CallData {
452
490
  bool completed_recv_initial_metadata_ : 1;
453
491
  bool started_recv_trailing_metadata_ : 1;
454
492
  bool completed_recv_trailing_metadata_ : 1;
493
+ bool sent_cancel_stream_ : 1;
455
494
  // State for callback processing.
456
495
  RefCountedPtr<BatchData> recv_initial_metadata_ready_deferred_batch_;
457
- grpc_error_handle recv_initial_metadata_error_ = GRPC_ERROR_NONE;
496
+ grpc_error_handle recv_initial_metadata_error_;
458
497
  RefCountedPtr<BatchData> recv_message_ready_deferred_batch_;
459
- grpc_error_handle recv_message_error_ = GRPC_ERROR_NONE;
498
+ grpc_error_handle recv_message_error_;
460
499
  struct OnCompleteDeferredBatch {
461
500
  OnCompleteDeferredBatch(RefCountedPtr<BatchData> batch,
462
501
  grpc_error_handle error)
@@ -468,7 +507,7 @@ class RetryFilter::CallData {
468
507
  absl::InlinedVector<OnCompleteDeferredBatch, 3>
469
508
  on_complete_deferred_batches_;
470
509
  RefCountedPtr<BatchData> recv_trailing_metadata_internal_batch_;
471
- grpc_error_handle recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
510
+ grpc_error_handle recv_trailing_metadata_error_;
472
511
  bool seen_recv_trailing_metadata_from_surface_ : 1;
473
512
  // NOTE: Do not move this next to the metadata bitfields above. That would
474
513
  // save space but will also result in a data race because compiler
@@ -509,16 +548,21 @@ class RetryFilter::CallData {
509
548
  void RetryCommit(CallAttempt* call_attempt);
510
549
 
511
550
  // Starts a timer to retry after appropriate back-off.
512
- // If server_pushback_ms is -1, retry_backoff_ is used.
513
- void StartRetryTimer(grpc_millis server_pushback_ms);
551
+ // If server_pushback is nullopt, retry_backoff_ is used.
552
+ void StartRetryTimer(absl::optional<Duration> server_pushback);
514
553
 
515
554
  static void OnRetryTimer(void* arg, grpc_error_handle error);
516
555
  static void OnRetryTimerLocked(void* arg, grpc_error_handle error);
517
556
 
557
+ // Adds a closure to closures to start a transparent retry.
558
+ void AddClosureToStartTransparentRetry(CallCombinerClosureList* closures);
559
+ static void StartTransparentRetry(void* arg, grpc_error_handle error);
560
+
518
561
  OrphanablePtr<ClientChannel::LoadBalancedCall> CreateLoadBalancedCall(
519
- ConfigSelector::CallDispatchController* call_dispatch_controller);
562
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
563
+ bool is_transparent_retry);
520
564
 
521
- void CreateCallAttempt();
565
+ void CreateCallAttempt(bool is_transparent_retry);
522
566
 
523
567
  RetryFilter* chand_;
524
568
  grpc_polling_entity* pollent_;
@@ -527,13 +571,13 @@ class RetryFilter::CallData {
527
571
  BackOff retry_backoff_;
528
572
 
529
573
  grpc_slice path_; // Request path.
530
- grpc_millis deadline_;
574
+ Timestamp deadline_;
531
575
  Arena* arena_;
532
576
  grpc_call_stack* owning_call_;
533
577
  CallCombiner* call_combiner_;
534
578
  grpc_call_context_element* call_context_;
535
579
 
536
- grpc_error_handle cancelled_from_surface_ = GRPC_ERROR_NONE;
580
+ grpc_error_handle cancelled_from_surface_;
537
581
 
538
582
  RefCountedPtr<CallStackDestructionBarrier> call_stack_destruction_barrier_;
539
583
 
@@ -561,6 +605,8 @@ class RetryFilter::CallData {
561
605
  // Retry state.
562
606
  bool retry_committed_ : 1;
563
607
  bool retry_timer_pending_ : 1;
608
+ bool retry_codepath_started_ : 1;
609
+ bool sent_transparent_retry_not_seen_by_server_ : 1;
564
610
  int num_attempts_completed_ = 0;
565
611
  grpc_timer retry_timer_;
566
612
  grpc_closure retry_closure_;
@@ -569,7 +615,6 @@ class RetryFilter::CallData {
569
615
  // send_initial_metadata
570
616
  bool seen_send_initial_metadata_ = false;
571
617
  grpc_metadata_batch send_initial_metadata_{arena_};
572
- uint32_t send_initial_metadata_flags_;
573
618
  // TODO(roth): As part of implementing hedging, we'll probably need to
574
619
  // have the LB call set a value in CallAttempt and then propagate it
575
620
  // from CallAttempt to the parent call when we commit. Otherwise, we
@@ -586,11 +631,11 @@ class RetryFilter::CallData {
586
631
  // Note: We inline the cache for the first 3 send_message ops and use
587
632
  // dynamic allocation after that. This number was essentially picked
588
633
  // at random; it could be changed in the future to tune performance.
589
- // TODO(roth): As part of implementing hedging, we may need some
590
- // synchronization here, since ByteStreamCache does not provide any
591
- // synchronization, so it's not safe to have multiple
592
- // CachingByteStreams read from the same ByteStreamCache concurrently.
593
- absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
634
+ struct CachedSendMessage {
635
+ SliceBuffer* slices;
636
+ uint32_t flags;
637
+ };
638
+ absl::InlinedVector<CachedSendMessage, 3> send_messages_;
594
639
  // send_trailing_metadata
595
640
  bool seen_send_trailing_metadata_ = false;
596
641
  grpc_metadata_batch send_trailing_metadata_{arena_};
@@ -620,7 +665,7 @@ class RetryFilter::CallData::CallStackDestructionBarrier
620
665
 
621
666
  ~CallStackDestructionBarrier() override {
622
667
  // TODO(yashkt) : This can potentially be a Closure::Run
623
- ExecCtx::Run(DEBUG_LOCATION, on_call_stack_destruction_, GRPC_ERROR_NONE);
668
+ ExecCtx::Run(DEBUG_LOCATION, on_call_stack_destruction_, absl::OkStatus());
624
669
  }
625
670
 
626
671
  // Set the closure from the surface. This closure will be invoked
@@ -653,7 +698,8 @@ class RetryFilter::CallData::CallStackDestructionBarrier
653
698
  // RetryFilter::CallData::CallAttempt
654
699
  //
655
700
 
656
- RetryFilter::CallData::CallAttempt::CallAttempt(CallData* calld)
701
+ RetryFilter::CallData::CallAttempt::CallAttempt(CallData* calld,
702
+ bool is_transparent_retry)
657
703
  : RefCounted(GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) ? "CallAttempt"
658
704
  : nullptr),
659
705
  calld_(calld),
@@ -667,25 +713,27 @@ RetryFilter::CallData::CallAttempt::CallAttempt(CallData* calld)
667
713
  completed_recv_initial_metadata_(false),
668
714
  started_recv_trailing_metadata_(false),
669
715
  completed_recv_trailing_metadata_(false),
716
+ sent_cancel_stream_(false),
670
717
  seen_recv_trailing_metadata_from_surface_(false),
671
718
  abandoned_(false) {
672
- lb_call_ = calld->CreateLoadBalancedCall(&attempt_dispatch_controller_);
719
+ lb_call_ = calld->CreateLoadBalancedCall(&attempt_dispatch_controller_,
720
+ is_transparent_retry);
673
721
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
674
- gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: create lb_call=%p",
722
+ gpr_log(GPR_INFO,
723
+ "chand=%p calld=%p attempt=%p: created attempt, lb_call=%p",
675
724
  calld->chand_, calld, this, lb_call_.get());
676
725
  }
677
726
  // If per_attempt_recv_timeout is set, start a timer.
678
727
  if (calld->retry_policy_ != nullptr &&
679
728
  calld->retry_policy_->per_attempt_recv_timeout().has_value()) {
680
- grpc_millis per_attempt_recv_deadline =
681
- ExecCtx::Get()->Now() +
682
- *calld->retry_policy_->per_attempt_recv_timeout();
729
+ Timestamp per_attempt_recv_deadline =
730
+ Timestamp::Now() + *calld->retry_policy_->per_attempt_recv_timeout();
683
731
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
684
732
  gpr_log(GPR_INFO,
685
733
  "chand=%p calld=%p attempt=%p: per-attempt timeout in %" PRId64
686
734
  " ms",
687
735
  calld->chand_, calld, this,
688
- *calld->retry_policy_->per_attempt_recv_timeout());
736
+ calld->retry_policy_->per_attempt_recv_timeout()->millis());
689
737
  }
690
738
  // Schedule retry after computed delay.
691
739
  GRPC_CLOSURE_INIT(&on_per_attempt_recv_timer_, OnPerAttemptRecvTimer, this,
@@ -855,7 +903,7 @@ void RetryFilter::CallData::CallAttempt::AddClosureForBatch(
855
903
  batch->handler_private.extra_arg = lb_call_.get();
856
904
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
857
905
  batch, grpc_schedule_on_exec_ctx);
858
- closures->Add(&batch->handler_private.closure, GRPC_ERROR_NONE, reason);
906
+ closures->Add(&batch->handler_private.closure, absl::OkStatus(), reason);
859
907
  }
860
908
 
861
909
  void RetryFilter::CallData::CallAttempt::
@@ -877,8 +925,12 @@ void RetryFilter::CallData::CallAttempt::
877
925
  "starting internal recv_trailing_metadata", closures);
878
926
  }
879
927
 
880
- void RetryFilter::CallData::CallAttempt::AddBatchForCancelOp(
928
+ void RetryFilter::CallData::CallAttempt::MaybeAddBatchForCancelOp(
881
929
  grpc_error_handle error, CallCombinerClosureList* closures) {
930
+ if (sent_cancel_stream_) {
931
+ return;
932
+ }
933
+ sent_cancel_stream_ = true;
882
934
  BatchData* cancel_batch_data = CreateBatch(1, /*set_on_complete=*/true);
883
935
  cancel_batch_data->AddCancelStreamOp(error);
884
936
  AddClosureForBatch(cancel_batch_data->batch(),
@@ -907,7 +959,16 @@ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
907
959
  has_send_ops = true;
908
960
  }
909
961
  if (batch->send_message) {
910
- if (completed_send_message_count_ < started_send_message_count_) {
962
+ // Cases where we can't start this send_message op:
963
+ // - We are currently replaying a previous cached send_message op.
964
+ // - We have already replayed all send_message ops, including this
965
+ // one. (This can happen if a send_message op is in the same
966
+ // batch as a recv op, the send_message op has already completed
967
+ // but the recv op hasn't, and then a subsequent batch with another
968
+ // recv op is started from the surface.)
969
+ if (completed_send_message_count_ < started_send_message_count_ ||
970
+ completed_send_message_count_ ==
971
+ (calld_->send_messages_.size() + !pending->send_ops_cached)) {
911
972
  continue;
912
973
  }
913
974
  has_send_ops = true;
@@ -929,7 +990,10 @@ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
929
990
  ++num_callbacks;
930
991
  }
931
992
  if (batch->recv_message) {
932
- if (completed_recv_message_count_ < started_recv_message_count_) {
993
+ // Skip if the op is already in flight, or if it has already completed
994
+ // but the completion has not yet been sent to the surface.
995
+ if (completed_recv_message_count_ < started_recv_message_count_ ||
996
+ recv_message_ready_deferred_batch_ != nullptr) {
933
997
  continue;
934
998
  }
935
999
  ++num_callbacks;
@@ -957,9 +1021,8 @@ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
957
1021
  DEBUG_LOCATION,
958
1022
  "internally started recv_trailing_metadata batch pending and "
959
1023
  "recv_trailing_metadata started from surface");
960
- GRPC_ERROR_UNREF(recv_trailing_metadata_error_);
961
1024
  }
962
- recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
1025
+ recv_trailing_metadata_error_ = absl::OkStatus();
963
1026
  }
964
1027
  // We don't want the fact that we've already started this op internally
965
1028
  // to prevent us from adding a batch that may contain other ops.
@@ -1006,8 +1069,6 @@ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
1006
1069
  }
1007
1070
  // recv_initial_metadata.
1008
1071
  if (batch->recv_initial_metadata) {
1009
- // recv_flags is only used on the server side.
1010
- GPR_ASSERT(batch->payload->recv_initial_metadata.recv_flags == nullptr);
1011
1072
  batch_data->AddRetriableRecvInitialMetadataOp();
1012
1073
  }
1013
1074
  // recv_message.
@@ -1059,16 +1120,14 @@ void RetryFilter::CallData::CallAttempt::StartRetriableBatches() {
1059
1120
  void RetryFilter::CallData::CallAttempt::CancelFromSurface(
1060
1121
  grpc_transport_stream_op_batch* cancel_batch) {
1061
1122
  MaybeCancelPerAttemptRecvTimer();
1123
+ Abandon();
1062
1124
  // Propagate cancellation to LB call.
1063
1125
  lb_call_->StartTransportStreamOpBatch(cancel_batch);
1064
1126
  }
1065
1127
 
1066
1128
  bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1067
- absl::optional<grpc_status_code> status, bool is_lb_drop,
1068
- grpc_mdelem* server_pushback_md, grpc_millis* server_pushback_ms) {
1069
- // LB drops always inhibit retries.
1070
- if (is_lb_drop) return false;
1071
- // TODO(roth): Handle transparent retries here.
1129
+ absl::optional<grpc_status_code> status,
1130
+ absl::optional<Duration> server_pushback) {
1072
1131
  // If no retry policy, don't retry.
1073
1132
  if (calld_->retry_policy_ == nullptr) return false;
1074
1133
  // Check status.
@@ -1131,10 +1190,8 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1131
1190
  return false;
1132
1191
  }
1133
1192
  // Check server push-back.
1134
- if (server_pushback_md != nullptr) {
1135
- // If the value is "-1" or any other unparseable string, we do not retry.
1136
- uint32_t ms;
1137
- if (!grpc_parse_slice_to_uint32(GRPC_MDVALUE(*server_pushback_md), &ms)) {
1193
+ if (server_pushback.has_value()) {
1194
+ if (*server_pushback < Duration::Zero()) {
1138
1195
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1139
1196
  gpr_log(GPR_INFO,
1140
1197
  "chand=%p calld=%p attempt=%p: not retrying due to server "
@@ -1146,10 +1203,10 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1146
1203
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1147
1204
  gpr_log(
1148
1205
  GPR_INFO,
1149
- "chand=%p calld=%p attempt=%p: server push-back: retry in %u ms",
1150
- calld_->chand_, calld_, this, ms);
1206
+ "chand=%p calld=%p attempt=%p: server push-back: retry in %" PRIu64
1207
+ " ms",
1208
+ calld_->chand_, calld_, this, server_pushback->millis());
1151
1209
  }
1152
- *server_pushback_ms = static_cast<grpc_millis>(ms);
1153
1210
  }
1154
1211
  }
1155
1212
  // Check with call dispatch controller.
@@ -1177,24 +1234,20 @@ void RetryFilter::CallData::CallAttempt::Abandon() {
1177
1234
  !seen_recv_trailing_metadata_from_surface_) {
1178
1235
  recv_trailing_metadata_internal_batch_.reset(
1179
1236
  DEBUG_LOCATION,
1180
- "internal recv_trailing_metadata completed before that op was "
1181
- "started from the surface");
1237
+ "unref internal recv_trailing_metadata_ready batch; attempt abandoned");
1182
1238
  }
1183
- GRPC_ERROR_UNREF(recv_trailing_metadata_error_);
1184
- recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
1239
+ recv_trailing_metadata_error_ = absl::OkStatus();
1185
1240
  recv_initial_metadata_ready_deferred_batch_.reset(
1186
1241
  DEBUG_LOCATION,
1187
- "unref deferred recv_initial_metadata_ready batch due to retry");
1188
- GRPC_ERROR_UNREF(recv_initial_metadata_error_);
1189
- recv_initial_metadata_error_ = GRPC_ERROR_NONE;
1242
+ "unref deferred recv_initial_metadata_ready batch; attempt abandoned");
1243
+ recv_initial_metadata_error_ = absl::OkStatus();
1190
1244
  recv_message_ready_deferred_batch_.reset(
1191
- DEBUG_LOCATION, "unref deferred recv_message_ready batch due to retry");
1192
- GRPC_ERROR_UNREF(recv_message_error_);
1193
- recv_message_error_ = GRPC_ERROR_NONE;
1245
+ DEBUG_LOCATION,
1246
+ "unref deferred recv_message_ready batch; attempt abandoned");
1247
+ recv_message_error_ = absl::OkStatus();
1194
1248
  for (auto& on_complete_deferred_batch : on_complete_deferred_batches_) {
1195
1249
  on_complete_deferred_batch.batch.reset(
1196
- DEBUG_LOCATION, "unref deferred on_complete batch due to retry");
1197
- GRPC_ERROR_UNREF(on_complete_deferred_batch.error);
1250
+ DEBUG_LOCATION, "unref deferred on_complete batch; attempt abandoned");
1198
1251
  }
1199
1252
  on_complete_deferred_batches_.clear();
1200
1253
  }
@@ -1205,8 +1258,8 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimer(
1205
1258
  GRPC_CLOSURE_INIT(&call_attempt->on_per_attempt_recv_timer_,
1206
1259
  OnPerAttemptRecvTimerLocked, call_attempt, nullptr);
1207
1260
  GRPC_CALL_COMBINER_START(call_attempt->calld_->call_combiner_,
1208
- &call_attempt->on_per_attempt_recv_timer_,
1209
- GRPC_ERROR_REF(error), "per-attempt timer fired");
1261
+ &call_attempt->on_per_attempt_recv_timer_, error,
1262
+ "per-attempt timer fired");
1210
1263
  }
1211
1264
 
1212
1265
  void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
@@ -1217,30 +1270,27 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
1217
1270
  gpr_log(GPR_INFO,
1218
1271
  "chand=%p calld=%p attempt=%p: perAttemptRecvTimeout timer fired: "
1219
1272
  "error=%s, per_attempt_recv_timer_pending_=%d",
1220
- calld->chand_, calld, call_attempt,
1221
- grpc_error_std_string(error).c_str(),
1273
+ calld->chand_, calld, call_attempt, StatusToString(error).c_str(),
1222
1274
  call_attempt->per_attempt_recv_timer_pending_);
1223
1275
  }
1224
1276
  CallCombinerClosureList closures;
1225
- if (error == GRPC_ERROR_NONE &&
1226
- call_attempt->per_attempt_recv_timer_pending_) {
1277
+ if (error.ok() && call_attempt->per_attempt_recv_timer_pending_) {
1227
1278
  call_attempt->per_attempt_recv_timer_pending_ = false;
1228
1279
  // Cancel this attempt.
1229
1280
  // TODO(roth): When implementing hedging, we should not cancel the
1230
1281
  // current attempt.
1231
- call_attempt->AddBatchForCancelOp(
1232
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1233
- "retry perAttemptRecvTimeout exceeded"),
1234
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED),
1282
+ call_attempt->MaybeAddBatchForCancelOp(
1283
+ grpc_error_set_int(
1284
+ GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
1285
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
1235
1286
  &closures);
1236
1287
  // Check whether we should retry.
1237
- if (call_attempt->ShouldRetry(
1238
- /*status=*/absl::nullopt, /*is_lb_drop=*/false,
1239
- /*server_pushback_md=*/nullptr, /*server_pushback_ms=*/nullptr)) {
1288
+ if (call_attempt->ShouldRetry(/*status=*/absl::nullopt,
1289
+ /*server_pushback_ms=*/absl::nullopt)) {
1240
1290
  // Mark current attempt as abandoned.
1241
1291
  call_attempt->Abandon();
1242
1292
  // We are retrying. Start backoff timer.
1243
- calld->StartRetryTimer(/*server_pushback_ms=*/-1);
1293
+ calld->StartRetryTimer(/*server_pushback=*/absl::nullopt);
1244
1294
  } else {
1245
1295
  // Not retrying, so commit the call.
1246
1296
  calld->RetryCommit(call_attempt);
@@ -1276,11 +1326,11 @@ RetryFilter::CallData::CallAttempt::BatchData::BatchData(
1276
1326
  : RefCounted(
1277
1327
  GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) ? "BatchData" : nullptr,
1278
1328
  refcount),
1279
- call_attempt_(std::move(attempt)) {
1329
+ call_attempt_(attempt.release()) {
1280
1330
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1281
1331
  gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: creating batch %p",
1282
- call_attempt_->calld_->chand_, call_attempt_->calld_,
1283
- call_attempt_.get(), this);
1332
+ call_attempt_->calld_->chand_, call_attempt_->calld_, call_attempt_,
1333
+ this);
1284
1334
  }
1285
1335
  // We hold a ref to the call stack for every batch sent on a call attempt.
1286
1336
  // This is because some batches on the call attempt may not complete
@@ -1300,11 +1350,12 @@ RetryFilter::CallData::CallAttempt::BatchData::BatchData(
1300
1350
  RetryFilter::CallData::CallAttempt::BatchData::~BatchData() {
1301
1351
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1302
1352
  gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: destroying batch %p",
1303
- call_attempt_->calld_->chand_, call_attempt_->calld_,
1304
- call_attempt_.get(), this);
1353
+ call_attempt_->calld_->chand_, call_attempt_->calld_, call_attempt_,
1354
+ this);
1305
1355
  }
1306
- GRPC_CALL_STACK_UNREF(call_attempt_->calld_->owning_call_, "Retry BatchData");
1307
- call_attempt_.reset(DEBUG_LOCATION, "~BatchData");
1356
+ CallAttempt* call_attempt = std::exchange(call_attempt_, nullptr);
1357
+ GRPC_CALL_STACK_UNREF(call_attempt->calld_->owning_call_, "Retry BatchData");
1358
+ call_attempt->Unref(DEBUG_LOCATION, "~BatchData");
1308
1359
  }
1309
1360
 
1310
1361
  void RetryFilter::CallData::CallAttempt::BatchData::
@@ -1342,7 +1393,6 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1342
1393
  .recv_initial_metadata_ready != nullptr;
1343
1394
  });
1344
1395
  if (pending == nullptr) {
1345
- GRPC_ERROR_UNREF(error);
1346
1396
  return;
1347
1397
  }
1348
1398
  // Return metadata.
@@ -1368,14 +1418,14 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1368
1418
  void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
1369
1419
  void* arg, grpc_error_handle error) {
1370
1420
  RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1371
- CallAttempt* call_attempt = batch_data->call_attempt_.get();
1421
+ CallAttempt* call_attempt = batch_data->call_attempt_;
1372
1422
  CallData* calld = call_attempt->calld_;
1373
1423
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1374
1424
  gpr_log(GPR_INFO,
1375
1425
  "chand=%p calld=%p attempt=%p batch_data=%p: "
1376
1426
  "got recv_initial_metadata_ready, error=%s",
1377
1427
  calld->chand_, calld, call_attempt, batch_data.get(),
1378
- grpc_error_std_string(error).c_str());
1428
+ StatusToString(error).c_str());
1379
1429
  }
1380
1430
  call_attempt->completed_recv_initial_metadata_ = true;
1381
1431
  // If this attempt has been abandoned, then we're not going to use the
@@ -1394,9 +1444,9 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
1394
1444
  // the recv_trailing_metadata_ready callback, then defer propagating this
1395
1445
  // callback back to the surface. We can evaluate whether to retry when
1396
1446
  // recv_trailing_metadata comes back.
1397
- if (GPR_UNLIKELY((call_attempt->trailing_metadata_available_ ||
1398
- error != GRPC_ERROR_NONE) &&
1399
- !call_attempt->completed_recv_trailing_metadata_)) {
1447
+ if (GPR_UNLIKELY(
1448
+ (call_attempt->trailing_metadata_available_ || !error.ok()) &&
1449
+ !call_attempt->completed_recv_trailing_metadata_)) {
1400
1450
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1401
1451
  gpr_log(GPR_INFO,
1402
1452
  "chand=%p calld=%p attempt=%p: deferring "
@@ -1405,10 +1455,10 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
1405
1455
  }
1406
1456
  call_attempt->recv_initial_metadata_ready_deferred_batch_ =
1407
1457
  std::move(batch_data);
1408
- call_attempt->recv_initial_metadata_error_ = GRPC_ERROR_REF(error);
1458
+ call_attempt->recv_initial_metadata_error_ = error;
1409
1459
  CallCombinerClosureList closures;
1410
- if (error != GRPC_ERROR_NONE) {
1411
- call_attempt->AddBatchForCancelOp(GRPC_ERROR_REF(error), &closures);
1460
+ if (!error.ok()) {
1461
+ call_attempt->MaybeAddBatchForCancelOp(error, &closures);
1412
1462
  }
1413
1463
  if (!call_attempt->started_recv_trailing_metadata_) {
1414
1464
  // recv_trailing_metadata not yet started by application; start it
@@ -1426,8 +1476,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
1426
1476
  }
1427
1477
  // Invoke the callback to return the result to the surface.
1428
1478
  CallCombinerClosureList closures;
1429
- batch_data->MaybeAddClosureForRecvInitialMetadataCallback(
1430
- GRPC_ERROR_REF(error), &closures);
1479
+ batch_data->MaybeAddClosureForRecvInitialMetadataCallback(error, &closures);
1431
1480
  closures.RunClosures(calld->call_combiner_);
1432
1481
  }
1433
1482
 
@@ -1446,12 +1495,13 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1446
1495
  batch->payload->recv_message.recv_message_ready != nullptr;
1447
1496
  });
1448
1497
  if (pending == nullptr) {
1449
- GRPC_ERROR_UNREF(error);
1450
1498
  return;
1451
1499
  }
1452
1500
  // Return payload.
1453
1501
  *pending->batch->payload->recv_message.recv_message =
1454
1502
  std::move(call_attempt_->recv_message_);
1503
+ *pending->batch->payload->recv_message.flags =
1504
+ call_attempt_->recv_message_flags_;
1455
1505
  // Update bookkeeping.
1456
1506
  // Note: Need to do this before invoking the callback, since invoking
1457
1507
  // the callback will result in yielding the call combiner.
@@ -1467,19 +1517,23 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1467
1517
  void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1468
1518
  void* arg, grpc_error_handle error) {
1469
1519
  RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1470
- CallAttempt* call_attempt = batch_data->call_attempt_.get();
1520
+ CallAttempt* call_attempt = batch_data->call_attempt_;
1471
1521
  CallData* calld = call_attempt->calld_;
1472
1522
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1473
1523
  gpr_log(GPR_INFO,
1474
1524
  "chand=%p calld=%p attempt=%p batch_data=%p: "
1475
1525
  "got recv_message_ready, error=%s",
1476
1526
  calld->chand_, calld, call_attempt, batch_data.get(),
1477
- grpc_error_std_string(error).c_str());
1527
+ StatusToString(error).c_str());
1478
1528
  }
1479
1529
  ++call_attempt->completed_recv_message_count_;
1480
1530
  // If this attempt has been abandoned, then we're not going to use the
1481
1531
  // result of this recv_message op, so do nothing.
1482
1532
  if (call_attempt->abandoned_) {
1533
+ // The transport will not invoke recv_trailing_metadata_ready until the byte
1534
+ // stream for any recv_message op is orphaned, so we do that here to ensure
1535
+ // that any pending recv_trailing_metadata op can complete.
1536
+ call_attempt->recv_message_.reset();
1483
1537
  GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1484
1538
  "recv_message_ready for abandoned attempt");
1485
1539
  return;
@@ -1492,9 +1546,9 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1492
1546
  // the recv_trailing_metadata_ready callback, then defer propagating this
1493
1547
  // callback back to the surface. We can evaluate whether to retry when
1494
1548
  // recv_trailing_metadata comes back.
1495
- if (GPR_UNLIKELY((call_attempt->recv_message_ == nullptr ||
1496
- error != GRPC_ERROR_NONE) &&
1497
- !call_attempt->completed_recv_trailing_metadata_)) {
1549
+ if (GPR_UNLIKELY(
1550
+ (!call_attempt->recv_message_.has_value() || !error.ok()) &&
1551
+ !call_attempt->completed_recv_trailing_metadata_)) {
1498
1552
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1499
1553
  gpr_log(GPR_INFO,
1500
1554
  "chand=%p calld=%p attempt=%p: deferring recv_message_ready "
@@ -1502,10 +1556,10 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1502
1556
  calld->chand_, calld, call_attempt);
1503
1557
  }
1504
1558
  call_attempt->recv_message_ready_deferred_batch_ = std::move(batch_data);
1505
- call_attempt->recv_message_error_ = GRPC_ERROR_REF(error);
1559
+ call_attempt->recv_message_error_ = error;
1506
1560
  CallCombinerClosureList closures;
1507
- if (error != GRPC_ERROR_NONE) {
1508
- call_attempt->AddBatchForCancelOp(GRPC_ERROR_REF(error), &closures);
1561
+ if (!error.ok()) {
1562
+ call_attempt->MaybeAddBatchForCancelOp(error, &closures);
1509
1563
  }
1510
1564
  if (!call_attempt->started_recv_trailing_metadata_) {
1511
1565
  // recv_trailing_metadata not yet started by application; start it
@@ -1523,8 +1577,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1523
1577
  }
1524
1578
  // Invoke the callback to return the result to the surface.
1525
1579
  CallCombinerClosureList closures;
1526
- batch_data->MaybeAddClosureForRecvMessageCallback(GRPC_ERROR_REF(error),
1527
- &closures);
1580
+ batch_data->MaybeAddClosureForRecvMessageCallback(error, &closures);
1528
1581
  closures.RunClosures(calld->call_combiner_);
1529
1582
  }
1530
1583
 
@@ -1534,28 +1587,25 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1534
1587
 
1535
1588
  namespace {
1536
1589
 
1537
- // Sets *status, *server_pushback_md, and *is_lb_drop based on md_batch
1590
+ // Sets *status, *server_pushback, and *is_lb_drop based on md_batch
1538
1591
  // and error.
1539
- void GetCallStatus(grpc_millis deadline, grpc_metadata_batch* md_batch,
1540
- grpc_error_handle error, grpc_status_code* status,
1541
- grpc_mdelem** server_pushback_md, bool* is_lb_drop) {
1542
- if (error != GRPC_ERROR_NONE) {
1592
+ void GetCallStatus(
1593
+ Timestamp deadline, grpc_metadata_batch* md_batch, grpc_error_handle error,
1594
+ grpc_status_code* status, absl::optional<Duration>* server_pushback,
1595
+ bool* is_lb_drop,
1596
+ absl::optional<GrpcStreamNetworkState::ValueType>* stream_network_state) {
1597
+ if (!error.ok()) {
1543
1598
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
1544
1599
  intptr_t value = 0;
1545
- if (grpc_error_get_int(error, GRPC_ERROR_INT_LB_POLICY_DROP, &value) &&
1600
+ if (grpc_error_get_int(error, StatusIntProperty::kLbPolicyDrop, &value) &&
1546
1601
  value != 0) {
1547
1602
  *is_lb_drop = true;
1548
1603
  }
1549
1604
  } else {
1550
- GPR_ASSERT(md_batch->legacy_index()->named.grpc_status != nullptr);
1551
- *status = grpc_get_status_code_from_metadata(
1552
- md_batch->legacy_index()->named.grpc_status->md);
1553
- if (md_batch->legacy_index()->named.grpc_retry_pushback_ms != nullptr) {
1554
- *server_pushback_md =
1555
- &md_batch->legacy_index()->named.grpc_retry_pushback_ms->md;
1556
- }
1605
+ *status = *md_batch->get(GrpcStatusMetadata());
1557
1606
  }
1558
- GRPC_ERROR_UNREF(error);
1607
+ *server_pushback = md_batch->get(GrpcRetryPushbackMsMetadata());
1608
+ *stream_network_state = md_batch->get(GrpcStreamNetworkState());
1559
1609
  }
1560
1610
 
1561
1611
  } // namespace
@@ -1606,7 +1656,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1606
1656
  call_attempt_->recv_initial_metadata_error_, closures);
1607
1657
  call_attempt_->recv_initial_metadata_ready_deferred_batch_.reset(
1608
1658
  DEBUG_LOCATION, "resuming deferred recv_initial_metadata_ready");
1609
- call_attempt_->recv_initial_metadata_error_ = GRPC_ERROR_NONE;
1659
+ call_attempt_->recv_initial_metadata_error_ = absl::OkStatus();
1610
1660
  }
1611
1661
  // Add closure for deferred recv_message_ready.
1612
1662
  if (GPR_UNLIKELY(call_attempt_->recv_message_ready_deferred_batch_ !=
@@ -1615,7 +1665,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1615
1665
  closures);
1616
1666
  call_attempt_->recv_message_ready_deferred_batch_.reset(
1617
1667
  DEBUG_LOCATION, "resuming deferred recv_message_ready");
1618
- call_attempt_->recv_message_error_ = GRPC_ERROR_NONE;
1668
+ call_attempt_->recv_message_error_ = absl::OkStatus();
1619
1669
  }
1620
1670
  // Add closures for deferred on_complete callbacks.
1621
1671
  for (auto& on_complete_deferred_batch :
@@ -1635,13 +1685,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1635
1685
  PendingBatch* pending = &calld->pending_batches_[i];
1636
1686
  if (pending->batch == nullptr) continue;
1637
1687
  if (call_attempt_->PendingBatchContainsUnstartedSendOps(pending)) {
1638
- closures->Add(pending->batch->on_complete, GRPC_ERROR_REF(error),
1688
+ closures->Add(pending->batch->on_complete, error,
1639
1689
  "failing on_complete for pending batch");
1640
1690
  pending->batch->on_complete = nullptr;
1641
1691
  calld->MaybeClearPendingBatch(pending);
1642
1692
  }
1643
1693
  }
1644
- GRPC_ERROR_UNREF(error);
1645
1694
  }
1646
1695
 
1647
1696
  void RetryFilter::CallData::CallAttempt::BatchData::RunClosuresForCompletedCall(
@@ -1649,28 +1698,27 @@ void RetryFilter::CallData::CallAttempt::BatchData::RunClosuresForCompletedCall(
1649
1698
  // Construct list of closures to execute.
1650
1699
  CallCombinerClosureList closures;
1651
1700
  // First, add closure for recv_trailing_metadata_ready.
1652
- MaybeAddClosureForRecvTrailingMetadataReady(GRPC_ERROR_REF(error), &closures);
1701
+ MaybeAddClosureForRecvTrailingMetadataReady(error, &closures);
1653
1702
  // If there are deferred batch completion callbacks, add them to closures.
1654
1703
  AddClosuresForDeferredCompletionCallbacks(&closures);
1655
1704
  // Add closures to fail any pending batches that have not yet been started.
1656
- AddClosuresToFailUnstartedPendingBatches(GRPC_ERROR_REF(error), &closures);
1705
+ AddClosuresToFailUnstartedPendingBatches(error, &closures);
1657
1706
  // Schedule all of the closures identified above.
1658
1707
  // Note: This will release the call combiner.
1659
1708
  closures.RunClosures(call_attempt_->calld_->call_combiner_);
1660
- GRPC_ERROR_UNREF(error);
1661
1709
  }
1662
1710
 
1663
1711
  void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1664
1712
  void* arg, grpc_error_handle error) {
1665
1713
  RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1666
- CallAttempt* call_attempt = batch_data->call_attempt_.get();
1714
+ CallAttempt* call_attempt = batch_data->call_attempt_;
1667
1715
  CallData* calld = call_attempt->calld_;
1668
1716
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1669
1717
  gpr_log(GPR_INFO,
1670
1718
  "chand=%p calld=%p attempt=%p batch_data=%p: "
1671
1719
  "got recv_trailing_metadata_ready, error=%s",
1672
1720
  calld->chand_, calld, call_attempt, batch_data.get(),
1673
- grpc_error_std_string(error).c_str());
1721
+ StatusToString(error).c_str());
1674
1722
  }
1675
1723
  call_attempt->completed_recv_trailing_metadata_ = true;
1676
1724
  // If this attempt has been abandoned, then we're not going to use the
@@ -1685,39 +1733,71 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1685
1733
  call_attempt->MaybeCancelPerAttemptRecvTimer();
1686
1734
  // Get the call's status and check for server pushback metadata.
1687
1735
  grpc_status_code status = GRPC_STATUS_OK;
1688
- grpc_mdelem* server_pushback_md = nullptr;
1736
+ absl::optional<Duration> server_pushback;
1737
+ bool is_lb_drop = false;
1738
+ absl::optional<GrpcStreamNetworkState::ValueType> stream_network_state;
1689
1739
  grpc_metadata_batch* md_batch =
1690
1740
  batch_data->batch_.payload->recv_trailing_metadata.recv_trailing_metadata;
1691
- bool is_lb_drop = false;
1692
- GetCallStatus(calld->deadline_, md_batch, GRPC_ERROR_REF(error), &status,
1693
- &server_pushback_md, &is_lb_drop);
1741
+ GetCallStatus(calld->deadline_, md_batch, error, &status, &server_pushback,
1742
+ &is_lb_drop, &stream_network_state);
1694
1743
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1695
- gpr_log(
1696
- GPR_INFO,
1697
- "chand=%p calld=%p attempt=%p: call finished, status=%s is_lb_drop=%d",
1698
- calld->chand_, calld, call_attempt, grpc_status_code_to_string(status),
1699
- is_lb_drop);
1744
+ gpr_log(GPR_INFO,
1745
+ "chand=%p calld=%p attempt=%p: call finished, status=%s "
1746
+ "server_pushback=%s is_lb_drop=%d stream_network_state=%s",
1747
+ calld->chand_, calld, call_attempt,
1748
+ grpc_status_code_to_string(status),
1749
+ server_pushback.has_value() ? server_pushback->ToString().c_str()
1750
+ : "N/A",
1751
+ is_lb_drop,
1752
+ stream_network_state.has_value()
1753
+ ? absl::StrCat(*stream_network_state).c_str()
1754
+ : "N/A");
1700
1755
  }
1701
1756
  // Check if we should retry.
1702
- grpc_millis server_pushback_ms = -1;
1703
- if (call_attempt->ShouldRetry(status, is_lb_drop, server_pushback_md,
1704
- &server_pushback_ms)) {
1705
- // Start retry timer.
1706
- calld->StartRetryTimer(server_pushback_ms);
1707
- // Cancel call attempt.
1708
- CallCombinerClosureList closures;
1709
- call_attempt->AddBatchForCancelOp(
1710
- error == GRPC_ERROR_NONE
1711
- ? grpc_error_set_int(
1712
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("call attempt failed"),
1713
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED)
1714
- : GRPC_ERROR_REF(error),
1715
- &closures);
1716
- // Record that this attempt has been abandoned.
1717
- call_attempt->Abandon();
1718
- // Yields call combiner.
1719
- closures.RunClosures(calld->call_combiner_);
1720
- return;
1757
+ if (!is_lb_drop) { // Never retry on LB drops.
1758
+ enum { kNoRetry, kTransparentRetry, kConfigurableRetry } retry = kNoRetry;
1759
+ // Handle transparent retries.
1760
+ if (stream_network_state.has_value() && !calld->retry_committed_) {
1761
+ // If not sent on wire, then always retry.
1762
+ // If sent on wire but not seen by server, retry exactly once.
1763
+ if (*stream_network_state == GrpcStreamNetworkState::kNotSentOnWire) {
1764
+ retry = kTransparentRetry;
1765
+ } else if (*stream_network_state ==
1766
+ GrpcStreamNetworkState::kNotSeenByServer &&
1767
+ !calld->sent_transparent_retry_not_seen_by_server_) {
1768
+ calld->sent_transparent_retry_not_seen_by_server_ = true;
1769
+ retry = kTransparentRetry;
1770
+ }
1771
+ }
1772
+ // If not transparently retrying, check for configurable retry.
1773
+ if (retry == kNoRetry &&
1774
+ call_attempt->ShouldRetry(status, server_pushback)) {
1775
+ retry = kConfigurableRetry;
1776
+ }
1777
+ // If we're retrying, do so.
1778
+ if (retry != kNoRetry) {
1779
+ CallCombinerClosureList closures;
1780
+ // Cancel call attempt.
1781
+ call_attempt->MaybeAddBatchForCancelOp(
1782
+ error.ok() ? grpc_error_set_int(
1783
+ GRPC_ERROR_CREATE("call attempt failed"),
1784
+ StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED)
1785
+ : error,
1786
+ &closures);
1787
+ // For transparent retries, add a closure to immediately start a new
1788
+ // call attempt.
1789
+ // For configurable retries, start retry timer.
1790
+ if (retry == kTransparentRetry) {
1791
+ calld->AddClosureToStartTransparentRetry(&closures);
1792
+ } else {
1793
+ calld->StartRetryTimer(server_pushback);
1794
+ }
1795
+ // Record that this attempt has been abandoned.
1796
+ call_attempt->Abandon();
1797
+ // Yields call combiner.
1798
+ closures.RunClosures(calld->call_combiner_);
1799
+ return;
1800
+ }
1721
1801
  }
1722
1802
  // Not retrying, so commit the call.
1723
1803
  calld->RetryCommit(call_attempt);
@@ -1725,7 +1805,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1725
1805
  // subsequent batches.
1726
1806
  call_attempt->MaybeSwitchToFastPath();
1727
1807
  // Run any necessary closures.
1728
- batch_data->RunClosuresForCompletedCall(GRPC_ERROR_REF(error));
1808
+ batch_data->RunClosuresForCompletedCall(error);
1729
1809
  }
1730
1810
 
1731
1811
  //
@@ -1748,7 +1828,6 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1748
1828
  // If batch_data is a replay batch, then there will be no pending
1749
1829
  // batch to complete.
1750
1830
  if (pending == nullptr) {
1751
- GRPC_ERROR_UNREF(error);
1752
1831
  return;
1753
1832
  }
1754
1833
  // Propagate payload.
@@ -1786,7 +1865,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1786
1865
  gpr_log(GPR_INFO,
1787
1866
  "chand=%p calld=%p attempt=%p: starting next batch for pending "
1788
1867
  "send op(s)",
1789
- calld->chand_, calld, call_attempt_.get());
1868
+ calld->chand_, calld, call_attempt_);
1790
1869
  }
1791
1870
  call_attempt_->AddRetriableBatches(closures);
1792
1871
  }
@@ -1795,14 +1874,14 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1795
1874
  void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
1796
1875
  void* arg, grpc_error_handle error) {
1797
1876
  RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1798
- CallAttempt* call_attempt = batch_data->call_attempt_.get();
1877
+ CallAttempt* call_attempt = batch_data->call_attempt_;
1799
1878
  CallData* calld = call_attempt->calld_;
1800
1879
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1801
1880
  gpr_log(GPR_INFO,
1802
1881
  "chand=%p calld=%p attempt=%p batch_data=%p: "
1803
1882
  "got on_complete, error=%s, batch=%s",
1804
1883
  calld->chand_, calld, call_attempt, batch_data.get(),
1805
- grpc_error_std_string(error).c_str(),
1884
+ StatusToString(error).c_str(),
1806
1885
  grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
1807
1886
  }
1808
1887
  // If this attempt has been abandoned, then we're not going to propagate
@@ -1816,16 +1895,16 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
1816
1895
  // recv_trailing_metadata_ready callback, then defer propagating this
1817
1896
  // callback back to the surface. We can evaluate whether to retry when
1818
1897
  // recv_trailing_metadata comes back.
1819
- if (GPR_UNLIKELY(!calld->retry_committed_ && error != GRPC_ERROR_NONE &&
1898
+ if (GPR_UNLIKELY(!calld->retry_committed_ && !error.ok() &&
1820
1899
  !call_attempt->completed_recv_trailing_metadata_)) {
1821
1900
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1822
1901
  gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: deferring on_complete",
1823
1902
  calld->chand_, calld, call_attempt);
1824
1903
  }
1825
1904
  call_attempt->on_complete_deferred_batches_.emplace_back(
1826
- std::move(batch_data), GRPC_ERROR_REF(error));
1905
+ std::move(batch_data), error);
1827
1906
  CallCombinerClosureList closures;
1828
- call_attempt->AddBatchForCancelOp(GRPC_ERROR_REF(error), &closures);
1907
+ call_attempt->MaybeAddBatchForCancelOp(error, &closures);
1829
1908
  if (!call_attempt->started_recv_trailing_metadata_) {
1830
1909
  // recv_trailing_metadata not yet started by application; start it
1831
1910
  // ourselves to get status.
@@ -1852,8 +1931,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
1852
1931
  // Construct list of closures to execute.
1853
1932
  CallCombinerClosureList closures;
1854
1933
  // Add closure for the completed pending batch, if any.
1855
- batch_data->AddClosuresForCompletedPendingBatch(GRPC_ERROR_REF(error),
1856
- &closures);
1934
+ batch_data->AddClosuresForCompletedPendingBatch(error, &closures);
1857
1935
  // If needed, add a callback to start any replay or pending send ops on
1858
1936
  // the LB call.
1859
1937
  if (!call_attempt->completed_recv_trailing_metadata_) {
@@ -1871,14 +1949,14 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
1871
1949
  void RetryFilter::CallData::CallAttempt::BatchData::OnCompleteForCancelOp(
1872
1950
  void* arg, grpc_error_handle error) {
1873
1951
  RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1874
- CallAttempt* call_attempt = batch_data->call_attempt_.get();
1952
+ CallAttempt* call_attempt = batch_data->call_attempt_;
1875
1953
  CallData* calld = call_attempt->calld_;
1876
1954
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1877
1955
  gpr_log(GPR_INFO,
1878
1956
  "chand=%p calld=%p attempt=%p batch_data=%p: "
1879
1957
  "got on_complete for cancel_stream batch, error=%s, batch=%s",
1880
1958
  calld->chand_, calld, call_attempt, batch_data.get(),
1881
- grpc_error_std_string(error).c_str(),
1959
+ StatusToString(error).c_str(),
1882
1960
  grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
1883
1961
  }
1884
1962
  GRPC_CALL_COMBINER_STOP(
@@ -1893,42 +1971,24 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnCompleteForCancelOp(
1893
1971
  void RetryFilter::CallData::CallAttempt::BatchData::
1894
1972
  AddRetriableSendInitialMetadataOp() {
1895
1973
  auto* calld = call_attempt_->calld_;
1896
- // Maps the number of retries to the corresponding metadata value slice.
1897
- const grpc_slice* retry_count_strings[] = {&GRPC_MDSTR_1, &GRPC_MDSTR_2,
1898
- &GRPC_MDSTR_3, &GRPC_MDSTR_4};
1899
1974
  // We need to make a copy of the metadata batch for each attempt, since
1900
1975
  // the filters in the subchannel stack may modify this batch, and we don't
1901
1976
  // want those modifications to be passed forward to subsequent attempts.
1902
1977
  //
1903
1978
  // If we've already completed one or more attempts, add the
1904
1979
  // grpc-retry-attempts header.
1905
- grpc_metadata_batch_copy(&calld->send_initial_metadata_,
1906
- &call_attempt_->send_initial_metadata_);
1907
- if (GPR_UNLIKELY(call_attempt_->send_initial_metadata_.legacy_index()
1908
- ->named.grpc_previous_rpc_attempts != nullptr)) {
1909
- call_attempt_->send_initial_metadata_.Remove(
1910
- GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1911
- }
1980
+ call_attempt_->send_initial_metadata_ = calld->send_initial_metadata_.Copy();
1912
1981
  if (GPR_UNLIKELY(calld->num_attempts_completed_ > 0)) {
1913
- grpc_mdelem retry_md = grpc_mdelem_create(
1914
- GRPC_MDSTR_GRPC_PREVIOUS_RPC_ATTEMPTS,
1915
- *retry_count_strings[calld->num_attempts_completed_ - 1], nullptr);
1916
- grpc_error_handle error = grpc_metadata_batch_add_tail(
1917
- &call_attempt_->send_initial_metadata_,
1918
- &call_attempt_->retry_attempts_metadata_, retry_md,
1919
- GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1920
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
1921
- gpr_log(GPR_ERROR, "error adding retry metadata: %s",
1922
- grpc_error_std_string(error).c_str());
1923
- GPR_ASSERT(false);
1924
- }
1982
+ call_attempt_->send_initial_metadata_.Set(GrpcPreviousRpcAttemptsMetadata(),
1983
+ calld->num_attempts_completed_);
1984
+ } else {
1985
+ call_attempt_->send_initial_metadata_.Remove(
1986
+ GrpcPreviousRpcAttemptsMetadata());
1925
1987
  }
1926
1988
  call_attempt_->started_send_initial_metadata_ = true;
1927
1989
  batch_.send_initial_metadata = true;
1928
1990
  batch_.payload->send_initial_metadata.send_initial_metadata =
1929
1991
  &call_attempt_->send_initial_metadata_;
1930
- batch_.payload->send_initial_metadata.send_initial_metadata_flags =
1931
- calld->send_initial_metadata_flags_;
1932
1992
  batch_.payload->send_initial_metadata.peer_string = calld->peer_string_;
1933
1993
  }
1934
1994
 
@@ -1940,16 +2000,15 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1940
2000
  GPR_INFO,
1941
2001
  "chand=%p calld=%p attempt=%p: starting calld->send_messages[%" PRIuPTR
1942
2002
  "]",
1943
- calld->chand_, calld, call_attempt_.get(),
2003
+ calld->chand_, calld, call_attempt_,
1944
2004
  call_attempt_->started_send_message_count_);
1945
2005
  }
1946
- ByteStreamCache* cache =
2006
+ CachedSendMessage cache =
1947
2007
  calld->send_messages_[call_attempt_->started_send_message_count_];
1948
2008
  ++call_attempt_->started_send_message_count_;
1949
- call_attempt_->send_message_.Init(cache);
1950
2009
  batch_.send_message = true;
1951
- batch_.payload->send_message.send_message.reset(
1952
- call_attempt_->send_message_.get());
2010
+ batch_.payload->send_message.send_message = cache.slices;
2011
+ batch_.payload->send_message.flags = cache.flags;
1953
2012
  }
1954
2013
 
1955
2014
  void RetryFilter::CallData::CallAttempt::BatchData::
@@ -1958,8 +2017,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1958
2017
  // We need to make a copy of the metadata batch for each attempt, since
1959
2018
  // the filters in the subchannel stack may modify this batch, and we don't
1960
2019
  // want those modifications to be passed forward to subsequent attempts.
1961
- grpc_metadata_batch_copy(&calld->send_trailing_metadata_,
1962
- &call_attempt_->send_trailing_metadata_);
2020
+ call_attempt_->send_trailing_metadata_ =
2021
+ calld->send_trailing_metadata_.Copy();
1963
2022
  call_attempt_->started_send_trailing_metadata_ = true;
1964
2023
  batch_.send_trailing_metadata = true;
1965
2024
  batch_.payload->send_trailing_metadata.send_trailing_metadata =
@@ -1986,6 +2045,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1986
2045
  ++call_attempt_->started_recv_message_count_;
1987
2046
  batch_.recv_message = true;
1988
2047
  batch_.payload->recv_message.recv_message = &call_attempt_->recv_message_;
2048
+ batch_.payload->recv_message.flags = &call_attempt_->recv_message_flags_;
1989
2049
  batch_.payload->recv_message.call_failed_before_recv_message = nullptr;
1990
2050
  GRPC_CLOSURE_INIT(&call_attempt_->recv_message_ready_, RecvMessageReady, this,
1991
2051
  grpc_schedule_on_exec_ctx);
@@ -2028,7 +2088,7 @@ grpc_error_handle RetryFilter::CallData::Init(
2028
2088
  gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand,
2029
2089
  elem->call_data);
2030
2090
  }
2031
- return GRPC_ERROR_NONE;
2091
+ return absl::OkStatus();
2032
2092
  }
2033
2093
 
2034
2094
  void RetryFilter::CallData::Destroy(grpc_call_element* elem,
@@ -2064,34 +2124,34 @@ void RetryFilter::CallData::SetPollent(grpc_call_element* elem,
2064
2124
  // CallData implementation
2065
2125
  //
2066
2126
 
2067
- const RetryMethodConfig* GetRetryPolicy(
2127
+ const RetryMethodConfig* RetryFilter::GetRetryPolicy(
2068
2128
  const grpc_call_context_element* context) {
2069
2129
  if (context == nullptr) return nullptr;
2070
2130
  auto* svc_cfg_call_data = static_cast<ServiceConfigCallData*>(
2071
2131
  context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2072
2132
  if (svc_cfg_call_data == nullptr) return nullptr;
2073
2133
  return static_cast<const RetryMethodConfig*>(
2074
- svc_cfg_call_data->GetMethodParsedConfig(
2075
- RetryServiceConfigParser::ParserIndex()));
2134
+ svc_cfg_call_data->GetMethodParsedConfig(service_config_parser_index_));
2076
2135
  }
2077
2136
 
2078
2137
  RetryFilter::CallData::CallData(RetryFilter* chand,
2079
2138
  const grpc_call_element_args& args)
2080
2139
  : chand_(chand),
2081
2140
  retry_throttle_data_(chand->retry_throttle_data_),
2082
- retry_policy_(GetRetryPolicy(args.context)),
2141
+ retry_policy_(chand->GetRetryPolicy(args.context)),
2083
2142
  retry_backoff_(
2084
2143
  BackOff::Options()
2085
2144
  .set_initial_backoff(retry_policy_ == nullptr
2086
- ? 0
2145
+ ? Duration::Zero()
2087
2146
  : retry_policy_->initial_backoff())
2088
2147
  .set_multiplier(retry_policy_ == nullptr
2089
2148
  ? 0
2090
2149
  : retry_policy_->backoff_multiplier())
2091
2150
  .set_jitter(RETRY_BACKOFF_JITTER)
2092
- .set_max_backoff(
2093
- retry_policy_ == nullptr ? 0 : retry_policy_->max_backoff())),
2094
- path_(grpc_slice_ref_internal(args.path)),
2151
+ .set_max_backoff(retry_policy_ == nullptr
2152
+ ? Duration::Zero()
2153
+ : retry_policy_->max_backoff())),
2154
+ path_(CSliceRef(args.path)),
2095
2155
  deadline_(args.deadline),
2096
2156
  arena_(args.arena),
2097
2157
  owning_call_(args.call_stack),
@@ -2103,32 +2163,50 @@ RetryFilter::CallData::CallData(RetryFilter* chand,
2103
2163
  pending_send_message_(false),
2104
2164
  pending_send_trailing_metadata_(false),
2105
2165
  retry_committed_(false),
2106
- retry_timer_pending_(false) {}
2166
+ retry_timer_pending_(false),
2167
+ retry_codepath_started_(false),
2168
+ sent_transparent_retry_not_seen_by_server_(false) {}
2107
2169
 
2108
2170
  RetryFilter::CallData::~CallData() {
2109
- grpc_slice_unref_internal(path_);
2171
+ FreeAllCachedSendOpData();
2172
+ CSliceUnref(path_);
2110
2173
  // Make sure there are no remaining pending batches.
2111
2174
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2112
2175
  GPR_ASSERT(pending_batches_[i].batch == nullptr);
2113
2176
  }
2114
- GRPC_ERROR_UNREF(cancelled_from_surface_);
2115
2177
  }
2116
2178
 
2117
2179
  void RetryFilter::CallData::StartTransportStreamOpBatch(
2118
2180
  grpc_transport_stream_op_batch* batch) {
2181
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) &&
2182
+ !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2183
+ gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from surface: %s",
2184
+ chand_, this, grpc_transport_stream_op_batch_string(batch).c_str());
2185
+ }
2119
2186
  // If we have an LB call, delegate to the LB call.
2120
2187
  if (committed_call_ != nullptr) {
2121
2188
  // Note: This will release the call combiner.
2122
2189
  committed_call_->StartTransportStreamOpBatch(batch);
2123
2190
  return;
2124
2191
  }
2192
+ // If we were previously cancelled from the surface, fail this
2193
+ // batch immediately.
2194
+ if (!cancelled_from_surface_.ok()) {
2195
+ // Note: This will release the call combiner.
2196
+ grpc_transport_stream_op_batch_finish_with_failure(
2197
+ batch, cancelled_from_surface_, call_combiner_);
2198
+ return;
2199
+ }
2125
2200
  // Handle cancellation.
2126
2201
  if (GPR_UNLIKELY(batch->cancel_stream)) {
2127
- grpc_error_handle cancel_error = batch->payload->cancel_stream.cancel_error;
2202
+ // Save cancel_error in case subsequent batches are started.
2203
+ cancelled_from_surface_ = batch->payload->cancel_stream.cancel_error;
2128
2204
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2129
2205
  gpr_log(GPR_INFO, "chand=%p calld=%p: cancelled from surface: %s", chand_,
2130
- this, grpc_error_std_string(cancel_error).c_str());
2206
+ this, StatusToString(cancelled_from_surface_).c_str());
2131
2207
  }
2208
+ // Fail any pending batches.
2209
+ PendingBatchesFail(cancelled_from_surface_);
2132
2210
  // If we have a current call attempt, commit the call, then send
2133
2211
  // the cancellation down to that attempt. When the call fails, it
2134
2212
  // will not be retried, because we have committed it here.
@@ -2144,10 +2222,7 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2144
2222
  call_attempt_->CancelFromSurface(batch);
2145
2223
  return;
2146
2224
  }
2147
- // Save cancel_error in case subsequent batches are started.
2148
- GRPC_ERROR_UNREF(cancelled_from_surface_);
2149
- cancelled_from_surface_ = GRPC_ERROR_REF(cancel_error);
2150
- // Cancel retry timer.
2225
+ // Cancel retry timer if needed.
2151
2226
  if (retry_timer_pending_) {
2152
2227
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2153
2228
  gpr_log(GPR_INFO, "chand=%p calld=%p: cancelling retry timer", chand_,
@@ -2157,11 +2232,11 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2157
2232
  grpc_timer_cancel(&retry_timer_);
2158
2233
  FreeAllCachedSendOpData();
2159
2234
  }
2160
- // Fail pending batches.
2161
- PendingBatchesFail(GRPC_ERROR_REF(cancel_error));
2235
+ // We have no call attempt, so there's nowhere to send the cancellation
2236
+ // batch. Return it back to the surface immediately.
2162
2237
  // Note: This will release the call combiner.
2163
2238
  grpc_transport_stream_op_batch_finish_with_failure(
2164
- batch, GRPC_ERROR_REF(cancel_error), call_combiner_);
2239
+ batch, cancelled_from_surface_, call_combiner_);
2165
2240
  return;
2166
2241
  }
2167
2242
  // Add the batch to the pending list.
@@ -2175,20 +2250,6 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2175
2250
  }
2176
2251
  // If we do not yet have a call attempt, create one.
2177
2252
  if (call_attempt_ == nullptr) {
2178
- // If we were previously cancelled from the surface, cancel this
2179
- // batch instead of creating a call attempt.
2180
- if (cancelled_from_surface_ != GRPC_ERROR_NONE) {
2181
- PendingBatchClear(pending);
2182
- // Note: This will release the call combiner.
2183
- grpc_transport_stream_op_batch_finish_with_failure(
2184
- batch, GRPC_ERROR_REF(cancelled_from_surface_), call_combiner_);
2185
- return;
2186
- }
2187
- // If there is no retry policy, then commit retries immediately.
2188
- // This ensures that the code below will always jump to the fast path.
2189
- // TODO(roth): Remove this special case when we implement
2190
- // transparent retries.
2191
- if (retry_policy_ == nullptr) retry_committed_ = true;
2192
2253
  // If this is the first batch and retries are already committed
2193
2254
  // (e.g., if this batch put the call above the buffer size limit), then
2194
2255
  // immediately create an LB call and delegate the batch to it. This
@@ -2204,7 +2265,7 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2204
2265
  // We also skip this optimization if perAttemptRecvTimeout is set in the
2205
2266
  // retry policy, because we need the code in CallAttempt to handle
2206
2267
  // the associated timer.
2207
- if (num_attempts_completed_ == 0 && retry_committed_ &&
2268
+ if (!retry_codepath_started_ && retry_committed_ &&
2208
2269
  (retry_policy_ == nullptr ||
2209
2270
  !retry_policy_->per_attempt_recv_timeout().has_value())) {
2210
2271
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
@@ -2218,7 +2279,8 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2218
2279
  static_cast<ClientChannelServiceConfigCallData*>(
2219
2280
  call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2220
2281
  committed_call_ = CreateLoadBalancedCall(
2221
- service_config_call_data->call_dispatch_controller());
2282
+ service_config_call_data->call_dispatch_controller(),
2283
+ /*is_transparent_retry=*/false);
2222
2284
  committed_call_->StartTransportStreamOpBatch(batch);
2223
2285
  return;
2224
2286
  }
@@ -2229,7 +2291,8 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2229
2291
  gpr_log(GPR_INFO, "chand=%p calld=%p: creating call attempt", chand_,
2230
2292
  this);
2231
2293
  }
2232
- CreateCallAttempt();
2294
+ retry_codepath_started_ = true;
2295
+ CreateCallAttempt(/*is_transparent_retry=*/false);
2233
2296
  return;
2234
2297
  }
2235
2298
  // Send batches to call attempt.
@@ -2242,7 +2305,8 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2242
2305
 
2243
2306
  OrphanablePtr<ClientChannel::LoadBalancedCall>
2244
2307
  RetryFilter::CallData::CreateLoadBalancedCall(
2245
- ConfigSelector::CallDispatchController* call_dispatch_controller) {
2308
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
2309
+ bool is_transparent_retry) {
2246
2310
  grpc_call_element_args args = {owning_call_, nullptr, call_context_,
2247
2311
  path_, /*start_time=*/0, deadline_,
2248
2312
  arena_, call_combiner_};
@@ -2251,13 +2315,11 @@ RetryFilter::CallData::CreateLoadBalancedCall(
2251
2315
  // This callback holds a ref to the CallStackDestructionBarrier
2252
2316
  // object until the LB call is destroyed.
2253
2317
  call_stack_destruction_barrier_->MakeLbCallDestructionClosure(this),
2254
- call_dispatch_controller,
2255
- // TODO(roth): Change this when we support transparent retries.
2256
- /*is_transparent_retry=*/false);
2318
+ call_dispatch_controller, is_transparent_retry);
2257
2319
  }
2258
2320
 
2259
- void RetryFilter::CallData::CreateCallAttempt() {
2260
- call_attempt_ = MakeRefCounted<CallAttempt>(this);
2321
+ void RetryFilter::CallData::CreateCallAttempt(bool is_transparent_retry) {
2322
+ call_attempt_ = MakeRefCounted<CallAttempt>(this, is_transparent_retry);
2261
2323
  call_attempt_->StartRetriableBatches();
2262
2324
  }
2263
2325
 
@@ -2274,23 +2336,21 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2274
2336
  seen_send_initial_metadata_ = true;
2275
2337
  grpc_metadata_batch* send_initial_metadata =
2276
2338
  batch->payload->send_initial_metadata.send_initial_metadata;
2277
- grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_);
2278
- send_initial_metadata_flags_ =
2279
- batch->payload->send_initial_metadata.send_initial_metadata_flags;
2339
+ send_initial_metadata_ = send_initial_metadata->Copy();
2280
2340
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2281
2341
  }
2282
2342
  // Set up cache for send_message ops.
2283
2343
  if (batch->send_message) {
2284
- ByteStreamCache* cache = arena_->New<ByteStreamCache>(
2285
- std::move(batch->payload->send_message.send_message));
2286
- send_messages_.push_back(cache);
2344
+ SliceBuffer* cache = arena_->New<SliceBuffer>(std::move(
2345
+ *std::exchange(batch->payload->send_message.send_message, nullptr)));
2346
+ send_messages_.push_back({cache, batch->payload->send_message.flags});
2287
2347
  }
2288
2348
  // Save metadata batch for send_trailing_metadata ops.
2289
2349
  if (batch->send_trailing_metadata) {
2290
2350
  seen_send_trailing_metadata_ = true;
2291
2351
  grpc_metadata_batch* send_trailing_metadata =
2292
2352
  batch->payload->send_trailing_metadata.send_trailing_metadata;
2293
- grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_);
2353
+ send_trailing_metadata_ = send_trailing_metadata->Copy();
2294
2354
  }
2295
2355
  }
2296
2356
 
@@ -2303,12 +2363,14 @@ void RetryFilter::CallData::FreeCachedSendInitialMetadata() {
2303
2363
  }
2304
2364
 
2305
2365
  void RetryFilter::CallData::FreeCachedSendMessage(size_t idx) {
2306
- if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2307
- gpr_log(GPR_INFO,
2308
- "chand=%p calld=%p: destroying send_messages[%" PRIuPTR "]", chand_,
2309
- this, idx);
2366
+ if (send_messages_[idx].slices != nullptr) {
2367
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2368
+ gpr_log(GPR_INFO,
2369
+ "chand=%p calld=%p: destroying send_messages[%" PRIuPTR "]",
2370
+ chand_, this, idx);
2371
+ }
2372
+ Destruct(std::exchange(send_messages_[idx].slices, nullptr));
2310
2373
  }
2311
- send_messages_[idx]->Destroy();
2312
2374
  }
2313
2375
 
2314
2376
  void RetryFilter::CallData::FreeCachedSendTrailingMetadata() {
@@ -2371,7 +2433,7 @@ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchesAdd(
2371
2433
  if (batch->send_message) {
2372
2434
  pending_send_message_ = true;
2373
2435
  bytes_buffered_for_retry_ +=
2374
- batch->payload->send_message.send_message->length();
2436
+ batch->payload->send_message.send_message->Length();
2375
2437
  }
2376
2438
  if (batch->send_trailing_metadata) {
2377
2439
  pending_send_trailing_metadata_ = true;
@@ -2432,13 +2494,13 @@ void RetryFilter::CallData::FailPendingBatchInCallCombiner(
2432
2494
  static_cast<grpc_transport_stream_op_batch*>(arg);
2433
2495
  CallData* call = static_cast<CallData*>(batch->handler_private.extra_arg);
2434
2496
  // Note: This will release the call combiner.
2435
- grpc_transport_stream_op_batch_finish_with_failure(
2436
- batch, GRPC_ERROR_REF(error), call->call_combiner_);
2497
+ grpc_transport_stream_op_batch_finish_with_failure(batch, error,
2498
+ call->call_combiner_);
2437
2499
  }
2438
2500
 
2439
2501
  // This is called via the call combiner, so access to calld is synchronized.
2440
2502
  void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
2441
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2503
+ GPR_ASSERT(!error.ok());
2442
2504
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2443
2505
  size_t num_batches = 0;
2444
2506
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2446,7 +2508,7 @@ void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
2446
2508
  }
2447
2509
  gpr_log(GPR_INFO,
2448
2510
  "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2449
- chand_, this, num_batches, grpc_error_std_string(error).c_str());
2511
+ chand_, this, num_batches, StatusToString(error).c_str());
2450
2512
  }
2451
2513
  CallCombinerClosureList closures;
2452
2514
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2457,13 +2519,12 @@ void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
2457
2519
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2458
2520
  FailPendingBatchInCallCombiner, batch,
2459
2521
  grpc_schedule_on_exec_ctx);
2460
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2522
+ closures.Add(&batch->handler_private.closure, error,
2461
2523
  "PendingBatchesFail");
2462
2524
  PendingBatchClear(pending);
2463
2525
  }
2464
2526
  }
2465
2527
  closures.RunClosuresWithoutYielding(call_combiner_);
2466
- GRPC_ERROR_UNREF(error);
2467
2528
  }
2468
2529
 
2469
2530
  template <typename Predicate>
@@ -2512,13 +2573,15 @@ void RetryFilter::CallData::RetryCommit(CallAttempt* call_attempt) {
2512
2573
  }
2513
2574
  }
2514
2575
 
2515
- void RetryFilter::CallData::StartRetryTimer(grpc_millis server_pushback_ms) {
2576
+ void RetryFilter::CallData::StartRetryTimer(
2577
+ absl::optional<Duration> server_pushback) {
2516
2578
  // Reset call attempt.
2517
2579
  call_attempt_.reset(DEBUG_LOCATION, "StartRetryTimer");
2518
2580
  // Compute backoff delay.
2519
- grpc_millis next_attempt_time;
2520
- if (server_pushback_ms >= 0) {
2521
- next_attempt_time = ExecCtx::Get()->Now() + server_pushback_ms;
2581
+ Timestamp next_attempt_time;
2582
+ if (server_pushback.has_value()) {
2583
+ GPR_ASSERT(*server_pushback >= Duration::Zero());
2584
+ next_attempt_time = Timestamp::Now() + *server_pushback;
2522
2585
  retry_backoff_.Reset();
2523
2586
  } else {
2524
2587
  next_attempt_time = retry_backoff_.NextAttemptTime();
@@ -2526,7 +2589,7 @@ void RetryFilter::CallData::StartRetryTimer(grpc_millis server_pushback_ms) {
2526
2589
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2527
2590
  gpr_log(GPR_INFO,
2528
2591
  "chand=%p calld=%p: retrying failed call in %" PRId64 " ms", chand_,
2529
- this, next_attempt_time - ExecCtx::Get()->Now());
2592
+ this, (next_attempt_time - Timestamp::Now()).millis());
2530
2593
  }
2531
2594
  // Schedule retry after computed delay.
2532
2595
  GRPC_CLOSURE_INIT(&retry_closure_, OnRetryTimer, this, nullptr);
@@ -2538,26 +2601,50 @@ void RetryFilter::CallData::StartRetryTimer(grpc_millis server_pushback_ms) {
2538
2601
  void RetryFilter::CallData::OnRetryTimer(void* arg, grpc_error_handle error) {
2539
2602
  auto* calld = static_cast<CallData*>(arg);
2540
2603
  GRPC_CLOSURE_INIT(&calld->retry_closure_, OnRetryTimerLocked, calld, nullptr);
2541
- GRPC_CALL_COMBINER_START(calld->call_combiner_, &calld->retry_closure_,
2542
- GRPC_ERROR_REF(error), "retry timer fired");
2604
+ GRPC_CALL_COMBINER_START(calld->call_combiner_, &calld->retry_closure_, error,
2605
+ "retry timer fired");
2543
2606
  }
2544
2607
 
2545
2608
  void RetryFilter::CallData::OnRetryTimerLocked(void* arg,
2546
2609
  grpc_error_handle error) {
2547
2610
  auto* calld = static_cast<CallData*>(arg);
2548
- if (error == GRPC_ERROR_NONE && calld->retry_timer_pending_) {
2611
+ if (error.ok() && calld->retry_timer_pending_) {
2549
2612
  calld->retry_timer_pending_ = false;
2550
- calld->CreateCallAttempt();
2613
+ calld->CreateCallAttempt(/*is_transparent_retry=*/false);
2551
2614
  } else {
2552
2615
  GRPC_CALL_COMBINER_STOP(calld->call_combiner_, "retry timer cancelled");
2553
2616
  }
2554
2617
  GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
2555
2618
  }
2556
2619
 
2620
+ void RetryFilter::CallData::AddClosureToStartTransparentRetry(
2621
+ CallCombinerClosureList* closures) {
2622
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2623
+ gpr_log(GPR_INFO, "chand=%p calld=%p: scheduling transparent retry", chand_,
2624
+ this);
2625
+ }
2626
+ GRPC_CALL_STACK_REF(owning_call_, "OnRetryTimer");
2627
+ GRPC_CLOSURE_INIT(&retry_closure_, StartTransparentRetry, this, nullptr);
2628
+ closures->Add(&retry_closure_, absl::OkStatus(), "start transparent retry");
2629
+ }
2630
+
2631
+ void RetryFilter::CallData::StartTransparentRetry(void* arg,
2632
+ grpc_error_handle /*error*/) {
2633
+ auto* calld = static_cast<CallData*>(arg);
2634
+ if (calld->cancelled_from_surface_.ok()) {
2635
+ calld->CreateCallAttempt(/*is_transparent_retry=*/true);
2636
+ } else {
2637
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
2638
+ "call cancelled before transparent retry");
2639
+ }
2640
+ GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
2641
+ }
2642
+
2557
2643
  } // namespace
2558
2644
 
2559
2645
  const grpc_channel_filter kRetryFilterVtable = {
2560
2646
  RetryFilter::CallData::StartTransportStreamOpBatch,
2647
+ nullptr,
2561
2648
  RetryFilter::StartTransportOp,
2562
2649
  sizeof(RetryFilter::CallData),
2563
2650
  RetryFilter::CallData::Init,
@@ -2565,6 +2652,7 @@ const grpc_channel_filter kRetryFilterVtable = {
2565
2652
  RetryFilter::CallData::Destroy,
2566
2653
  sizeof(RetryFilter),
2567
2654
  RetryFilter::Init,
2655
+ grpc_channel_stack_no_post_init,
2568
2656
  RetryFilter::Destroy,
2569
2657
  RetryFilter::GetChannelInfo,
2570
2658
  "retry_filter",