grpc 1.35.0 → 1.47.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 (2272) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +617 -386
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/README.md +38 -0
  7. data/include/grpc/event_engine/endpoint_config.h +43 -0
  8. data/include/grpc/event_engine/event_engine.h +434 -0
  9. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  10. data/include/grpc/event_engine/memory_allocator.h +211 -0
  11. data/include/grpc/event_engine/memory_request.h +57 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/event_engine/slice.h +286 -0
  14. data/include/grpc/event_engine/slice_buffer.h +112 -0
  15. data/include/grpc/fork.h +1 -1
  16. data/include/grpc/grpc.h +76 -19
  17. data/include/grpc/grpc_posix.h +22 -18
  18. data/include/grpc/grpc_security.h +378 -195
  19. data/include/grpc/grpc_security_constants.h +17 -14
  20. data/include/grpc/impl/codegen/atm.h +5 -3
  21. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  22. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  23. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  24. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  25. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  26. data/include/grpc/impl/codegen/compression_types.h +2 -2
  27. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  28. data/include/grpc/impl/codegen/fork.h +2 -0
  29. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  30. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  31. data/include/grpc/impl/codegen/grpc_types.h +68 -41
  32. data/include/grpc/impl/codegen/log.h +2 -0
  33. data/include/grpc/impl/codegen/port_platform.h +162 -35
  34. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  35. data/include/grpc/impl/codegen/slice.h +6 -1
  36. data/include/grpc/impl/codegen/status.h +2 -0
  37. data/include/grpc/impl/codegen/sync.h +8 -5
  38. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  39. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  40. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  41. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  42. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  43. data/include/grpc/module.modulemap +14 -14
  44. data/include/grpc/slice.h +1 -12
  45. data/include/grpc/status.h +1 -1
  46. data/include/grpc/support/atm.h +1 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  48. data/include/grpc/support/atm_gcc_sync.h +1 -1
  49. data/include/grpc/support/atm_windows.h +1 -1
  50. data/include/grpc/support/log.h +1 -1
  51. data/include/grpc/support/port_platform.h +1 -1
  52. data/include/grpc/support/sync.h +1 -1
  53. data/include/grpc/support/sync_abseil.h +1 -1
  54. data/include/grpc/support/sync_custom.h +1 -1
  55. data/include/grpc/support/sync_generic.h +1 -1
  56. data/include/grpc/support/sync_posix.h +1 -1
  57. data/include/grpc/support/sync_windows.h +1 -1
  58. data/include/grpc/support/time.h +2 -2
  59. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  60. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +297 -0
  61. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +125 -0
  62. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  63. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  64. data/src/core/ext/filters/client_channel/backend_metric.cc +32 -30
  65. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +22 -17
  67. data/src/core/ext/filters/client_channel/backup_poller.h +2 -3
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +181 -203
  69. data/src/core/ext/filters/client_channel/client_channel.cc +1429 -3634
  70. data/src/core/ext/filters/client_channel/client_channel.h +583 -56
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -7
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +14 -4
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +7 -1
  74. data/src/core/ext/filters/client_channel/client_channel_factory.h +26 -19
  75. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -31
  76. data/src/core/ext/filters/client_channel/config_selector.cc +3 -1
  77. data/src/core/ext/filters/client_channel/config_selector.h +37 -15
  78. data/src/core/ext/filters/client_channel/connector.h +28 -22
  79. data/src/core/ext/filters/client_channel/dynamic_filters.cc +35 -21
  80. data/src/core/ext/filters/client_channel/dynamic_filters.h +16 -6
  81. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +27 -163
  82. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +19 -24
  83. data/src/core/ext/filters/client_channel/health/health_check_client.cc +141 -581
  84. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -158
  85. data/src/core/ext/filters/client_channel/http_proxy.cc +110 -109
  86. data/src/core/ext/filters/client_channel/http_proxy.h +20 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
  88. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  89. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +18 -2
  91. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -27
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +350 -213
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +5 -1
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +11 -4
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -19
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -7
  101. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +144 -111
  106. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +334 -245
  107. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +865 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +39 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2577 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +205 -195
  111. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +55 -47
  112. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +146 -89
  113. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +418 -275
  114. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
  115. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +219 -133
  117. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +84 -76
  118. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +532 -515
  119. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -29
  120. data/src/core/ext/filters/client_channel/lb_policy.h +168 -141
  121. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -1
  122. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +16 -12
  123. data/src/core/ext/filters/client_channel/lb_policy_registry.h +7 -2
  124. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +31 -67
  125. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +11 -9
  126. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  127. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  128. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  129. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +151 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +396 -336
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +31 -13
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +33 -26
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +55 -71
  134. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +220 -332
  135. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +52 -30
  136. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +4 -3
  137. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  139. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +118 -245
  140. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +70 -73
  141. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +14 -8
  142. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +446 -0
  143. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +213 -0
  144. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +113 -0
  145. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +59 -54
  146. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +786 -452
  147. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +46 -263
  148. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +43 -60
  149. data/src/core/ext/filters/client_channel/retry_filter.cc +2695 -0
  150. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  151. data/src/core/ext/filters/client_channel/retry_service_config.cc +313 -0
  152. data/src/core/ext/filters/client_channel/retry_service_config.h +111 -0
  153. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -66
  154. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
  155. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +72 -40
  156. data/src/core/ext/filters/client_channel/subchannel.cc +319 -464
  157. data/src/core/ext/filters/client_channel/subchannel.h +163 -154
  158. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  159. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  160. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +48 -9
  161. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +26 -12
  162. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +558 -0
  163. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +226 -0
  164. data/src/core/ext/filters/deadline/deadline_filter.cc +45 -43
  165. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  166. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +255 -0
  167. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +62 -0
  168. data/src/core/ext/filters/fault_injection/service_config_parser.cc +179 -0
  169. data/src/core/ext/filters/fault_injection/service_config_parser.h +91 -0
  170. data/src/core/ext/filters/http/client/http_client_filter.cc +92 -538
  171. data/src/core/ext/filters/http/client/http_client_filter.h +27 -4
  172. data/src/core/ext/filters/http/client_authority_filter.cc +42 -111
  173. data/src/core/ext/filters/http/client_authority_filter.h +24 -5
  174. data/src/core/ext/filters/http/http_filters_plugin.cc +54 -73
  175. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +68 -157
  176. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -56
  177. data/src/core/ext/filters/http/server/http_server_filter.cc +91 -464
  178. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  179. data/src/core/ext/filters/message_size/message_size_filter.cc +78 -90
  180. data/src/core/ext/filters/message_size/message_size_filter.h +13 -6
  181. data/src/core/ext/filters/rbac/rbac_filter.cc +163 -0
  182. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  183. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  184. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  185. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  186. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  187. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  188. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
  189. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  190. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +285 -86
  191. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +15 -13
  192. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +778 -235
  193. data/src/core/ext/transport/chttp2/server/chttp2_server.h +13 -2
  194. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -5
  195. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -1
  196. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -0
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +604 -489
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +29 -5
  199. data/src/core/ext/transport/chttp2/transport/context_list.cc +8 -6
  200. data/src/core/ext/transport/chttp2/transport/context_list.h +7 -6
  201. data/src/core/ext/transport/chttp2/transport/flow_control.cc +72 -49
  202. data/src/core/ext/transport/chttp2/transport/flow_control.h +33 -23
  203. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  204. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -26
  205. data/src/core/ext/transport/chttp2/transport/frame_data.h +15 -11
  206. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +24 -20
  207. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -7
  208. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +22 -17
  209. data/src/core/ext/transport/chttp2/transport/frame_ping.h +11 -6
  210. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +23 -17
  211. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -6
  212. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +63 -20
  213. data/src/core/ext/transport/chttp2/transport/frame_settings.h +11 -6
  214. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +20 -14
  215. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +8 -6
  216. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +526 -757
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +198 -73
  219. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +89 -0
  220. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +74 -0
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +836 -1200
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -84
  223. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +257 -0
  224. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +132 -0
  225. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  226. data/src/core/ext/transport/chttp2/transport/internal.h +80 -79
  227. data/src/core/ext/transport/chttp2/transport/parsing.cc +192 -299
  228. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +15 -11
  229. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  230. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  231. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  232. data/src/core/ext/transport/chttp2/transport/varint.h +41 -28
  233. data/src/core/ext/transport/chttp2/transport/writing.cc +169 -173
  234. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  235. data/src/core/ext/transport/inproc/inproc_transport.cc +190 -216
  236. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  237. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  238. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  239. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  240. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  241. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +444 -0
  242. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2156 -0
  243. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  244. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  245. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  246. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  247. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  249. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  250. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  251. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  252. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  253. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  254. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  255. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  256. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  257. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  258. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +52 -1
  259. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  260. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +57 -18
  261. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -118
  262. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +761 -386
  263. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +411 -0
  264. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2161 -0
  265. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +50 -29
  266. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +224 -95
  267. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +341 -256
  268. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1943 -800
  269. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  270. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +50 -24
  271. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +61 -27
  272. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +291 -95
  273. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  274. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +75 -54
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +398 -190
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -8
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +53 -25
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +252 -143
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1285 -493
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +107 -47
  282. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +562 -172
  283. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  284. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +46 -24
  285. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +17 -23
  286. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -95
  287. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  288. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +146 -118
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +853 -415
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +142 -92
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +807 -340
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +65 -31
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +235 -89
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1244 -288
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -6
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +36 -17
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +169 -0
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +83 -34
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +30 -10
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +118 -32
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +118 -0
  307. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -37
  308. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +214 -109
  309. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +92 -39
  310. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +449 -131
  311. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  312. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +389 -188
  313. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  314. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +42 -21
  315. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +105 -68
  316. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +616 -242
  317. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +106 -75
  318. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +637 -287
  319. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +63 -0
  320. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +234 -0
  321. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -12
  322. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +96 -49
  323. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  324. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  325. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +165 -0
  326. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +716 -0
  327. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +174 -0
  328. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +721 -0
  329. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +131 -100
  330. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +628 -282
  331. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -25
  332. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +338 -115
  333. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +688 -537
  334. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4135 -1819
  335. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  336. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +168 -72
  337. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  338. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  339. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  342. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  343. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -15
  344. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +91 -46
  345. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  346. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  347. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  348. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  349. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  350. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  351. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  352. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  353. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  354. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  355. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  356. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  359. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +42 -0
  360. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +85 -0
  361. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +96 -0
  362. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +375 -0
  363. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +94 -0
  364. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +433 -0
  365. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  366. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  367. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +55 -0
  368. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +168 -0
  369. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +301 -202
  370. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1794 -663
  371. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -2
  372. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  373. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +114 -49
  374. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +652 -198
  375. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +43 -31
  376. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +176 -104
  377. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +128 -84
  378. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +673 -259
  379. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  380. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  381. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  382. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  383. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +99 -73
  384. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +550 -282
  385. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -19
  386. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +121 -62
  387. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +138 -0
  388. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +631 -0
  389. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  390. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  391. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  392. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +249 -0
  393. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  394. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  395. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  396. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +116 -56
  397. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +49 -0
  398. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +117 -0
  399. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  400. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +56 -27
  401. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  402. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +46 -24
  403. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
  404. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +137 -69
  405. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -19
  406. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +137 -65
  407. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +60 -0
  408. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +170 -0
  409. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  410. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +170 -83
  411. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  412. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +273 -145
  413. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  414. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +268 -132
  415. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  416. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  417. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  418. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  419. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  420. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  421. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  422. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +76 -36
  423. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  424. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +118 -52
  425. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  426. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  427. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  428. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -19
  429. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  430. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  431. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  432. data/src/core/ext/upb-generated/google/api/annotations.upb.h +24 -1
  433. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +155 -126
  434. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +791 -385
  435. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +167 -118
  436. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +886 -390
  437. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  438. data/src/core/ext/upb-generated/google/api/http.upb.h +236 -115
  439. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  440. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  441. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  442. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +46 -22
  443. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -283
  444. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2263 -1053
  445. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  446. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +44 -20
  447. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  448. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  449. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  450. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +197 -93
  451. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  452. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +44 -20
  453. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  454. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +296 -149
  455. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  456. data/src/core/ext/upb-generated/google/rpc/status.upb.h +60 -30
  457. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  458. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  459. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  460. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +111 -48
  461. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  462. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +753 -365
  463. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  464. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +90 -41
  465. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  466. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +70 -35
  467. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  468. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +448 -232
  469. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  470. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  471. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  472. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  473. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  474. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +213 -57
  475. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  476. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +62 -18
  477. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  478. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +17 -1
  479. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  480. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -20
  481. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  482. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +57 -18
  483. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -295
  484. data/src/core/ext/upb-generated/validate/validate.upb.h +3021 -1221
  485. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  486. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  487. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  488. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  489. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  490. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  491. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  492. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  493. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  494. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  495. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +41 -0
  496. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +79 -0
  497. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +66 -0
  498. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +200 -0
  499. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +56 -0
  500. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +115 -0
  501. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  502. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  503. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +49 -0
  504. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +127 -0
  505. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +68 -0
  506. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +240 -0
  507. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +49 -0
  508. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +121 -0
  509. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  510. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  511. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  512. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  513. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  514. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  515. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  516. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  517. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  518. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  519. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  520. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  521. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  522. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  523. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  524. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  525. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +309 -0
  526. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  527. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  528. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  529. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  530. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  531. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  532. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  533. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  534. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  535. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  536. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  537. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  538. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  539. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  540. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  541. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +22 -12
  542. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  543. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  544. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  545. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +183 -215
  546. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  547. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +393 -0
  548. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  550. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  551. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +497 -498
  552. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  553. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  554. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  555. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +28 -23
  556. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  558. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +225 -224
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +83 -58
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -115
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +182 -187
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +267 -197
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +61 -31
  581. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +15 -20
  582. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  583. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  586. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  587. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +46 -31
  588. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +69 -80
  592. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  593. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  594. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  595. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  596. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  597. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  598. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  599. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +157 -150
  600. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -16
  601. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -150
  602. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  603. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -39
  606. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  607. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +125 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +134 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +85 -67
  616. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +12 -7
  617. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +826 -845
  618. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +166 -151
  619. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  620. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  621. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  622. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  623. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  624. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  625. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  626. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  627. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +32 -39
  628. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  629. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  630. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  631. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  632. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  633. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  634. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  635. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  636. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  637. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  638. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  639. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  640. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  641. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  642. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +50 -0
  644. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  645. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +92 -0
  646. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  647. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +117 -0
  648. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  649. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  650. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  651. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +78 -0
  652. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  653. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +428 -388
  654. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +67 -52
  655. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +22 -22
  656. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  657. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -130
  658. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  659. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +57 -71
  660. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  661. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +217 -212
  662. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  663. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  664. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  665. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  666. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  667. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +99 -123
  668. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +24 -19
  669. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +19 -26
  670. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  671. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +153 -0
  672. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  674. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  678. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  680. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  681. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +54 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  684. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  685. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  686. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  687. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +45 -48
  688. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  689. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +40 -47
  690. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  691. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +58 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  693. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  694. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  695. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  696. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  697. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  698. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  699. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  700. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  701. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  702. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  703. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  704. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  705. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  706. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  707. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  708. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  709. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  710. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  711. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  712. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  713. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  714. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  715. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  716. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  717. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  718. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  719. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  720. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  721. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  722. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  723. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  724. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  725. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  726. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  727. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  728. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  729. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  730. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  731. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  732. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  733. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  734. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  735. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  736. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  737. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  738. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  739. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +9 -14
  740. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  741. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  742. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  743. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  744. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  745. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  746. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  747. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  748. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  749. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  750. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  751. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  752. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  753. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  754. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  755. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +189 -213
  756. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  757. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  758. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  759. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  760. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  761. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  762. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  763. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  764. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  765. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  767. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +38 -0
  768. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  769. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +56 -0
  770. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  771. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +39 -0
  772. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  773. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  774. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  775. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +45 -0
  776. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  777. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +61 -0
  778. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  779. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +46 -0
  780. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  781. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  782. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  783. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  784. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  785. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  786. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  787. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  788. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  789. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  790. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  791. data/src/core/ext/xds/certificate_provider_store.cc +10 -0
  792. data/src/core/ext/xds/certificate_provider_store.h +13 -4
  793. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
  794. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +4 -4
  795. data/src/core/ext/xds/upb_utils.h +67 -0
  796. data/src/core/ext/xds/xds_api.cc +347 -1925
  797. data/src/core/ext/xds/xds_api.h +127 -405
  798. data/src/core/ext/xds/xds_bootstrap.cc +324 -274
  799. data/src/core/ext/xds/xds_bootstrap.h +61 -26
  800. data/src/core/ext/xds/xds_certificate_provider.cc +192 -81
  801. data/src/core/ext/xds/xds_certificate_provider.h +92 -45
  802. data/src/core/ext/xds/xds_channel_args.h +5 -2
  803. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  804. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  805. data/src/core/ext/xds/xds_client.cc +1166 -867
  806. data/src/core/ext/xds/xds_client.h +172 -160
  807. data/src/core/ext/xds/xds_client_stats.cc +31 -29
  808. data/src/core/ext/xds/xds_client_stats.h +17 -15
  809. data/src/core/ext/xds/xds_cluster.cc +543 -0
  810. data/src/core/ext/xds/xds_cluster.h +111 -0
  811. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  812. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  813. data/src/core/ext/xds/xds_common_types.cc +388 -0
  814. data/src/core/ext/xds/xds_common_types.h +95 -0
  815. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  816. data/src/core/ext/xds/xds_endpoint.h +135 -0
  817. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  818. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  819. data/src/core/ext/xds/xds_http_filters.cc +122 -0
  820. data/src/core/ext/xds/xds_http_filters.h +133 -0
  821. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  822. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  823. data/src/core/ext/xds/xds_listener.cc +1049 -0
  824. data/src/core/ext/xds/xds_listener.h +220 -0
  825. data/src/core/ext/xds/xds_resource_type.cc +33 -0
  826. data/src/core/ext/xds/xds_resource_type.h +98 -0
  827. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  828. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  829. data/src/core/ext/xds/xds_route_config.h +218 -0
  830. data/src/core/ext/xds/xds_routing.cc +250 -0
  831. data/src/core/ext/xds/xds_routing.h +101 -0
  832. data/src/core/ext/xds/xds_server_config_fetcher.cc +1250 -66
  833. data/src/core/lib/address_utils/parse_address.cc +340 -0
  834. data/src/core/lib/address_utils/parse_address.h +82 -0
  835. data/src/core/lib/address_utils/sockaddr_utils.cc +442 -0
  836. data/src/core/lib/address_utils/sockaddr_utils.h +98 -0
  837. data/src/core/lib/avl/avl.h +454 -88
  838. data/src/core/lib/backoff/backoff.cc +9 -38
  839. data/src/core/lib/backoff/backoff.h +11 -11
  840. data/src/core/lib/channel/call_finalization.h +90 -0
  841. data/src/core/lib/channel/call_tracer.h +94 -0
  842. data/src/core/lib/channel/channel_args.cc +212 -36
  843. data/src/core/lib/channel/channel_args.h +246 -3
  844. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  845. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  846. data/src/core/lib/channel/channel_stack.cc +77 -17
  847. data/src/core/lib/channel/channel_stack.h +105 -18
  848. data/src/core/lib/channel/channel_stack_builder.cc +19 -288
  849. data/src/core/lib/channel/channel_stack_builder.h +107 -158
  850. data/src/core/lib/channel/channel_stack_builder_impl.cc +97 -0
  851. data/src/core/lib/channel/channel_stack_builder_impl.h +45 -0
  852. data/src/core/lib/channel/channel_trace.cc +13 -20
  853. data/src/core/lib/channel/channel_trace.h +8 -4
  854. data/src/core/lib/channel/channelz.cc +156 -60
  855. data/src/core/lib/channel/channelz.h +73 -32
  856. data/src/core/lib/channel/channelz_registry.cc +27 -19
  857. data/src/core/lib/channel/channelz_registry.h +11 -10
  858. data/src/core/lib/channel/connected_channel.cc +30 -36
  859. data/src/core/lib/channel/connected_channel.h +3 -2
  860. data/src/core/lib/channel/context.h +14 -0
  861. data/src/core/lib/channel/promise_based_filter.cc +1257 -0
  862. data/src/core/lib/channel/promise_based_filter.h +570 -0
  863. data/src/core/lib/channel/status_util.cc +14 -2
  864. data/src/core/lib/channel/status_util.h +9 -3
  865. data/src/core/lib/compression/compression.cc +22 -114
  866. data/src/core/lib/compression/compression_internal.cc +173 -206
  867. data/src/core/lib/compression/compression_internal.h +64 -69
  868. data/src/core/lib/compression/message_compress.cc +13 -13
  869. data/src/core/lib/compression/message_compress.h +2 -2
  870. data/src/core/lib/config/core_configuration.cc +107 -0
  871. data/src/core/lib/config/core_configuration.h +197 -0
  872. data/src/core/lib/debug/stats.cc +1 -1
  873. data/src/core/lib/debug/stats.h +2 -1
  874. data/src/core/lib/debug/stats_data.cc +17 -20
  875. data/src/core/lib/debug/stats_data.h +19 -21
  876. data/src/core/lib/debug/trace.cc +1 -0
  877. data/src/core/lib/debug/trace.h +4 -3
  878. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +48 -0
  879. data/src/core/lib/event_engine/channel_args_endpoint_config.h +43 -0
  880. data/src/core/lib/event_engine/default_event_engine_factory.cc +33 -0
  881. data/src/core/lib/event_engine/event_engine.cc +62 -0
  882. data/src/core/lib/event_engine/event_engine_factory.h +41 -0
  883. data/src/core/lib/event_engine/handle_containers.h +67 -0
  884. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  885. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  886. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  887. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  888. data/src/core/lib/event_engine/slice.cc +102 -0
  889. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  890. data/src/core/lib/event_engine/trace.cc +18 -0
  891. data/src/core/lib/event_engine/trace.h +30 -0
  892. data/src/core/lib/gpr/alloc.cc +4 -3
  893. data/src/core/lib/gpr/atm.cc +1 -1
  894. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  895. data/src/core/lib/gpr/env_linux.cc +1 -2
  896. data/src/core/lib/gpr/env_posix.cc +2 -3
  897. data/src/core/lib/gpr/log.cc +13 -3
  898. data/src/core/lib/gpr/log_android.cc +3 -2
  899. data/src/core/lib/gpr/log_linux.cc +7 -4
  900. data/src/core/lib/gpr/log_posix.cc +6 -3
  901. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  902. data/src/core/lib/gpr/string.cc +2 -2
  903. data/src/core/lib/gpr/string.h +2 -2
  904. data/src/core/lib/gpr/sync.cc +2 -2
  905. data/src/core/lib/gpr/sync_abseil.cc +10 -12
  906. data/src/core/lib/gpr/sync_posix.cc +4 -3
  907. data/src/core/lib/gpr/sync_windows.cc +2 -2
  908. data/src/core/lib/gpr/time.cc +5 -3
  909. data/src/core/lib/gpr/time_windows.cc +3 -2
  910. data/src/core/lib/gpr/tls.h +124 -40
  911. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  912. data/src/core/lib/gpr/useful.h +97 -32
  913. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  914. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  915. data/src/core/lib/gprpp/bitset.h +211 -0
  916. data/src/core/lib/gprpp/chunked_vector.h +257 -0
  917. data/src/core/lib/gprpp/construct_destruct.h +40 -0
  918. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  919. data/src/core/lib/gprpp/debug_location.h +2 -0
  920. data/src/core/lib/gprpp/dual_ref_counted.h +27 -31
  921. data/src/core/lib/gprpp/examine_stack.h +0 -1
  922. data/src/core/lib/gprpp/fork.cc +17 -18
  923. data/src/core/lib/gprpp/fork.h +4 -4
  924. data/src/core/lib/gprpp/global_config.h +2 -5
  925. data/src/core/lib/gprpp/global_config_env.cc +16 -15
  926. data/src/core/lib/gprpp/global_config_env.h +5 -3
  927. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  928. data/src/core/lib/gprpp/host_port.cc +2 -0
  929. data/src/core/lib/gprpp/manual_constructor.h +11 -10
  930. data/src/core/lib/gprpp/match.h +75 -0
  931. data/src/core/lib/gprpp/memory.h +8 -6
  932. data/src/core/lib/gprpp/mpscq.cc +9 -9
  933. data/src/core/lib/gprpp/mpscq.h +6 -5
  934. data/src/core/lib/gprpp/orphanable.h +5 -8
  935. data/src/core/lib/gprpp/overload.h +59 -0
  936. data/src/core/lib/gprpp/ref_counted.h +49 -35
  937. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -5
  938. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  939. data/src/core/lib/gprpp/stat.h +0 -2
  940. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  941. data/src/core/lib/gprpp/status_helper.cc +439 -0
  942. data/src/core/lib/gprpp/status_helper.h +185 -0
  943. data/src/core/lib/gprpp/sync.h +109 -44
  944. data/src/core/lib/gprpp/table.h +444 -0
  945. data/src/core/lib/gprpp/thd.h +3 -6
  946. data/src/core/lib/gprpp/thd_posix.cc +9 -7
  947. data/src/core/lib/gprpp/thd_windows.cc +6 -11
  948. data/src/core/lib/gprpp/time.cc +206 -0
  949. data/src/core/lib/gprpp/time.h +297 -0
  950. data/src/core/lib/gprpp/time_util.cc +81 -0
  951. data/src/core/lib/gprpp/time_util.h +42 -0
  952. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  953. data/src/core/lib/http/format_request.cc +58 -25
  954. data/src/core/lib/http/format_request.h +10 -6
  955. data/src/core/lib/http/httpcli.cc +306 -209
  956. data/src/core/lib/http/httpcli.h +215 -85
  957. data/src/core/lib/http/httpcli_security_connector.cc +72 -83
  958. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  959. data/src/core/lib/http/parser.cc +98 -27
  960. data/src/core/lib/http/parser.h +20 -6
  961. data/src/core/lib/iomgr/buffer_list.cc +16 -17
  962. data/src/core/lib/iomgr/buffer_list.h +23 -25
  963. data/src/core/lib/iomgr/call_combiner.cc +55 -23
  964. data/src/core/lib/iomgr/call_combiner.h +12 -14
  965. data/src/core/lib/iomgr/cfstream_handle.cc +6 -6
  966. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  967. data/src/core/lib/iomgr/closure.h +33 -12
  968. data/src/core/lib/iomgr/combiner.cc +46 -36
  969. data/src/core/lib/iomgr/combiner.h +3 -2
  970. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  971. data/src/core/lib/iomgr/endpoint.cc +5 -9
  972. data/src/core/lib/iomgr/endpoint.h +9 -10
  973. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -58
  974. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  975. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  976. data/src/core/lib/iomgr/endpoint_pair_posix.cc +12 -9
  977. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  978. data/src/core/lib/iomgr/error.cc +270 -99
  979. data/src/core/lib/iomgr/error.h +278 -114
  980. data/src/core/lib/iomgr/error_cfstream.cc +10 -4
  981. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  982. data/src/core/lib/iomgr/error_internal.h +6 -1
  983. data/src/core/lib/iomgr/ev_apple.cc +19 -15
  984. data/src/core/lib/iomgr/ev_apple.h +1 -1
  985. data/src/core/lib/iomgr/ev_epoll1_linux.cc +45 -51
  986. data/src/core/lib/iomgr/ev_poll_posix.cc +73 -73
  987. data/src/core/lib/iomgr/ev_posix.cc +22 -26
  988. data/src/core/lib/iomgr/ev_posix.h +9 -9
  989. data/src/core/lib/iomgr/exec_ctx.cc +29 -98
  990. data/src/core/lib/iomgr/exec_ctx.h +32 -58
  991. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  992. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  993. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  994. data/src/core/lib/iomgr/executor/threadpool.h +4 -3
  995. data/src/core/lib/iomgr/executor.cc +37 -46
  996. data/src/core/lib/iomgr/executor.h +3 -3
  997. data/src/core/lib/iomgr/fork_posix.cc +2 -1
  998. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  999. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  1000. data/src/core/lib/iomgr/internal_errqueue.cc +41 -49
  1001. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1002. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  1003. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1004. data/src/core/lib/iomgr/iomgr.cc +5 -4
  1005. data/src/core/lib/iomgr/iomgr.h +3 -3
  1006. data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
  1007. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  1008. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  1009. data/src/core/lib/iomgr/iomgr_posix.cc +5 -4
  1010. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -15
  1011. data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
  1012. data/src/core/lib/iomgr/load_file.cc +6 -6
  1013. data/src/core/lib/iomgr/load_file.h +2 -2
  1014. data/src/core/lib/iomgr/lockfree_event.cc +23 -5
  1015. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  1016. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  1017. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1018. data/src/core/lib/iomgr/pollset.cc +5 -5
  1019. data/src/core/lib/iomgr/pollset.h +9 -9
  1020. data/src/core/lib/iomgr/pollset_set.h +1 -2
  1021. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  1022. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1023. data/src/core/lib/iomgr/port.h +28 -17
  1024. data/src/core/lib/iomgr/python_util.h +3 -2
  1025. data/src/core/lib/iomgr/resolve_address.cc +17 -23
  1026. data/src/core/lib/iomgr/resolve_address.h +58 -46
  1027. data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
  1028. data/src/core/lib/iomgr/resolve_address_posix.cc +84 -78
  1029. data/src/core/lib/iomgr/resolve_address_posix.h +50 -0
  1030. data/src/core/lib/iomgr/resolve_address_windows.cc +95 -85
  1031. data/src/core/lib/iomgr/resolve_address_windows.h +50 -0
  1032. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1033. data/src/core/lib/iomgr/sockaddr.h +3 -3
  1034. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1035. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1036. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1037. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  1038. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1039. data/src/core/lib/iomgr/socket_mutator.cc +17 -4
  1040. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  1041. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -44
  1042. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1043. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1044. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  1045. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1046. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1047. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1048. data/src/core/lib/iomgr/tcp_client_cfstream.cc +22 -30
  1049. data/src/core/lib/iomgr/tcp_client_posix.cc +50 -50
  1050. data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
  1051. data/src/core/lib/iomgr/tcp_client_windows.cc +26 -19
  1052. data/src/core/lib/iomgr/tcp_posix.cc +211 -204
  1053. data/src/core/lib/iomgr/tcp_posix.h +17 -12
  1054. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  1055. data/src/core/lib/iomgr/tcp_server.h +16 -14
  1056. data/src/core/lib/iomgr/tcp_server_posix.cc +91 -58
  1057. data/src/core/lib/iomgr/tcp_server_utils_posix.h +34 -29
  1058. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +53 -47
  1059. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +18 -15
  1060. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1061. data/src/core/lib/iomgr/tcp_server_windows.cc +37 -32
  1062. data/src/core/lib/iomgr/tcp_windows.cc +42 -56
  1063. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  1064. data/src/core/lib/iomgr/timer.cc +3 -2
  1065. data/src/core/lib/iomgr/timer.h +17 -8
  1066. data/src/core/lib/iomgr/timer_generic.cc +118 -129
  1067. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1068. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1069. data/src/core/lib/iomgr/timer_manager.cc +17 -16
  1070. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1071. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1072. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -18
  1073. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  1074. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  1075. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
  1076. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  1077. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  1078. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1079. data/src/core/lib/iomgr/work_serializer.h +33 -5
  1080. data/src/core/lib/json/json.h +2 -3
  1081. data/src/core/lib/json/json_reader.cc +106 -59
  1082. data/src/core/lib/json/json_util.cc +78 -3
  1083. data/src/core/lib/json/json_util.h +77 -118
  1084. data/src/core/lib/json/json_writer.cc +6 -4
  1085. data/src/core/lib/matchers/matchers.cc +327 -0
  1086. data/src/core/lib/matchers/matchers.h +160 -0
  1087. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1088. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1089. data/src/core/lib/promise/activity.cc +121 -0
  1090. data/src/core/lib/promise/activity.h +540 -0
  1091. data/src/core/lib/promise/arena_promise.h +198 -0
  1092. data/src/core/lib/promise/call_push_pull.h +148 -0
  1093. data/src/core/lib/promise/context.h +86 -0
  1094. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1095. data/src/core/lib/promise/detail/promise_factory.h +188 -0
  1096. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1097. data/src/core/lib/promise/detail/status.h +50 -0
  1098. data/src/core/lib/promise/detail/switch.h +1455 -0
  1099. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1100. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1101. data/src/core/lib/promise/latch.h +103 -0
  1102. data/src/core/lib/promise/loop.h +135 -0
  1103. data/src/core/lib/promise/map.h +88 -0
  1104. data/src/core/lib/promise/poll.h +66 -0
  1105. data/src/core/lib/promise/promise.h +95 -0
  1106. data/src/core/lib/promise/race.h +83 -0
  1107. data/src/core/lib/promise/seq.h +87 -0
  1108. data/src/core/lib/promise/sleep.cc +76 -0
  1109. data/src/core/lib/promise/sleep.h +76 -0
  1110. data/src/core/lib/promise/try_seq.h +157 -0
  1111. data/src/core/lib/resolver/resolver.cc +79 -0
  1112. data/src/core/lib/resolver/resolver.h +135 -0
  1113. data/src/core/lib/resolver/resolver_factory.h +75 -0
  1114. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1115. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1116. data/src/core/lib/resolver/server_address.cc +176 -0
  1117. data/src/core/lib/resolver/server_address.h +144 -0
  1118. data/src/core/lib/resource_quota/api.cc +96 -0
  1119. data/src/core/lib/resource_quota/api.h +43 -0
  1120. data/src/core/lib/resource_quota/arena.cc +101 -0
  1121. data/src/core/lib/resource_quota/arena.h +141 -0
  1122. data/src/core/lib/resource_quota/memory_quota.cc +520 -0
  1123. data/src/core/lib/resource_quota/memory_quota.h +476 -0
  1124. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1125. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1126. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1127. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1128. data/src/core/lib/resource_quota/trace.cc +19 -0
  1129. data/src/core/lib/resource_quota/trace.h +24 -0
  1130. data/src/core/lib/security/authorization/authorization_engine.h +13 -53
  1131. data/src/core/lib/security/authorization/authorization_policy_provider.h +40 -0
  1132. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1133. data/src/core/lib/security/authorization/evaluate_args.cc +143 -79
  1134. data/src/core/lib/security/authorization/evaluate_args.h +50 -17
  1135. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1136. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1137. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
  1138. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1139. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1140. data/src/core/lib/security/authorization/matchers.h +211 -0
  1141. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1142. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1143. data/src/core/lib/security/context/security_context.cc +15 -10
  1144. data/src/core/lib/security/context/security_context.h +9 -2
  1145. data/src/core/lib/security/credentials/alts/alts_credentials.cc +14 -6
  1146. data/src/core/lib/security/credentials/alts/alts_credentials.h +11 -1
  1147. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1148. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1149. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1150. data/src/core/lib/security/credentials/call_creds_util.cc +89 -0
  1151. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1152. data/src/core/lib/security/credentials/channel_creds_registry.h +98 -0
  1153. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1154. data/src/core/lib/security/credentials/composite/composite_credentials.cc +31 -85
  1155. data/src/core/lib/security/credentials/composite/composite_credentials.h +25 -11
  1156. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1157. data/src/core/lib/security/credentials/credentials.h +90 -83
  1158. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +160 -73
  1159. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +23 -13
  1160. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -4
  1161. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  1162. data/src/core/lib/security/credentials/external/external_account_credentials.cc +132 -82
  1163. data/src/core/lib/security/credentials/external/external_account_credentials.h +15 -17
  1164. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +6 -6
  1165. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  1166. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +46 -27
  1167. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -7
  1168. data/src/core/lib/security/credentials/fake/fake_credentials.cc +33 -27
  1169. data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
  1170. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1171. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +117 -47
  1172. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -4
  1173. data/src/core/lib/security/credentials/iam/iam_credentials.cc +25 -28
  1174. data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
  1175. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +31 -26
  1176. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1177. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -12
  1178. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1179. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +58 -52
  1180. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +27 -15
  1181. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +66 -62
  1182. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1183. data/src/core/lib/security/credentials/local/local_credentials.cc +14 -7
  1184. data/src/core/lib/security/credentials/local/local_credentials.h +11 -1
  1185. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +178 -193
  1186. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +62 -34
  1187. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +100 -155
  1188. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
  1189. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -19
  1190. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -5
  1191. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +11 -9
  1192. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +19 -15
  1193. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +90 -25
  1194. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +67 -12
  1195. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +234 -0
  1196. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +169 -0
  1197. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +35 -85
  1198. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +75 -151
  1199. data/src/core/lib/security/credentials/tls/tls_credentials.cc +42 -17
  1200. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -1
  1201. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  1202. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  1203. data/src/core/lib/security/credentials/xds/xds_credentials.cc +134 -63
  1204. data/src/core/lib/security/credentials/xds/xds_credentials.h +40 -9
  1205. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -18
  1206. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1207. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +25 -26
  1208. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -3
  1209. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +10 -20
  1210. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -16
  1211. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1212. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
  1213. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -26
  1214. data/src/core/lib/security/security_connector/security_connector.cc +9 -16
  1215. data/src/core/lib/security/security_connector/security_connector.h +34 -25
  1216. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +29 -25
  1217. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1218. data/src/core/lib/security/security_connector/ssl_utils.cc +76 -43
  1219. data/src/core/lib/security/security_connector/ssl_utils.h +17 -21
  1220. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +440 -283
  1221. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +118 -79
  1222. data/src/core/lib/security/transport/auth_filters.h +39 -5
  1223. data/src/core/lib/security/transport/client_auth_filter.cc +96 -355
  1224. data/src/core/lib/security/transport/secure_endpoint.cc +221 -151
  1225. data/src/core/lib/security/transport/secure_endpoint.h +2 -1
  1226. data/src/core/lib/security/transport/security_handshaker.cc +174 -96
  1227. data/src/core/lib/security/transport/security_handshaker.h +3 -2
  1228. data/src/core/lib/security/transport/server_auth_filter.cc +61 -50
  1229. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1230. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1231. data/src/core/lib/security/util/json_util.cc +8 -10
  1232. data/src/core/lib/security/util/json_util.h +1 -1
  1233. data/src/core/lib/service_config/service_config.h +78 -0
  1234. data/src/core/lib/service_config/service_config_call_data.h +75 -0
  1235. data/src/core/lib/service_config/service_config_impl.cc +237 -0
  1236. data/src/core/lib/service_config/service_config_impl.h +132 -0
  1237. data/src/core/lib/service_config/service_config_parser.cc +101 -0
  1238. data/src/core/lib/service_config/service_config_parser.h +113 -0
  1239. data/src/core/lib/slice/b64.cc +1 -1
  1240. data/src/core/lib/slice/b64.h +2 -0
  1241. data/src/core/lib/slice/percent_encoding.cc +87 -97
  1242. data/src/core/lib/slice/percent_encoding.h +22 -33
  1243. data/src/core/lib/slice/slice.cc +83 -192
  1244. data/src/core/lib/slice/slice.h +389 -0
  1245. data/src/core/lib/slice/slice_api.cc +39 -0
  1246. data/src/core/lib/slice/slice_buffer.cc +59 -29
  1247. data/src/core/lib/slice/slice_buffer.h +106 -0
  1248. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  1249. data/src/core/lib/slice/slice_internal.h +18 -278
  1250. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1251. data/src/core/lib/slice/slice_refcount.h +45 -0
  1252. data/src/core/lib/slice/slice_refcount_base.h +60 -0
  1253. data/src/core/lib/slice/slice_split.cc +103 -0
  1254. data/src/core/lib/slice/slice_split.h +36 -0
  1255. data/src/core/lib/slice/slice_string_helpers.cc +2 -81
  1256. data/src/core/lib/slice/slice_string_helpers.h +1 -15
  1257. data/src/core/lib/surface/api_trace.cc +2 -1
  1258. data/src/core/lib/surface/api_trace.h +1 -0
  1259. data/src/core/lib/surface/builtins.cc +54 -0
  1260. data/src/core/lib/surface/builtins.h +26 -0
  1261. data/src/core/lib/surface/byte_buffer.cc +7 -1
  1262. data/src/core/lib/surface/byte_buffer_reader.cc +5 -5
  1263. data/src/core/lib/surface/call.cc +1186 -1256
  1264. data/src/core/lib/surface/call.h +29 -24
  1265. data/src/core/lib/surface/call_details.cc +4 -4
  1266. data/src/core/lib/surface/call_log_batch.cc +9 -3
  1267. data/src/core/lib/surface/call_test_only.h +4 -1
  1268. data/src/core/lib/surface/channel.cc +221 -315
  1269. data/src/core/lib/surface/channel.h +102 -72
  1270. data/src/core/lib/surface/channel_init.cc +22 -76
  1271. data/src/core/lib/surface/channel_init.h +45 -39
  1272. data/src/core/lib/surface/channel_ping.cc +10 -5
  1273. data/src/core/lib/surface/channel_stack_type.cc +0 -1
  1274. data/src/core/lib/surface/channel_stack_type.h +0 -2
  1275. data/src/core/lib/surface/completion_queue.cc +150 -151
  1276. data/src/core/lib/surface/completion_queue.h +8 -3
  1277. data/src/core/lib/surface/completion_queue_factory.cc +4 -3
  1278. data/src/core/lib/surface/completion_queue_factory.h +1 -2
  1279. data/src/core/lib/surface/event_string.cc +1 -6
  1280. data/src/core/lib/surface/event_string.h +1 -1
  1281. data/src/core/lib/surface/init.cc +82 -90
  1282. data/src/core/lib/surface/init.h +2 -4
  1283. data/src/core/lib/surface/lame_client.cc +80 -92
  1284. data/src/core/lib/surface/lame_client.h +42 -3
  1285. data/src/core/lib/surface/metadata_array.cc +4 -2
  1286. data/src/core/lib/surface/server.cc +201 -220
  1287. data/src/core/lib/surface/server.h +160 -64
  1288. data/src/core/lib/surface/validate_metadata.cc +57 -29
  1289. data/src/core/lib/surface/validate_metadata.h +6 -2
  1290. data/src/core/lib/surface/version.cc +2 -2
  1291. data/src/core/lib/transport/bdp_estimator.cc +14 -13
  1292. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1293. data/src/core/lib/transport/byte_stream.cc +15 -8
  1294. data/src/core/lib/transport/byte_stream.h +14 -9
  1295. data/src/core/lib/transport/connectivity_state.cc +15 -10
  1296. data/src/core/lib/transport/connectivity_state.h +4 -5
  1297. data/src/core/lib/transport/error_utils.cc +71 -30
  1298. data/src/core/lib/transport/error_utils.h +18 -7
  1299. data/src/core/lib/transport/handshaker.cc +227 -0
  1300. data/src/core/lib/transport/handshaker.h +168 -0
  1301. data/src/core/lib/transport/handshaker_factory.h +49 -0
  1302. data/src/core/lib/transport/handshaker_registry.cc +54 -0
  1303. data/src/core/lib/transport/handshaker_registry.h +72 -0
  1304. data/src/core/lib/transport/http_connect_handshaker.cc +401 -0
  1305. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1306. data/src/core/lib/transport/metadata_batch.cc +213 -318
  1307. data/src/core/lib/transport/metadata_batch.h +1230 -158
  1308. data/src/core/lib/transport/parsed_metadata.cc +39 -0
  1309. data/src/core/lib/transport/parsed_metadata.h +408 -0
  1310. data/src/core/lib/transport/pid_controller.cc +4 -4
  1311. data/src/core/lib/transport/status_conversion.cc +4 -2
  1312. data/src/core/lib/transport/status_conversion.h +3 -3
  1313. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  1314. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1315. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1316. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1317. data/src/core/lib/transport/transport.cc +33 -52
  1318. data/src/core/lib/transport/transport.h +137 -10
  1319. data/src/core/lib/transport/transport_impl.h +24 -0
  1320. data/src/core/lib/transport/transport_op_string.cc +21 -44
  1321. data/src/core/lib/uri/uri_parser.cc +248 -66
  1322. data/src/core/lib/uri/uri_parser.h +39 -25
  1323. data/src/core/plugin_registry/grpc_plugin_registry.cc +84 -90
  1324. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1325. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1326. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1327. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1328. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1329. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +54 -55
  1330. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1331. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +56 -42
  1333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  1334. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1335. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1336. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1337. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -5
  1338. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1339. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1340. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1341. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1342. data/src/core/tsi/fake_transport_security.cc +26 -9
  1343. data/src/core/tsi/local_transport_security.cc +42 -87
  1344. data/src/core/tsi/local_transport_security.h +1 -4
  1345. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1346. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1347. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -6
  1348. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  1349. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  1350. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +8 -11
  1351. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -2
  1352. data/src/core/tsi/ssl_transport_security.cc +261 -79
  1353. data/src/core/tsi/ssl_transport_security.h +53 -16
  1354. data/src/core/tsi/transport_security.cc +15 -3
  1355. data/src/core/tsi/transport_security.h +16 -1
  1356. data/src/core/tsi/transport_security_grpc.h +1 -0
  1357. data/src/core/tsi/transport_security_interface.h +28 -0
  1358. data/src/ruby/bin/math_services_pb.rb +1 -1
  1359. data/src/ruby/ext/grpc/extconf.rb +31 -11
  1360. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1361. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1362. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1363. data/src/ruby/ext/grpc/rb_channel.c +24 -10
  1364. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1365. data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
  1366. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1367. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1368. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1369. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1370. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1371. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1372. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1373. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -34
  1374. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -53
  1375. data/src/ruby/ext/grpc/rb_server.c +26 -10
  1376. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1377. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1378. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1379. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1380. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1381. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1382. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1383. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  1384. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1385. data/src/ruby/lib/grpc/version.rb +1 -1
  1386. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1387. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1388. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  1389. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  1391. data/src/ruby/pb/test/client.rb +769 -0
  1392. data/src/ruby/pb/test/server.rb +252 -0
  1393. data/src/ruby/pb/test/xds_client.rb +415 -0
  1394. data/src/ruby/spec/call_spec.rb +1 -1
  1395. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  1396. data/src/ruby/spec/channel_spec.rb +17 -6
  1397. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1398. data/src/ruby/spec/client_server_spec.rb +1 -1
  1399. data/src/ruby/spec/errors_spec.rb +1 -1
  1400. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  1401. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1402. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1403. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1404. data/src/ruby/spec/server_spec.rb +22 -0
  1405. data/third_party/abseil-cpp/absl/algorithm/container.h +104 -94
  1406. data/third_party/abseil-cpp/absl/base/attributes.h +88 -35
  1407. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  1408. data/third_party/abseil-cpp/absl/base/config.h +102 -44
  1409. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +25 -36
  1410. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  1411. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1412. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1413. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  1414. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  1415. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  1416. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  1417. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -6
  1418. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1419. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  1420. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1421. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1422. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1423. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +70 -1
  1424. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1425. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1426. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1427. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1428. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
  1429. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1430. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1431. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  1432. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  1433. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1434. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1435. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  1436. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1437. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1438. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -7
  1439. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +1 -1
  1440. data/third_party/abseil-cpp/absl/container/inlined_vector.h +110 -100
  1441. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  1442. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1443. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -103
  1444. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +39 -79
  1445. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1446. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
  1447. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  1448. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1449. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +21 -2
  1450. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +374 -243
  1451. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +27 -13
  1452. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1453. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1454. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  1455. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +15 -17
  1456. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1457. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  1458. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1459. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1460. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +11 -7
  1461. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1462. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1463. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1464. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  1465. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +16 -2
  1466. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1467. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1468. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1469. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1470. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1471. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
  1472. data/third_party/abseil-cpp/absl/hash/internal/hash.h +145 -45
  1473. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1474. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1475. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1476. data/third_party/abseil-cpp/absl/meta/type_traits.h +47 -3
  1477. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1478. data/third_party/abseil-cpp/absl/numeric/int128.cc +6 -13
  1479. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1480. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1481. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1482. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1483. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1484. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1485. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1486. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1487. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1488. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1489. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1490. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1491. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1492. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1493. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1494. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1495. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1496. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1497. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1498. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1499. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1500. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1501. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1502. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1503. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1504. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1505. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1506. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1507. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1508. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1509. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1510. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1511. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1522. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1523. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1524. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1525. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1526. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1527. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1528. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1529. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1530. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1531. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1532. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1533. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  1534. data/third_party/abseil-cpp/absl/status/status.cc +27 -28
  1535. data/third_party/abseil-cpp/absl/status/status.h +98 -33
  1536. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1537. data/third_party/abseil-cpp/absl/status/statusor.h +34 -24
  1538. data/third_party/abseil-cpp/absl/strings/charconv.cc +8 -8
  1539. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1540. data/third_party/abseil-cpp/absl/strings/cord.cc +619 -570
  1541. data/third_party/abseil-cpp/absl/strings/cord.h +346 -101
  1542. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  1543. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +7 -7
  1544. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1545. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +478 -31
  1546. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1547. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1548. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1549. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1550. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1551. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1552. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1553. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1554. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1555. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1556. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1558. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1559. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1560. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1561. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1562. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1564. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1566. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1567. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1568. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +22 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +18 -5
  1571. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +20 -5
  1572. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1574. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1575. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  1576. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +76 -73
  1578. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +38 -16
  1579. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1580. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1581. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1582. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1583. data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
  1584. data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
  1585. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1586. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1587. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1588. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  1589. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1590. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1591. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1592. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1593. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1594. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1595. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1596. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  1597. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  1598. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  1599. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  1600. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -66
  1601. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  1602. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  1603. data/third_party/abseil-cpp/absl/synchronization/mutex.h +82 -65
  1604. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1605. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1606. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1607. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  1608. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  1609. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1610. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1611. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1612. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1613. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  1614. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1615. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -5
  1616. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1617. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1618. data/third_party/abseil-cpp/absl/time/time.h +93 -60
  1619. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1620. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1621. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  1622. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1623. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1624. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1625. data/third_party/boringssl-with-bazel/err_data.c +760 -724
  1626. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +70 -57
  1627. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1628. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1629. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  1630. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1631. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  1632. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1633. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +67 -54
  1634. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1635. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1636. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +650 -0
  1637. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1638. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1639. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  1640. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1641. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1642. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +75 -63
  1643. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1644. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1645. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1646. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1647. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +224 -0
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +79 -354
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +327 -281
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -8
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1655. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1656. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1657. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1658. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1659. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1660. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1661. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1662. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1664. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1665. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +11 -10
  1666. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1668. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1669. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1670. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1671. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1672. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1673. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  1674. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1675. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1676. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1677. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1678. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1681. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +272 -0
  1682. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1683. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1684. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1685. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1686. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  1687. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1688. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1689. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1690. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1691. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1692. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1693. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +15 -4
  1694. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1695. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1696. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +44 -16
  1697. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
  1698. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1699. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1700. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1701. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +456 -0
  1702. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1703. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1704. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1705. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1706. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1707. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  1708. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  1709. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1710. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1711. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1712. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1713. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1714. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1715. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1716. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1717. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1718. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1719. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +30 -9
  1720. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
  1721. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
  1722. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
  1723. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +65 -41
  1724. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1725. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +168 -16
  1726. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1727. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1728. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1729. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +400 -325
  1730. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1731. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1732. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1733. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1734. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1735. data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
  1736. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1737. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1738. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1739. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1740. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1741. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1742. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1743. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1744. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1745. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1746. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1747. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
  1748. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1749. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1750. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1751. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1752. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1753. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1754. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1755. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1756. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1757. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1758. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1759. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1760. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1761. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1762. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1763. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1764. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1765. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1766. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1767. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  1768. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1769. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1770. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1773. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
  1776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +12 -9
  1777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  1780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
  1781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  1782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +26 -23
  1783. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
  1784. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1785. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +61 -23
  1786. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1787. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1788. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1789. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
  1790. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1791. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +15 -13
  1792. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1793. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1794. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1795. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  1796. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1797. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  1798. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1799. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +50 -14
  1800. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1801. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
  1802. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1803. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1804. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1805. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1806. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1807. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1808. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1809. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +29 -18
  1810. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1811. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +26 -25
  1812. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -13
  1813. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1814. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1815. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  1816. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1817. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +48 -40
  1818. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1819. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1820. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1821. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
  1822. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
  1823. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1824. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  1825. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +69 -4
  1826. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1794 -665
  1827. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -179
  1828. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +63 -14
  1829. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1830. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1831. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1832. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1833. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1834. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1835. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +36 -7
  1836. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1837. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1838. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  1839. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +60 -38
  1840. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -2
  1841. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1842. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1843. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1844. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  1845. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1846. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +67 -106
  1847. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +99 -0
  1848. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1849. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1850. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1851. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1852. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1853. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1854. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1855. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  1856. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  1857. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1858. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1859. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  1860. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1861. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +435 -119
  1862. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +48 -36
  1863. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1397 -380
  1864. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1865. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +192 -52
  1866. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1867. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1868. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1869. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +4325 -0
  1870. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  1871. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +92 -44
  1872. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +314 -217
  1873. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +177 -35
  1874. data/third_party/boringssl-with-bazel/src/ssl/internal.h +493 -154
  1875. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1876. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
  1877. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1878. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  1879. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  1880. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1881. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1882. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +64 -112
  1883. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1884. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +136 -104
  1885. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1886. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1887. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
  1888. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1889. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  1890. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
  1891. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
  1892. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
  1893. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +269 -118
  1894. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1895. data/third_party/cares/cares/include/ares.h +742 -0
  1896. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1897. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1898. data/third_party/cares/cares/include/ares_version.h +24 -0
  1899. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1900. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1901. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1902. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1903. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1904. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1905. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1906. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1907. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1908. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1909. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1910. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1911. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1912. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1913. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1914. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1915. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1916. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1917. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1918. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1919. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1920. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1921. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1922. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1923. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1924. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1925. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1926. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1927. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1928. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1929. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1930. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1931. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1932. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1933. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1934. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1935. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1936. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1937. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1938. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1939. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1940. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1941. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1942. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1943. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1944. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1945. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1946. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1947. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1948. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1949. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1950. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1951. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1952. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1953. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1954. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1955. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1956. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1957. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1958. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1959. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1960. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1961. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1962. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1963. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1964. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1965. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1966. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1967. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1968. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1969. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1970. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1971. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1972. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1973. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1974. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1975. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1976. data/third_party/re2/re2/compile.cc +91 -109
  1977. data/third_party/re2/re2/dfa.cc +27 -39
  1978. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1979. data/third_party/re2/re2/filtered_re2.h +10 -5
  1980. data/third_party/re2/re2/nfa.cc +1 -1
  1981. data/third_party/re2/re2/parse.cc +42 -23
  1982. data/third_party/re2/re2/perl_groups.cc +34 -34
  1983. data/third_party/re2/re2/prefilter.cc +3 -2
  1984. data/third_party/re2/re2/prog.cc +182 -4
  1985. data/third_party/re2/re2/prog.h +28 -9
  1986. data/third_party/re2/re2/re2.cc +87 -118
  1987. data/third_party/re2/re2/re2.h +156 -141
  1988. data/third_party/re2/re2/regexp.cc +12 -5
  1989. data/third_party/re2/re2/regexp.h +8 -2
  1990. data/third_party/re2/re2/set.cc +31 -9
  1991. data/third_party/re2/re2/set.h +9 -4
  1992. data/third_party/re2/re2/simplify.cc +11 -3
  1993. data/third_party/re2/re2/tostring.cc +1 -1
  1994. data/third_party/re2/re2/walker-inl.h +1 -1
  1995. data/third_party/re2/util/mutex.h +2 -2
  1996. data/third_party/re2/util/pcre.h +3 -3
  1997. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1998. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1999. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  2000. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  2001. data/third_party/upb/upb/decode.c +774 -351
  2002. data/third_party/upb/upb/decode.h +66 -12
  2003. data/third_party/upb/upb/decode_fast.c +596 -581
  2004. data/third_party/upb/upb/decode_fast.h +40 -13
  2005. data/third_party/upb/upb/decode_internal.h +211 -0
  2006. data/third_party/upb/upb/def.c +2151 -1068
  2007. data/third_party/upb/upb/def.h +352 -258
  2008. data/third_party/upb/upb/def.hpp +160 -161
  2009. data/third_party/upb/upb/encode.c +291 -165
  2010. data/third_party/upb/upb/encode.h +38 -13
  2011. data/third_party/upb/upb/json_encode.c +267 -204
  2012. data/third_party/upb/upb/json_encode.h +33 -7
  2013. data/third_party/upb/upb/msg.c +274 -102
  2014. data/third_party/upb/upb/msg.h +83 -582
  2015. data/third_party/upb/upb/msg_internal.h +831 -0
  2016. data/third_party/upb/upb/port_def.inc +93 -24
  2017. data/third_party/upb/upb/port_undef.inc +39 -1
  2018. data/third_party/upb/upb/reflection.c +312 -240
  2019. data/third_party/upb/upb/reflection.h +119 -67
  2020. data/third_party/upb/upb/reflection.hpp +37 -0
  2021. data/third_party/upb/upb/table.c +406 -197
  2022. data/third_party/upb/upb/table_internal.h +385 -0
  2023. data/third_party/upb/upb/text_encode.c +141 -90
  2024. data/third_party/upb/upb/text_encode.h +31 -5
  2025. data/third_party/upb/upb/upb.c +164 -66
  2026. data/third_party/upb/upb/upb.h +182 -146
  2027. data/third_party/upb/upb/upb.hpp +50 -23
  2028. data/third_party/upb/upb/upb_internal.h +68 -0
  2029. data/third_party/xxhash/xxhash.h +5580 -0
  2030. data/third_party/zlib/crc32.c +966 -292
  2031. data/third_party/zlib/crc32.h +9441 -436
  2032. data/third_party/zlib/deflate.c +78 -30
  2033. data/third_party/zlib/deflate.h +12 -15
  2034. data/third_party/zlib/gzguts.h +3 -2
  2035. data/third_party/zlib/gzlib.c +5 -3
  2036. data/third_party/zlib/gzread.c +5 -7
  2037. data/third_party/zlib/gzwrite.c +25 -13
  2038. data/third_party/zlib/infback.c +2 -1
  2039. data/third_party/zlib/inffast.c +14 -14
  2040. data/third_party/zlib/inflate.c +39 -8
  2041. data/third_party/zlib/inflate.h +3 -2
  2042. data/third_party/zlib/inftrees.c +3 -3
  2043. data/third_party/zlib/trees.c +27 -48
  2044. data/third_party/zlib/zlib.h +123 -100
  2045. data/third_party/zlib/zutil.c +2 -2
  2046. data/third_party/zlib/zutil.h +12 -9
  2047. metadata +734 -307
  2048. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -388
  2049. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -34
  2050. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -45
  2051. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -85
  2052. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  2053. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  2054. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  2055. data/src/core/ext/filters/client_channel/resolver.h +0 -147
  2056. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -73
  2057. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  2058. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  2059. data/src/core/ext/filters/client_channel/server_address.cc +0 -161
  2060. data/src/core/ext/filters/client_channel/server_address.h +0 -113
  2061. data/src/core/ext/filters/client_channel/service_config.cc +0 -226
  2062. data/src/core/ext/filters/client_channel/service_config.h +0 -126
  2063. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -86
  2064. data/src/core/ext/filters/client_channel/service_config_parser.cc +0 -89
  2065. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -92
  2066. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -440
  2067. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -557
  2068. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  2069. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  2070. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -27
  2071. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  2072. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  2073. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  2074. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  2075. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -124
  2076. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -90
  2077. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -212
  2078. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -45
  2079. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -76
  2080. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -86
  2081. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  2082. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  2083. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  2084. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  2085. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  2086. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  2087. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  2088. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -30
  2089. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  2090. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -30
  2091. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  2092. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -29
  2093. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  2094. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  2095. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  2096. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +0 -28
  2097. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  2098. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  2099. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  2100. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  2101. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  2102. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  2103. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  2104. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  2105. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  2106. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  2107. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  2108. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  2109. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  2110. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  2111. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  2112. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -83
  2113. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  2114. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -82
  2115. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  2116. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -86
  2117. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  2118. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  2119. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  2120. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  2121. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  2122. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  2123. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  2124. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  2125. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  2126. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  2127. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  2128. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  2129. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  2130. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  2131. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  2132. data/src/core/lib/avl/avl.cc +0 -306
  2133. data/src/core/lib/channel/handshaker.cc +0 -262
  2134. data/src/core/lib/channel/handshaker.h +0 -179
  2135. data/src/core/lib/channel/handshaker_factory.h +0 -42
  2136. data/src/core/lib/channel/handshaker_registry.cc +0 -105
  2137. data/src/core/lib/channel/handshaker_registry.h +0 -54
  2138. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  2139. data/src/core/lib/compression/compression_args.cc +0 -135
  2140. data/src/core/lib/compression/compression_args.h +0 -56
  2141. data/src/core/lib/compression/stream_compression.cc +0 -80
  2142. data/src/core/lib/compression/stream_compression.h +0 -116
  2143. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  2144. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  2145. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  2146. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  2147. data/src/core/lib/gpr/arena.h +0 -47
  2148. data/src/core/lib/gpr/tls_gcc.h +0 -52
  2149. data/src/core/lib/gpr/tls_msvc.h +0 -54
  2150. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  2151. data/src/core/lib/gpr/tls_pthread.h +0 -56
  2152. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  2153. data/src/core/lib/gprpp/arena.cc +0 -103
  2154. data/src/core/lib/gprpp/arena.h +0 -121
  2155. data/src/core/lib/gprpp/atomic.h +0 -104
  2156. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  2157. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1658
  2158. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  2159. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  2160. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  2161. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  2162. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  2163. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  2164. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  2165. data/src/core/lib/iomgr/parse_address.cc +0 -322
  2166. data/src/core/lib/iomgr/parse_address.h +0 -77
  2167. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  2168. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  2169. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  2170. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  2171. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  2172. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  2173. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  2174. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  2175. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
  2176. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2177. data/src/core/lib/iomgr/resource_quota.cc +0 -1016
  2178. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2179. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2180. data/src/core/lib/iomgr/sockaddr_utils.cc +0 -296
  2181. data/src/core/lib/iomgr/sockaddr_utils.h +0 -80
  2182. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  2183. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  2184. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -161
  2185. data/src/core/lib/iomgr/tcp_custom.cc +0 -391
  2186. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2187. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -483
  2188. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2189. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2190. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2191. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2192. data/src/core/lib/iomgr/udp_server.cc +0 -747
  2193. data/src/core/lib/iomgr/udp_server.h +0 -103
  2194. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  2195. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  2196. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  2197. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  2198. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  2199. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  2200. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  2201. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2202. data/src/core/lib/slice/slice_intern.cc +0 -374
  2203. data/src/core/lib/slice/slice_utils.h +0 -200
  2204. data/src/core/lib/surface/init_secure.cc +0 -81
  2205. data/src/core/lib/transport/authority_override.cc +0 -40
  2206. data/src/core/lib/transport/authority_override.h +0 -37
  2207. data/src/core/lib/transport/metadata.cc +0 -689
  2208. data/src/core/lib/transport/metadata.h +0 -446
  2209. data/src/core/lib/transport/static_metadata.cc +0 -1249
  2210. data/src/core/lib/transport/static_metadata.h +0 -604
  2211. data/src/core/lib/transport/status_metadata.cc +0 -62
  2212. data/src/core/lib/transport/status_metadata.h +0 -48
  2213. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  2214. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2215. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2216. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  2217. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  2218. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2219. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +0 -533
  2220. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +0 -93
  2221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2222. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -237
  2223. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +0 -653
  2224. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2225. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +0 -116
  2226. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2227. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +0 -4100
  2228. data/third_party/cares/cares/ares.h +0 -670
  2229. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2230. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2231. data/third_party/cares/cares/ares_create_query.c +0 -206
  2232. data/third_party/cares/cares/ares_data.c +0 -222
  2233. data/third_party/cares/cares/ares_data.h +0 -72
  2234. data/third_party/cares/cares/ares_dns.h +0 -103
  2235. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2236. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2237. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2238. data/third_party/cares/cares/ares_getenv.c +0 -30
  2239. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2240. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2241. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2242. data/third_party/cares/cares/ares_getopt.c +0 -122
  2243. data/third_party/cares/cares/ares_getopt.h +0 -53
  2244. data/third_party/cares/cares/ares_init.c +0 -2615
  2245. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2246. data/third_party/cares/cares/ares_library_init.c +0 -195
  2247. data/third_party/cares/cares/ares_library_init.h +0 -43
  2248. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2249. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2250. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2251. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2252. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2253. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2254. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2255. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2256. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2257. data/third_party/cares/cares/ares_private.h +0 -382
  2258. data/third_party/cares/cares/ares_process.c +0 -1473
  2259. data/third_party/cares/cares/ares_query.c +0 -186
  2260. data/third_party/cares/cares/ares_search.c +0 -323
  2261. data/third_party/cares/cares/ares_send.c +0 -137
  2262. data/third_party/cares/cares/ares_setup.h +0 -217
  2263. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2264. data/third_party/cares/cares/ares_version.h +0 -24
  2265. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2266. data/third_party/cares/cares/inet_ntop.c +0 -207
  2267. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  2268. data/third_party/upb/upb/decode.int.h +0 -163
  2269. data/third_party/upb/upb/json_decode.c +0 -1443
  2270. data/third_party/upb/upb/json_decode.h +0 -23
  2271. data/third_party/upb/upb/table.int.h +0 -475
  2272. data/third_party/upb/upb/upb.int.h +0 -29
@@ -0,0 +1,2695 @@
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/retry_filter.h"
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
+
30
+ #include "absl/container/inlined_vector.h"
31
+ #include "absl/status/statusor.h"
32
+ #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/string_view.h"
34
+ #include "absl/strings/strip.h"
35
+ #include "absl/types/optional.h"
36
+
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include <grpc/slice.h>
39
+ #include <grpc/status.h>
40
+ #include <grpc/support/atm.h>
41
+ #include <grpc/support/log.h>
42
+
43
+ #include "src/core/ext/filters/client_channel/client_channel.h"
44
+ #include "src/core/ext/filters/client_channel/config_selector.h"
45
+ #include "src/core/ext/filters/client_channel/retry_service_config.h"
46
+ #include "src/core/ext/filters/client_channel/retry_throttle.h"
47
+ #include "src/core/lib/backoff/backoff.h"
48
+ #include "src/core/lib/channel/channel_args.h"
49
+ #include "src/core/lib/channel/channel_stack.h"
50
+ #include "src/core/lib/channel/channel_stack_builder.h"
51
+ #include "src/core/lib/channel/context.h"
52
+ #include "src/core/lib/channel/status_util.h"
53
+ #include "src/core/lib/debug/trace.h"
54
+ #include "src/core/lib/gpr/useful.h"
55
+ #include "src/core/lib/gprpp/debug_location.h"
56
+ #include "src/core/lib/gprpp/manual_constructor.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/time.h"
61
+ #include "src/core/lib/iomgr/call_combiner.h"
62
+ #include "src/core/lib/iomgr/closure.h"
63
+ #include "src/core/lib/iomgr/error.h"
64
+ #include "src/core/lib/iomgr/exec_ctx.h"
65
+ #include "src/core/lib/iomgr/polling_entity.h"
66
+ #include "src/core/lib/iomgr/timer.h"
67
+ #include "src/core/lib/resource_quota/arena.h"
68
+ #include "src/core/lib/service_config/service_config.h"
69
+ #include "src/core/lib/service_config/service_config_call_data.h"
70
+ #include "src/core/lib/slice/slice_refcount.h"
71
+ #include "src/core/lib/transport/byte_stream.h"
72
+ #include "src/core/lib/transport/error_utils.h"
73
+ #include "src/core/lib/transport/metadata_batch.h"
74
+ #include "src/core/lib/transport/transport.h"
75
+ #include "src/core/lib/uri/uri_parser.h"
76
+
77
+ //
78
+ // Retry filter
79
+ //
80
+
81
+ // This filter is intended to be used in the DynamicFilter stack in the
82
+ // client channel, which is situated between the name resolver and the
83
+ // LB policy. Normally, the last filter in the DynamicFilter stack is
84
+ // the DynamicTerminationFilter (see client_channel.cc), which creates a
85
+ // LoadBalancedCall and delegates to it. However, when retries are
86
+ // enabled, this filter is used instead of the DynamicTerminationFilter.
87
+ //
88
+ // In order to support retries, we act as a proxy for stream op batches.
89
+ // When we get a batch from the surface, we add it to our list of pending
90
+ // batches, and we then use those batches to construct separate "child"
91
+ // batches to be started on an LB call. When the child batches return, we
92
+ // then decide which pending batches have been completed and schedule their
93
+ // callbacks accordingly. If a call attempt fails and we want to retry it,
94
+ // we create a new LB call and start again, constructing new "child" batches
95
+ // for the new LB call.
96
+ //
97
+ // Note that retries are committed when receiving data from the server
98
+ // (except for Trailers-Only responses). However, there may be many
99
+ // send ops started before receiving any data, so we may have already
100
+ // completed some number of send ops (and returned the completions up to
101
+ // the surface) by the time we realize that we need to retry. To deal
102
+ // with this, we cache data for send ops, so that we can replay them on a
103
+ // different LB call even after we have completed the original batches.
104
+ //
105
+ // The code is structured as follows:
106
+ // - In CallData (in the parent channel), we maintain a list of pending
107
+ // ops and cached data for send ops.
108
+ // - There is a CallData::CallAttempt object for each retry attempt.
109
+ // This object contains the LB call for that attempt and state to indicate
110
+ // which ops from the CallData object have already been sent down to that
111
+ // LB call.
112
+ // - There is a CallData::CallAttempt::BatchData object for each "child"
113
+ // batch sent on the LB call.
114
+ //
115
+ // When constructing the "child" batches, we compare the state in the
116
+ // CallAttempt object against the state in the CallData object to see
117
+ // which batches need to be sent on the LB call for a given attempt.
118
+
119
+ // TODO(roth): In subsequent PRs:
120
+ // - implement hedging
121
+
122
+ // By default, we buffer 256 KiB per RPC for retries.
123
+ // TODO(roth): Do we have any data to suggest a better value?
124
+ #define DEFAULT_PER_RPC_RETRY_BUFFER_SIZE (256 << 10)
125
+
126
+ // This value was picked arbitrarily. It can be changed if there is
127
+ // any even moderately compelling reason to do so.
128
+ #define RETRY_BACKOFF_JITTER 0.2
129
+
130
+ namespace grpc_core {
131
+
132
+ namespace {
133
+
134
+ using internal::RetryGlobalConfig;
135
+ using internal::RetryMethodConfig;
136
+ using internal::RetryServiceConfigParser;
137
+ using internal::ServerRetryThrottleData;
138
+
139
+ TraceFlag grpc_retry_trace(false, "retry");
140
+
141
+ //
142
+ // RetryFilter
143
+ //
144
+
145
+ class RetryFilter {
146
+ public:
147
+ class CallData;
148
+
149
+ static grpc_error_handle Init(grpc_channel_element* elem,
150
+ grpc_channel_element_args* args) {
151
+ GPR_ASSERT(args->is_last);
152
+ GPR_ASSERT(elem->filter == &kRetryFilterVtable);
153
+ grpc_error_handle error = GRPC_ERROR_NONE;
154
+ new (elem->channel_data) RetryFilter(args->channel_args, &error);
155
+ return error;
156
+ }
157
+
158
+ static void Destroy(grpc_channel_element* elem) {
159
+ auto* chand = static_cast<RetryFilter*>(elem->channel_data);
160
+ chand->~RetryFilter();
161
+ }
162
+
163
+ // Will never be called.
164
+ static void StartTransportOp(grpc_channel_element* /*elem*/,
165
+ grpc_transport_op* /*op*/) {}
166
+ static void GetChannelInfo(grpc_channel_element* /*elem*/,
167
+ const grpc_channel_info* /*info*/) {}
168
+
169
+ private:
170
+ static size_t GetMaxPerRpcRetryBufferSize(const grpc_channel_args* args) {
171
+ return static_cast<size_t>(grpc_channel_args_find_integer(
172
+ args, GRPC_ARG_PER_RPC_RETRY_BUFFER_SIZE,
173
+ {DEFAULT_PER_RPC_RETRY_BUFFER_SIZE, 0, INT_MAX}));
174
+ }
175
+
176
+ RetryFilter(const grpc_channel_args* args, grpc_error_handle* error)
177
+ : client_channel_(grpc_channel_args_find_pointer<ClientChannel>(
178
+ args, GRPC_ARG_CLIENT_CHANNEL)),
179
+ per_rpc_retry_buffer_size_(GetMaxPerRpcRetryBufferSize(args)),
180
+ service_config_parser_index_(
181
+ internal::RetryServiceConfigParser::ParserIndex()) {
182
+ // Get retry throttling parameters from service config.
183
+ auto* service_config = grpc_channel_args_find_pointer<ServiceConfig>(
184
+ args, GRPC_ARG_SERVICE_CONFIG_OBJ);
185
+ if (service_config == nullptr) return;
186
+ const auto* config = static_cast<const RetryGlobalConfig*>(
187
+ service_config->GetGlobalParsedConfig(
188
+ RetryServiceConfigParser::ParserIndex()));
189
+ if (config == nullptr) return;
190
+ // Get server name from target URI.
191
+ const char* server_uri =
192
+ grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
193
+ if (server_uri == nullptr) {
194
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
195
+ "server URI channel arg missing or wrong type in client channel "
196
+ "filter");
197
+ return;
198
+ }
199
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
200
+ if (!uri.ok() || uri->path().empty()) {
201
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
202
+ "could not extract server name from target URI");
203
+ return;
204
+ }
205
+ std::string server_name(absl::StripPrefix(uri->path(), "/"));
206
+ // Get throttling config for server_name.
207
+ retry_throttle_data_ =
208
+ internal::ServerRetryThrottleMap::Get()->GetDataForServer(
209
+ server_name, config->max_milli_tokens(),
210
+ config->milli_token_ratio());
211
+ }
212
+
213
+ const RetryMethodConfig* GetRetryPolicy(
214
+ const grpc_call_context_element* context);
215
+
216
+ ClientChannel* client_channel_;
217
+ size_t per_rpc_retry_buffer_size_;
218
+ RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
219
+ const size_t service_config_parser_index_;
220
+ };
221
+
222
+ //
223
+ // RetryFilter::CallData
224
+ //
225
+
226
+ class RetryFilter::CallData {
227
+ public:
228
+ static grpc_error_handle Init(grpc_call_element* elem,
229
+ const grpc_call_element_args* args);
230
+ static void Destroy(grpc_call_element* elem,
231
+ const grpc_call_final_info* /*final_info*/,
232
+ grpc_closure* then_schedule_closure);
233
+ static void StartTransportStreamOpBatch(
234
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
235
+ static void SetPollent(grpc_call_element* elem, grpc_polling_entity* pollent);
236
+
237
+ private:
238
+ class CallStackDestructionBarrier;
239
+
240
+ // Pending batches stored in call data.
241
+ struct PendingBatch {
242
+ // The pending batch. If nullptr, this slot is empty.
243
+ grpc_transport_stream_op_batch* batch = nullptr;
244
+ // Indicates whether payload for send ops has been cached in CallData.
245
+ bool send_ops_cached = false;
246
+ };
247
+
248
+ // State associated with each call attempt.
249
+ class CallAttempt : public RefCounted<CallAttempt> {
250
+ public:
251
+ CallAttempt(CallData* calld, bool is_transparent_retry);
252
+ ~CallAttempt() override;
253
+
254
+ bool lb_call_committed() const { return lb_call_committed_; }
255
+
256
+ // Constructs and starts whatever batches are needed on this call
257
+ // attempt.
258
+ void StartRetriableBatches();
259
+
260
+ // Frees cached send ops that have already been completed after
261
+ // committing the call.
262
+ void FreeCachedSendOpDataAfterCommit();
263
+
264
+ // Cancels the call attempt.
265
+ void CancelFromSurface(grpc_transport_stream_op_batch* cancel_batch);
266
+
267
+ private:
268
+ // State used for starting a retryable batch on the call attempt's LB call.
269
+ // This provides its own grpc_transport_stream_op_batch and other data
270
+ // structures needed to populate the ops in the batch.
271
+ // We allocate one struct on the arena for each attempt at starting a
272
+ // batch on a given LB call.
273
+ class BatchData
274
+ : public RefCounted<BatchData, PolymorphicRefCount, kUnrefCallDtor> {
275
+ public:
276
+ BatchData(RefCountedPtr<CallAttempt> call_attempt, int refcount,
277
+ bool set_on_complete);
278
+ ~BatchData() override;
279
+
280
+ grpc_transport_stream_op_batch* batch() { return &batch_; }
281
+
282
+ // Adds retriable send_initial_metadata op.
283
+ void AddRetriableSendInitialMetadataOp();
284
+ // Adds retriable send_message op.
285
+ void AddRetriableSendMessageOp();
286
+ // Adds retriable send_trailing_metadata op.
287
+ void AddRetriableSendTrailingMetadataOp();
288
+ // Adds retriable recv_initial_metadata op.
289
+ void AddRetriableRecvInitialMetadataOp();
290
+ // Adds retriable recv_message op.
291
+ void AddRetriableRecvMessageOp();
292
+ // Adds retriable recv_trailing_metadata op.
293
+ void AddRetriableRecvTrailingMetadataOp();
294
+ // Adds cancel_stream op.
295
+ void AddCancelStreamOp(grpc_error_handle error);
296
+
297
+ private:
298
+ // Frees cached send ops that were completed by the completed batch in
299
+ // batch_data. Used when batches are completed after the call is
300
+ // committed.
301
+ void FreeCachedSendOpDataForCompletedBatch();
302
+
303
+ // If there is a pending recv_initial_metadata op, adds a closure
304
+ // to closures for recv_initial_metadata_ready.
305
+ void MaybeAddClosureForRecvInitialMetadataCallback(
306
+ grpc_error_handle error, CallCombinerClosureList* closures);
307
+ // Intercepts recv_initial_metadata_ready callback for retries.
308
+ // Commits the call and returns the initial metadata up the stack.
309
+ static void RecvInitialMetadataReady(void* arg, grpc_error_handle error);
310
+
311
+ // If there is a pending recv_message op, adds a closure to closures
312
+ // for recv_message_ready.
313
+ void MaybeAddClosureForRecvMessageCallback(
314
+ grpc_error_handle error, CallCombinerClosureList* closures);
315
+ // Intercepts recv_message_ready callback for retries.
316
+ // Commits the call and returns the message up the stack.
317
+ static void RecvMessageReady(void* arg, grpc_error_handle error);
318
+
319
+ // If there is a pending recv_trailing_metadata op, adds a closure to
320
+ // closures for recv_trailing_metadata_ready.
321
+ void MaybeAddClosureForRecvTrailingMetadataReady(
322
+ grpc_error_handle error, CallCombinerClosureList* closures);
323
+ // Adds any necessary closures for deferred batch completion
324
+ // callbacks to closures.
325
+ void AddClosuresForDeferredCompletionCallbacks(
326
+ CallCombinerClosureList* closures);
327
+ // For any pending batch containing an op that has not yet been started,
328
+ // adds the pending batch's completion closures to closures.
329
+ void AddClosuresToFailUnstartedPendingBatches(
330
+ grpc_error_handle error, CallCombinerClosureList* closures);
331
+ // Runs necessary closures upon completion of a call attempt.
332
+ void RunClosuresForCompletedCall(grpc_error_handle error);
333
+ // Intercepts recv_trailing_metadata_ready callback for retries.
334
+ // Commits the call and returns the trailing metadata up the stack.
335
+ static void RecvTrailingMetadataReady(void* arg, grpc_error_handle error);
336
+
337
+ // Adds the on_complete closure for the pending batch completed in
338
+ // batch_data to closures.
339
+ void AddClosuresForCompletedPendingBatch(
340
+ grpc_error_handle error, CallCombinerClosureList* closures);
341
+
342
+ // If there are any cached ops to replay or pending ops to start on the
343
+ // LB call, adds them to closures.
344
+ void AddClosuresForReplayOrPendingSendOps(
345
+ CallCombinerClosureList* closures);
346
+
347
+ // Callback used to intercept on_complete from LB calls.
348
+ static void OnComplete(void* arg, grpc_error_handle error);
349
+
350
+ // Callback used to handle on_complete for internally generated
351
+ // cancel_stream op.
352
+ static void OnCompleteForCancelOp(void* arg, grpc_error_handle error);
353
+
354
+ RefCountedPtr<CallAttempt> call_attempt_;
355
+ // The batch to use in the LB call.
356
+ // Its payload field points to CallAttempt::batch_payload_.
357
+ grpc_transport_stream_op_batch batch_;
358
+ // For intercepting on_complete.
359
+ grpc_closure on_complete_;
360
+ };
361
+
362
+ class AttemptDispatchController
363
+ : public ConfigSelector::CallDispatchController {
364
+ public:
365
+ explicit AttemptDispatchController(CallAttempt* call_attempt)
366
+ : call_attempt_(call_attempt) {}
367
+
368
+ // Will never be called.
369
+ bool ShouldRetry() override { return false; }
370
+
371
+ void Commit() override {
372
+ call_attempt_->lb_call_committed_ = true;
373
+ auto* calld = call_attempt_->calld_;
374
+ if (calld->retry_committed_) {
375
+ auto* service_config_call_data =
376
+ static_cast<ClientChannelServiceConfigCallData*>(
377
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA]
378
+ .value);
379
+ service_config_call_data->call_dispatch_controller()->Commit();
380
+ }
381
+ }
382
+
383
+ private:
384
+ CallAttempt* call_attempt_;
385
+ };
386
+
387
+ // Creates a BatchData object on the call's arena with the
388
+ // specified refcount. If set_on_complete is true, the batch's
389
+ // on_complete callback will be set to point to on_complete();
390
+ // otherwise, the batch's on_complete callback will be null.
391
+ BatchData* CreateBatch(int refcount, bool set_on_complete) {
392
+ return calld_->arena_->New<BatchData>(Ref(DEBUG_LOCATION, "CreateBatch"),
393
+ refcount, set_on_complete);
394
+ }
395
+
396
+ // If there are any cached send ops that need to be replayed on this
397
+ // call attempt, creates and returns a new batch to replay those ops.
398
+ // Otherwise, returns nullptr.
399
+ BatchData* MaybeCreateBatchForReplay();
400
+
401
+ // Adds a closure to closures that will execute batch in the call combiner.
402
+ void AddClosureForBatch(grpc_transport_stream_op_batch* batch,
403
+ const char* reason,
404
+ CallCombinerClosureList* closures);
405
+
406
+ // Helper function used to start a recv_trailing_metadata batch. This
407
+ // is used in the case where a recv_initial_metadata or recv_message
408
+ // op fails in a way that we know the call is over but when the application
409
+ // has not yet started its own recv_trailing_metadata op.
410
+ void AddBatchForInternalRecvTrailingMetadata(
411
+ CallCombinerClosureList* closures);
412
+
413
+ // Adds a batch to closures to cancel this call attempt, if
414
+ // cancellation has not already been sent on the LB call.
415
+ void MaybeAddBatchForCancelOp(grpc_error_handle error,
416
+ CallCombinerClosureList* closures);
417
+
418
+ // Adds batches for pending batches to closures.
419
+ void AddBatchesForPendingBatches(CallCombinerClosureList* closures);
420
+
421
+ // Adds whatever batches are needed on this attempt to closures.
422
+ void AddRetriableBatches(CallCombinerClosureList* closures);
423
+
424
+ // Returns true if any send op in the batch was not yet started on this
425
+ // attempt.
426
+ bool PendingBatchContainsUnstartedSendOps(PendingBatch* pending);
427
+
428
+ // Returns true if there are cached send ops to replay.
429
+ bool HaveSendOpsToReplay();
430
+
431
+ // If our retry state is no longer needed, switch to fast path by moving
432
+ // our LB call into calld_->committed_call_ and having calld_ drop
433
+ // its ref to us.
434
+ void MaybeSwitchToFastPath();
435
+
436
+ // Returns true if the call should be retried.
437
+ bool ShouldRetry(absl::optional<grpc_status_code> status,
438
+ absl::optional<Duration> server_pushback_ms);
439
+
440
+ // Abandons the call attempt. Unrefs any deferred batches.
441
+ void Abandon();
442
+
443
+ static void OnPerAttemptRecvTimer(void* arg, grpc_error_handle error);
444
+ static void OnPerAttemptRecvTimerLocked(void* arg, grpc_error_handle error);
445
+ void MaybeCancelPerAttemptRecvTimer();
446
+
447
+ CallData* calld_;
448
+ AttemptDispatchController attempt_dispatch_controller_;
449
+ OrphanablePtr<ClientChannel::LoadBalancedCall> lb_call_;
450
+ bool lb_call_committed_ = false;
451
+
452
+ grpc_timer per_attempt_recv_timer_;
453
+ grpc_closure on_per_attempt_recv_timer_;
454
+ bool per_attempt_recv_timer_pending_ = false;
455
+
456
+ // BatchData.batch.payload points to this.
457
+ grpc_transport_stream_op_batch_payload batch_payload_;
458
+ // For send_initial_metadata.
459
+ grpc_metadata_batch send_initial_metadata_{calld_->arena_};
460
+ // For send_message.
461
+ // TODO(roth): Restructure this to eliminate use of ManualConstructor.
462
+ ManualConstructor<ByteStreamCache::CachingByteStream> send_message_;
463
+ // For send_trailing_metadata.
464
+ grpc_metadata_batch send_trailing_metadata_{calld_->arena_};
465
+ // For intercepting recv_initial_metadata.
466
+ grpc_metadata_batch recv_initial_metadata_{calld_->arena_};
467
+ grpc_closure recv_initial_metadata_ready_;
468
+ bool trailing_metadata_available_ = false;
469
+ // For intercepting recv_message.
470
+ grpc_closure recv_message_ready_;
471
+ OrphanablePtr<ByteStream> recv_message_;
472
+ // For intercepting recv_trailing_metadata.
473
+ grpc_metadata_batch recv_trailing_metadata_{calld_->arena_};
474
+ grpc_transport_stream_stats collect_stats_;
475
+ grpc_closure recv_trailing_metadata_ready_;
476
+ // These fields indicate which ops have been started and completed on
477
+ // this call attempt.
478
+ size_t started_send_message_count_ = 0;
479
+ size_t completed_send_message_count_ = 0;
480
+ size_t started_recv_message_count_ = 0;
481
+ size_t completed_recv_message_count_ = 0;
482
+ bool started_send_initial_metadata_ : 1;
483
+ bool completed_send_initial_metadata_ : 1;
484
+ bool started_send_trailing_metadata_ : 1;
485
+ bool completed_send_trailing_metadata_ : 1;
486
+ bool started_recv_initial_metadata_ : 1;
487
+ bool completed_recv_initial_metadata_ : 1;
488
+ bool started_recv_trailing_metadata_ : 1;
489
+ bool completed_recv_trailing_metadata_ : 1;
490
+ bool sent_cancel_stream_ : 1;
491
+ // State for callback processing.
492
+ RefCountedPtr<BatchData> recv_initial_metadata_ready_deferred_batch_;
493
+ grpc_error_handle recv_initial_metadata_error_ = GRPC_ERROR_NONE;
494
+ RefCountedPtr<BatchData> recv_message_ready_deferred_batch_;
495
+ grpc_error_handle recv_message_error_ = GRPC_ERROR_NONE;
496
+ struct OnCompleteDeferredBatch {
497
+ OnCompleteDeferredBatch(RefCountedPtr<BatchData> batch,
498
+ grpc_error_handle error)
499
+ : batch(std::move(batch)), error(error) {}
500
+ RefCountedPtr<BatchData> batch;
501
+ grpc_error_handle error;
502
+ };
503
+ // There cannot be more than 3 pending send op batches at a time.
504
+ absl::InlinedVector<OnCompleteDeferredBatch, 3>
505
+ on_complete_deferred_batches_;
506
+ RefCountedPtr<BatchData> recv_trailing_metadata_internal_batch_;
507
+ grpc_error_handle recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
508
+ bool seen_recv_trailing_metadata_from_surface_ : 1;
509
+ // NOTE: Do not move this next to the metadata bitfields above. That would
510
+ // save space but will also result in a data race because compiler
511
+ // will generate a 2 byte store which overwrites the meta-data
512
+ // fields upon setting this field.
513
+ bool abandoned_ : 1;
514
+ };
515
+
516
+ CallData(RetryFilter* chand, const grpc_call_element_args& args);
517
+ ~CallData();
518
+
519
+ void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
520
+
521
+ // Returns the index into pending_batches_ to be used for batch.
522
+ static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
523
+ PendingBatch* PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
524
+ void PendingBatchClear(PendingBatch* pending);
525
+ void MaybeClearPendingBatch(PendingBatch* pending);
526
+ static void FailPendingBatchInCallCombiner(void* arg,
527
+ grpc_error_handle error);
528
+ // Fails all pending batches. Does NOT yield call combiner.
529
+ void PendingBatchesFail(grpc_error_handle error);
530
+ // Returns a pointer to the first pending batch for which predicate(batch)
531
+ // returns true, or null if not found.
532
+ template <typename Predicate>
533
+ PendingBatch* PendingBatchFind(const char* log_message, Predicate predicate);
534
+
535
+ // Caches data for send ops so that it can be retried later, if not
536
+ // already cached.
537
+ void MaybeCacheSendOpsForBatch(PendingBatch* pending);
538
+ void FreeCachedSendInitialMetadata();
539
+ // Frees cached send_message at index idx.
540
+ void FreeCachedSendMessage(size_t idx);
541
+ void FreeCachedSendTrailingMetadata();
542
+ void FreeAllCachedSendOpData();
543
+
544
+ // Commits the call so that no further retry attempts will be performed.
545
+ void RetryCommit(CallAttempt* call_attempt);
546
+
547
+ // Starts a timer to retry after appropriate back-off.
548
+ // If server_pushback is nullopt, retry_backoff_ is used.
549
+ void StartRetryTimer(absl::optional<Duration> server_pushback);
550
+
551
+ static void OnRetryTimer(void* arg, grpc_error_handle error);
552
+ static void OnRetryTimerLocked(void* arg, grpc_error_handle error);
553
+
554
+ // Adds a closure to closures to start a transparent retry.
555
+ void AddClosureToStartTransparentRetry(CallCombinerClosureList* closures);
556
+ static void StartTransparentRetry(void* arg, grpc_error_handle error);
557
+
558
+ OrphanablePtr<ClientChannel::LoadBalancedCall> CreateLoadBalancedCall(
559
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
560
+ bool is_transparent_retry);
561
+
562
+ void CreateCallAttempt(bool is_transparent_retry);
563
+
564
+ RetryFilter* chand_;
565
+ grpc_polling_entity* pollent_;
566
+ RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
567
+ const RetryMethodConfig* retry_policy_ = nullptr;
568
+ BackOff retry_backoff_;
569
+
570
+ grpc_slice path_; // Request path.
571
+ Timestamp deadline_;
572
+ Arena* arena_;
573
+ grpc_call_stack* owning_call_;
574
+ CallCombiner* call_combiner_;
575
+ grpc_call_context_element* call_context_;
576
+
577
+ grpc_error_handle cancelled_from_surface_ = GRPC_ERROR_NONE;
578
+
579
+ RefCountedPtr<CallStackDestructionBarrier> call_stack_destruction_barrier_;
580
+
581
+ // TODO(roth): As part of implementing hedging, we will need to maintain a
582
+ // list of all pending attempts, so that we can cancel them all if the call
583
+ // gets cancelled.
584
+ RefCountedPtr<CallAttempt> call_attempt_;
585
+
586
+ // LB call used when we've committed to a call attempt and the retry
587
+ // state for that attempt is no longer needed. This provides a fast
588
+ // path for long-running streaming calls that minimizes overhead.
589
+ OrphanablePtr<ClientChannel::LoadBalancedCall> committed_call_;
590
+
591
+ // When are are not yet fully committed to a particular call (i.e.,
592
+ // either we might still retry or we have committed to the call but
593
+ // there are still some cached ops to be replayed on the call),
594
+ // batches received from above will be added to this list, and they
595
+ // will not be removed until we have invoked their completion callbacks.
596
+ size_t bytes_buffered_for_retry_ = 0;
597
+ PendingBatch pending_batches_[MAX_PENDING_BATCHES];
598
+ bool pending_send_initial_metadata_ : 1;
599
+ bool pending_send_message_ : 1;
600
+ bool pending_send_trailing_metadata_ : 1;
601
+
602
+ // Retry state.
603
+ bool retry_committed_ : 1;
604
+ bool retry_timer_pending_ : 1;
605
+ bool retry_codepath_started_ : 1;
606
+ bool sent_transparent_retry_not_seen_by_server_ : 1;
607
+ int num_attempts_completed_ = 0;
608
+ grpc_timer retry_timer_;
609
+ grpc_closure retry_closure_;
610
+
611
+ // Cached data for retrying send ops.
612
+ // send_initial_metadata
613
+ bool seen_send_initial_metadata_ = false;
614
+ grpc_metadata_batch send_initial_metadata_{arena_};
615
+ uint32_t send_initial_metadata_flags_;
616
+ // TODO(roth): As part of implementing hedging, we'll probably need to
617
+ // have the LB call set a value in CallAttempt and then propagate it
618
+ // from CallAttempt to the parent call when we commit. Otherwise, we
619
+ // may leave this with a value for a peer other than the one we
620
+ // actually commit to. Alternatively, maybe see if there's a way to
621
+ // change the surface API such that the peer isn't available until
622
+ // after initial metadata is received? (Could even change the
623
+ // transport API to return this with the recv_initial_metadata op.)
624
+ gpr_atm* peer_string_;
625
+ // send_message
626
+ // When we get a send_message op, we replace the original byte stream
627
+ // with a CachingByteStream that caches the slices to a local buffer for
628
+ // use in retries.
629
+ // Note: We inline the cache for the first 3 send_message ops and use
630
+ // dynamic allocation after that. This number was essentially picked
631
+ // at random; it could be changed in the future to tune performance.
632
+ // TODO(roth): As part of implementing hedging, we may need some
633
+ // synchronization here, since ByteStreamCache does not provide any
634
+ // synchronization, so it's not safe to have multiple
635
+ // CachingByteStreams read from the same ByteStreamCache concurrently.
636
+ absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
637
+ // send_trailing_metadata
638
+ bool seen_send_trailing_metadata_ = false;
639
+ grpc_metadata_batch send_trailing_metadata_{arena_};
640
+ };
641
+
642
+ //
643
+ // RetryFilter::CallData::CallStackDestructionBarrier
644
+ //
645
+
646
+ // A class to track the existence of LoadBalancedCall call stacks that
647
+ // we've created. We wait until all such call stacks have been
648
+ // destroyed before we return the on_call_stack_destruction closure up
649
+ // to the surface.
650
+ //
651
+ // The parent RetryFilter::CallData object holds a ref to this object.
652
+ // When it is destroyed, it will store the on_call_stack_destruction
653
+ // closure from the surface in this object and then release its ref.
654
+ // We also take a ref to this object for each LB call we create, and
655
+ // those refs are not released until the LB call stack is destroyed.
656
+ // When this object is destroyed, it will invoke the
657
+ // on_call_stack_destruction closure from the surface.
658
+ class RetryFilter::CallData::CallStackDestructionBarrier
659
+ : public RefCounted<CallStackDestructionBarrier, PolymorphicRefCount,
660
+ kUnrefCallDtor> {
661
+ public:
662
+ CallStackDestructionBarrier() {}
663
+
664
+ ~CallStackDestructionBarrier() override {
665
+ // TODO(yashkt) : This can potentially be a Closure::Run
666
+ ExecCtx::Run(DEBUG_LOCATION, on_call_stack_destruction_, GRPC_ERROR_NONE);
667
+ }
668
+
669
+ // Set the closure from the surface. This closure will be invoked
670
+ // when this object is destroyed.
671
+ void set_on_call_stack_destruction(grpc_closure* on_call_stack_destruction) {
672
+ on_call_stack_destruction_ = on_call_stack_destruction;
673
+ }
674
+
675
+ // Invoked to get an on_call_stack_destruction closure for a new LB call.
676
+ grpc_closure* MakeLbCallDestructionClosure(CallData* calld) {
677
+ Ref().release(); // Ref held by callback.
678
+ grpc_closure* on_lb_call_destruction_complete =
679
+ calld->arena_->New<grpc_closure>();
680
+ GRPC_CLOSURE_INIT(on_lb_call_destruction_complete,
681
+ OnLbCallDestructionComplete, this, nullptr);
682
+ return on_lb_call_destruction_complete;
683
+ }
684
+
685
+ private:
686
+ static void OnLbCallDestructionComplete(void* arg,
687
+ grpc_error_handle /*error*/) {
688
+ auto* self = static_cast<CallStackDestructionBarrier*>(arg);
689
+ self->Unref();
690
+ }
691
+
692
+ grpc_closure* on_call_stack_destruction_ = nullptr;
693
+ };
694
+
695
+ //
696
+ // RetryFilter::CallData::CallAttempt
697
+ //
698
+
699
+ RetryFilter::CallData::CallAttempt::CallAttempt(CallData* calld,
700
+ bool is_transparent_retry)
701
+ : RefCounted(GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) ? "CallAttempt"
702
+ : nullptr),
703
+ calld_(calld),
704
+ attempt_dispatch_controller_(this),
705
+ batch_payload_(calld->call_context_),
706
+ started_send_initial_metadata_(false),
707
+ completed_send_initial_metadata_(false),
708
+ started_send_trailing_metadata_(false),
709
+ completed_send_trailing_metadata_(false),
710
+ started_recv_initial_metadata_(false),
711
+ completed_recv_initial_metadata_(false),
712
+ started_recv_trailing_metadata_(false),
713
+ completed_recv_trailing_metadata_(false),
714
+ sent_cancel_stream_(false),
715
+ seen_recv_trailing_metadata_from_surface_(false),
716
+ abandoned_(false) {
717
+ lb_call_ = calld->CreateLoadBalancedCall(&attempt_dispatch_controller_,
718
+ is_transparent_retry);
719
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
720
+ gpr_log(GPR_INFO,
721
+ "chand=%p calld=%p attempt=%p: created attempt, lb_call=%p",
722
+ calld->chand_, calld, this, lb_call_.get());
723
+ }
724
+ // If per_attempt_recv_timeout is set, start a timer.
725
+ if (calld->retry_policy_ != nullptr &&
726
+ calld->retry_policy_->per_attempt_recv_timeout().has_value()) {
727
+ Timestamp per_attempt_recv_deadline =
728
+ ExecCtx::Get()->Now() +
729
+ *calld->retry_policy_->per_attempt_recv_timeout();
730
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
731
+ gpr_log(GPR_INFO,
732
+ "chand=%p calld=%p attempt=%p: per-attempt timeout in %" PRId64
733
+ " ms",
734
+ calld->chand_, calld, this,
735
+ calld->retry_policy_->per_attempt_recv_timeout()->millis());
736
+ }
737
+ // Schedule retry after computed delay.
738
+ GRPC_CLOSURE_INIT(&on_per_attempt_recv_timer_, OnPerAttemptRecvTimer, this,
739
+ nullptr);
740
+ GRPC_CALL_STACK_REF(calld->owning_call_, "OnPerAttemptRecvTimer");
741
+ Ref(DEBUG_LOCATION, "OnPerAttemptRecvTimer").release();
742
+ per_attempt_recv_timer_pending_ = true;
743
+ grpc_timer_init(&per_attempt_recv_timer_, per_attempt_recv_deadline,
744
+ &on_per_attempt_recv_timer_);
745
+ }
746
+ }
747
+
748
+ RetryFilter::CallData::CallAttempt::~CallAttempt() {
749
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
750
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: destroying call attempt",
751
+ calld_->chand_, calld_, this);
752
+ }
753
+ }
754
+
755
+ void RetryFilter::CallData::CallAttempt::FreeCachedSendOpDataAfterCommit() {
756
+ // TODO(roth): When we implement hedging, this logic will need to get
757
+ // a bit more complex, because there may be other (now abandoned) call
758
+ // attempts still using this data. We may need to do some sort of
759
+ // ref-counting instead.
760
+ if (completed_send_initial_metadata_) {
761
+ calld_->FreeCachedSendInitialMetadata();
762
+ }
763
+ for (size_t i = 0; i < completed_send_message_count_; ++i) {
764
+ calld_->FreeCachedSendMessage(i);
765
+ }
766
+ if (completed_send_trailing_metadata_) {
767
+ calld_->FreeCachedSendTrailingMetadata();
768
+ }
769
+ }
770
+
771
+ bool RetryFilter::CallData::CallAttempt::PendingBatchContainsUnstartedSendOps(
772
+ PendingBatch* pending) {
773
+ if (pending->batch->on_complete == nullptr) return false;
774
+ if (pending->batch->send_initial_metadata &&
775
+ !started_send_initial_metadata_) {
776
+ return true;
777
+ }
778
+ if (pending->batch->send_message &&
779
+ started_send_message_count_ < calld_->send_messages_.size()) {
780
+ return true;
781
+ }
782
+ if (pending->batch->send_trailing_metadata &&
783
+ !started_send_trailing_metadata_) {
784
+ return true;
785
+ }
786
+ return false;
787
+ }
788
+
789
+ bool RetryFilter::CallData::CallAttempt::HaveSendOpsToReplay() {
790
+ // We don't check send_initial_metadata here, because that op will always
791
+ // be started as soon as it is received from the surface, so it will
792
+ // never need to be started at this point.
793
+ return started_send_message_count_ < calld_->send_messages_.size() ||
794
+ (calld_->seen_send_trailing_metadata_ &&
795
+ !started_send_trailing_metadata_);
796
+ }
797
+
798
+ void RetryFilter::CallData::CallAttempt::MaybeSwitchToFastPath() {
799
+ // If we're not yet committed, we can't switch yet.
800
+ // TODO(roth): As part of implementing hedging, this logic needs to
801
+ // check that *this* call attempt is the one that we've committed to.
802
+ // Might need to replace abandoned_ with an enum indicating whether we're
803
+ // in flight, abandoned, or the winning call attempt.
804
+ if (!calld_->retry_committed_) return;
805
+ // If we've already switched to fast path, there's nothing to do here.
806
+ if (calld_->committed_call_ != nullptr) return;
807
+ // If the perAttemptRecvTimeout timer is pending, we can't switch yet.
808
+ if (per_attempt_recv_timer_pending_) return;
809
+ // If there are still send ops to replay, we can't switch yet.
810
+ if (HaveSendOpsToReplay()) return;
811
+ // If we started an internal batch for recv_trailing_metadata but have not
812
+ // yet seen that op from the surface, we can't switch yet.
813
+ if (recv_trailing_metadata_internal_batch_ != nullptr) return;
814
+ // Switch to fast path.
815
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
816
+ gpr_log(GPR_INFO,
817
+ "chand=%p calld=%p attempt=%p: retry state no longer needed; "
818
+ "moving LB call to parent and unreffing the call attempt",
819
+ calld_->chand_, calld_, this);
820
+ }
821
+ calld_->committed_call_ = std::move(lb_call_);
822
+ calld_->call_attempt_.reset(DEBUG_LOCATION, "MaybeSwitchToFastPath");
823
+ }
824
+
825
+ // If there are any cached send ops that need to be replayed on the
826
+ // current call attempt, creates and returns a new batch to replay those ops.
827
+ // Otherwise, returns nullptr.
828
+ RetryFilter::CallData::CallAttempt::BatchData*
829
+ RetryFilter::CallData::CallAttempt::MaybeCreateBatchForReplay() {
830
+ BatchData* replay_batch_data = nullptr;
831
+ // send_initial_metadata.
832
+ if (calld_->seen_send_initial_metadata_ && !started_send_initial_metadata_ &&
833
+ !calld_->pending_send_initial_metadata_) {
834
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
835
+ gpr_log(GPR_INFO,
836
+ "chand=%p calld=%p attempt=%p: replaying previously completed "
837
+ "send_initial_metadata op",
838
+ calld_->chand_, calld_, this);
839
+ }
840
+ replay_batch_data = CreateBatch(1, true /* set_on_complete */);
841
+ replay_batch_data->AddRetriableSendInitialMetadataOp();
842
+ }
843
+ // send_message.
844
+ // Note that we can only have one send_message op in flight at a time.
845
+ if (started_send_message_count_ < calld_->send_messages_.size() &&
846
+ started_send_message_count_ == completed_send_message_count_ &&
847
+ !calld_->pending_send_message_) {
848
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
849
+ gpr_log(GPR_INFO,
850
+ "chand=%p calld=%p attempt=%p: replaying previously completed "
851
+ "send_message op",
852
+ calld_->chand_, calld_, this);
853
+ }
854
+ if (replay_batch_data == nullptr) {
855
+ replay_batch_data = CreateBatch(1, true /* set_on_complete */);
856
+ }
857
+ replay_batch_data->AddRetriableSendMessageOp();
858
+ }
859
+ // send_trailing_metadata.
860
+ // Note that we only add this op if we have no more send_message ops
861
+ // to start, since we can't send down any more send_message ops after
862
+ // send_trailing_metadata.
863
+ if (calld_->seen_send_trailing_metadata_ &&
864
+ started_send_message_count_ == calld_->send_messages_.size() &&
865
+ !started_send_trailing_metadata_ &&
866
+ !calld_->pending_send_trailing_metadata_) {
867
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
868
+ gpr_log(GPR_INFO,
869
+ "chand=%p calld=%p attempt=%p: replaying previously completed "
870
+ "send_trailing_metadata op",
871
+ calld_->chand_, calld_, this);
872
+ }
873
+ if (replay_batch_data == nullptr) {
874
+ replay_batch_data = CreateBatch(1, true /* set_on_complete */);
875
+ }
876
+ replay_batch_data->AddRetriableSendTrailingMetadataOp();
877
+ }
878
+ return replay_batch_data;
879
+ }
880
+
881
+ namespace {
882
+
883
+ void StartBatchInCallCombiner(void* arg, grpc_error_handle /*ignored*/) {
884
+ grpc_transport_stream_op_batch* batch =
885
+ static_cast<grpc_transport_stream_op_batch*>(arg);
886
+ auto* lb_call = static_cast<ClientChannel::LoadBalancedCall*>(
887
+ batch->handler_private.extra_arg);
888
+ // Note: This will release the call combiner.
889
+ lb_call->StartTransportStreamOpBatch(batch);
890
+ }
891
+
892
+ } // namespace
893
+
894
+ void RetryFilter::CallData::CallAttempt::AddClosureForBatch(
895
+ grpc_transport_stream_op_batch* batch, const char* reason,
896
+ CallCombinerClosureList* closures) {
897
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
898
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: adding batch (%s): %s",
899
+ calld_->chand_, calld_, this, reason,
900
+ grpc_transport_stream_op_batch_string(batch).c_str());
901
+ }
902
+ batch->handler_private.extra_arg = lb_call_.get();
903
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
904
+ batch, grpc_schedule_on_exec_ctx);
905
+ closures->Add(&batch->handler_private.closure, GRPC_ERROR_NONE, reason);
906
+ }
907
+
908
+ void RetryFilter::CallData::CallAttempt::
909
+ AddBatchForInternalRecvTrailingMetadata(CallCombinerClosureList* closures) {
910
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
911
+ gpr_log(GPR_INFO,
912
+ "chand=%p calld=%p attempt=%p: call failed but "
913
+ "recv_trailing_metadata not started; starting it internally",
914
+ calld_->chand_, calld_, this);
915
+ }
916
+ // Create batch_data with 2 refs, since this batch will be unreffed twice:
917
+ // once for the recv_trailing_metadata_ready callback when the batch
918
+ // completes, and again when we actually get a recv_trailing_metadata
919
+ // op from the surface.
920
+ BatchData* batch_data = CreateBatch(2, false /* set_on_complete */);
921
+ batch_data->AddRetriableRecvTrailingMetadataOp();
922
+ recv_trailing_metadata_internal_batch_.reset(batch_data);
923
+ AddClosureForBatch(batch_data->batch(),
924
+ "starting internal recv_trailing_metadata", closures);
925
+ }
926
+
927
+ void RetryFilter::CallData::CallAttempt::MaybeAddBatchForCancelOp(
928
+ grpc_error_handle error, CallCombinerClosureList* closures) {
929
+ if (sent_cancel_stream_) {
930
+ GRPC_ERROR_UNREF(error);
931
+ return;
932
+ }
933
+ sent_cancel_stream_ = true;
934
+ BatchData* cancel_batch_data = CreateBatch(1, /*set_on_complete=*/true);
935
+ cancel_batch_data->AddCancelStreamOp(error);
936
+ AddClosureForBatch(cancel_batch_data->batch(),
937
+ "start cancellation batch on call attempt", closures);
938
+ }
939
+
940
+ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
941
+ CallCombinerClosureList* closures) {
942
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(calld_->pending_batches_); ++i) {
943
+ PendingBatch* pending = &calld_->pending_batches_[i];
944
+ grpc_transport_stream_op_batch* batch = pending->batch;
945
+ if (batch == nullptr) continue;
946
+ bool has_send_ops = false;
947
+ // Skip any batch that either (a) has already been started on this
948
+ // call attempt or (b) we can't start yet because we're still
949
+ // replaying send ops that need to be completed first.
950
+ // TODO(roth): Note that if any one op in the batch can't be sent
951
+ // yet due to ops that we're replaying, we don't start any of the ops
952
+ // in the batch. This is probably okay, but it could conceivably
953
+ // lead to increased latency in some cases -- e.g., we could delay
954
+ // starting a recv op due to it being in the same batch with a send
955
+ // op. If/when we revamp the callback protocol in
956
+ // transport_stream_op_batch, we may be able to fix this.
957
+ if (batch->send_initial_metadata) {
958
+ if (started_send_initial_metadata_) continue;
959
+ has_send_ops = true;
960
+ }
961
+ if (batch->send_message) {
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)) {
972
+ continue;
973
+ }
974
+ has_send_ops = true;
975
+ }
976
+ // Note that we only start send_trailing_metadata if we have no more
977
+ // send_message ops to start, since we can't send down any more
978
+ // send_message ops after send_trailing_metadata.
979
+ if (batch->send_trailing_metadata) {
980
+ if (started_send_message_count_ + batch->send_message <
981
+ calld_->send_messages_.size() ||
982
+ started_send_trailing_metadata_) {
983
+ continue;
984
+ }
985
+ has_send_ops = true;
986
+ }
987
+ int num_callbacks = has_send_ops; // All send ops share one callback.
988
+ if (batch->recv_initial_metadata) {
989
+ if (started_recv_initial_metadata_) continue;
990
+ ++num_callbacks;
991
+ }
992
+ if (batch->recv_message) {
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) {
997
+ continue;
998
+ }
999
+ ++num_callbacks;
1000
+ }
1001
+ if (batch->recv_trailing_metadata) {
1002
+ if (started_recv_trailing_metadata_) {
1003
+ seen_recv_trailing_metadata_from_surface_ = true;
1004
+ // If we previously completed a recv_trailing_metadata op
1005
+ // initiated by AddBatchForInternalRecvTrailingMetadata(), use the
1006
+ // result of that instead of trying to re-start this op.
1007
+ if (GPR_UNLIKELY(recv_trailing_metadata_internal_batch_ != nullptr)) {
1008
+ // If the batch completed, then trigger the completion callback
1009
+ // directly, so that we return the previously returned results to
1010
+ // the application. Otherwise, just unref the internally started
1011
+ // batch, since we'll propagate the completion when it completes.
1012
+ if (completed_recv_trailing_metadata_) {
1013
+ closures->Add(
1014
+ &recv_trailing_metadata_ready_, recv_trailing_metadata_error_,
1015
+ "re-executing recv_trailing_metadata_ready to propagate "
1016
+ "internally triggered result");
1017
+ // Ref will be released by callback.
1018
+ recv_trailing_metadata_internal_batch_.release();
1019
+ } else {
1020
+ recv_trailing_metadata_internal_batch_.reset(
1021
+ DEBUG_LOCATION,
1022
+ "internally started recv_trailing_metadata batch pending and "
1023
+ "recv_trailing_metadata started from surface");
1024
+ GRPC_ERROR_UNREF(recv_trailing_metadata_error_);
1025
+ }
1026
+ recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
1027
+ }
1028
+ // We don't want the fact that we've already started this op internally
1029
+ // to prevent us from adding a batch that may contain other ops.
1030
+ // Instead, we'll just skip adding this op below.
1031
+ if (num_callbacks == 0) continue;
1032
+ } else {
1033
+ ++num_callbacks;
1034
+ }
1035
+ }
1036
+ // If we're already committed and the following conditions are met,
1037
+ // just send the batch down as-is:
1038
+ // - The batch contains no cached send ops. (If it does, we need
1039
+ // the logic below to use the cached payloads.)
1040
+ // - The batch does not contain recv_trailing_metadata when we have
1041
+ // already started an internal recv_trailing_metadata batch. (If
1042
+ // we've already started an internal recv_trailing_metadata batch,
1043
+ // then we need the logic below to send all ops in the batch
1044
+ // *except* the recv_trailing_metadata op.)
1045
+ if (calld_->retry_committed_ && !pending->send_ops_cached &&
1046
+ (!batch->recv_trailing_metadata || !started_recv_trailing_metadata_)) {
1047
+ AddClosureForBatch(
1048
+ batch,
1049
+ "start non-replayable pending batch on call attempt after commit",
1050
+ closures);
1051
+ calld_->PendingBatchClear(pending);
1052
+ continue;
1053
+ }
1054
+ // Create batch with the right number of callbacks.
1055
+ BatchData* batch_data =
1056
+ CreateBatch(num_callbacks, has_send_ops /* set_on_complete */);
1057
+ // Cache send ops if needed.
1058
+ calld_->MaybeCacheSendOpsForBatch(pending);
1059
+ // send_initial_metadata.
1060
+ if (batch->send_initial_metadata) {
1061
+ batch_data->AddRetriableSendInitialMetadataOp();
1062
+ }
1063
+ // send_message.
1064
+ if (batch->send_message) {
1065
+ batch_data->AddRetriableSendMessageOp();
1066
+ }
1067
+ // send_trailing_metadata.
1068
+ if (batch->send_trailing_metadata) {
1069
+ batch_data->AddRetriableSendTrailingMetadataOp();
1070
+ }
1071
+ // recv_initial_metadata.
1072
+ if (batch->recv_initial_metadata) {
1073
+ // recv_flags is only used on the server side.
1074
+ GPR_ASSERT(batch->payload->recv_initial_metadata.recv_flags == nullptr);
1075
+ batch_data->AddRetriableRecvInitialMetadataOp();
1076
+ }
1077
+ // recv_message.
1078
+ if (batch->recv_message) {
1079
+ batch_data->AddRetriableRecvMessageOp();
1080
+ }
1081
+ // recv_trailing_metadata.
1082
+ if (batch->recv_trailing_metadata && !started_recv_trailing_metadata_) {
1083
+ batch_data->AddRetriableRecvTrailingMetadataOp();
1084
+ }
1085
+ AddClosureForBatch(batch_data->batch(),
1086
+ "start replayable pending batch on call attempt",
1087
+ closures);
1088
+ }
1089
+ }
1090
+
1091
+ void RetryFilter::CallData::CallAttempt::AddRetriableBatches(
1092
+ CallCombinerClosureList* closures) {
1093
+ // Replay previously-returned send_* ops if needed.
1094
+ BatchData* replay_batch_data = MaybeCreateBatchForReplay();
1095
+ if (replay_batch_data != nullptr) {
1096
+ AddClosureForBatch(replay_batch_data->batch(),
1097
+ "start replay batch on call attempt", closures);
1098
+ }
1099
+ // Now add pending batches.
1100
+ AddBatchesForPendingBatches(closures);
1101
+ }
1102
+
1103
+ void RetryFilter::CallData::CallAttempt::StartRetriableBatches() {
1104
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1105
+ gpr_log(GPR_INFO,
1106
+ "chand=%p calld=%p attempt=%p: constructing retriable batches",
1107
+ calld_->chand_, calld_, this);
1108
+ }
1109
+ // Construct list of closures to execute, one for each pending batch.
1110
+ CallCombinerClosureList closures;
1111
+ AddRetriableBatches(&closures);
1112
+ // Note: This will yield the call combiner.
1113
+ // Start batches on LB call.
1114
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1115
+ gpr_log(GPR_INFO,
1116
+ "chand=%p calld=%p attempt=%p: starting %" PRIuPTR
1117
+ " retriable batches on lb_call=%p",
1118
+ calld_->chand_, calld_, this, closures.size(), lb_call_.get());
1119
+ }
1120
+ closures.RunClosures(calld_->call_combiner_);
1121
+ }
1122
+
1123
+ void RetryFilter::CallData::CallAttempt::CancelFromSurface(
1124
+ grpc_transport_stream_op_batch* cancel_batch) {
1125
+ MaybeCancelPerAttemptRecvTimer();
1126
+ Abandon();
1127
+ // Propagate cancellation to LB call.
1128
+ lb_call_->StartTransportStreamOpBatch(cancel_batch);
1129
+ }
1130
+
1131
+ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1132
+ absl::optional<grpc_status_code> status,
1133
+ absl::optional<Duration> server_pushback) {
1134
+ // If no retry policy, don't retry.
1135
+ if (calld_->retry_policy_ == nullptr) return false;
1136
+ // Check status.
1137
+ if (status.has_value()) {
1138
+ if (GPR_LIKELY(*status == GRPC_STATUS_OK)) {
1139
+ if (calld_->retry_throttle_data_ != nullptr) {
1140
+ calld_->retry_throttle_data_->RecordSuccess();
1141
+ }
1142
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1143
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: call succeeded",
1144
+ calld_->chand_, calld_, this);
1145
+ }
1146
+ return false;
1147
+ }
1148
+ // Status is not OK. Check whether the status is retryable.
1149
+ if (!calld_->retry_policy_->retryable_status_codes().Contains(*status)) {
1150
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1151
+ gpr_log(GPR_INFO,
1152
+ "chand=%p calld=%p attempt=%p: status %s not configured as "
1153
+ "retryable",
1154
+ calld_->chand_, calld_, this,
1155
+ grpc_status_code_to_string(*status));
1156
+ }
1157
+ return false;
1158
+ }
1159
+ }
1160
+ // Record the failure and check whether retries are throttled.
1161
+ // Note that it's important for this check to come after the status
1162
+ // code check above, since we should only record failures whose statuses
1163
+ // match the configured retryable status codes, so that we don't count
1164
+ // things like failures due to malformed requests (INVALID_ARGUMENT).
1165
+ // Conversely, it's important for this to come before the remaining
1166
+ // checks, so that we don't fail to record failures due to other factors.
1167
+ if (calld_->retry_throttle_data_ != nullptr &&
1168
+ !calld_->retry_throttle_data_->RecordFailure()) {
1169
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1170
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: retries throttled",
1171
+ calld_->chand_, calld_, this);
1172
+ }
1173
+ return false;
1174
+ }
1175
+ // Check whether the call is committed.
1176
+ if (calld_->retry_committed_) {
1177
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1178
+ gpr_log(GPR_INFO,
1179
+ "chand=%p calld=%p attempt=%p: retries already committed",
1180
+ calld_->chand_, calld_, this);
1181
+ }
1182
+ return false;
1183
+ }
1184
+ // Check whether we have retries remaining.
1185
+ ++calld_->num_attempts_completed_;
1186
+ if (calld_->num_attempts_completed_ >=
1187
+ calld_->retry_policy_->max_attempts()) {
1188
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1189
+ gpr_log(
1190
+ GPR_INFO, "chand=%p calld=%p attempt=%p: exceeded %d retry attempts",
1191
+ calld_->chand_, calld_, this, calld_->retry_policy_->max_attempts());
1192
+ }
1193
+ return false;
1194
+ }
1195
+ // Check server push-back.
1196
+ if (server_pushback.has_value()) {
1197
+ if (*server_pushback < Duration::Zero()) {
1198
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1199
+ gpr_log(GPR_INFO,
1200
+ "chand=%p calld=%p attempt=%p: not retrying due to server "
1201
+ "push-back",
1202
+ calld_->chand_, calld_, this);
1203
+ }
1204
+ return false;
1205
+ } else {
1206
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1207
+ gpr_log(
1208
+ GPR_INFO,
1209
+ "chand=%p calld=%p attempt=%p: server push-back: retry in %" PRIu64
1210
+ " ms",
1211
+ calld_->chand_, calld_, this, server_pushback->millis());
1212
+ }
1213
+ }
1214
+ }
1215
+ // Check with call dispatch controller.
1216
+ auto* service_config_call_data =
1217
+ static_cast<ClientChannelServiceConfigCallData*>(
1218
+ calld_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
1219
+ if (!service_config_call_data->call_dispatch_controller()->ShouldRetry()) {
1220
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1221
+ gpr_log(
1222
+ GPR_INFO,
1223
+ "chand=%p calld=%p attempt=%p: call dispatch controller denied retry",
1224
+ calld_->chand_, calld_, this);
1225
+ }
1226
+ return false;
1227
+ }
1228
+ // We should retry.
1229
+ return true;
1230
+ }
1231
+
1232
+ void RetryFilter::CallData::CallAttempt::Abandon() {
1233
+ abandoned_ = true;
1234
+ // Unref batches for deferred completion callbacks that will now never
1235
+ // be invoked.
1236
+ if (started_recv_trailing_metadata_ &&
1237
+ !seen_recv_trailing_metadata_from_surface_) {
1238
+ recv_trailing_metadata_internal_batch_.reset(
1239
+ DEBUG_LOCATION,
1240
+ "unref internal recv_trailing_metadata_ready batch; attempt abandoned");
1241
+ }
1242
+ GRPC_ERROR_UNREF(recv_trailing_metadata_error_);
1243
+ recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
1244
+ recv_initial_metadata_ready_deferred_batch_.reset(
1245
+ DEBUG_LOCATION,
1246
+ "unref deferred recv_initial_metadata_ready batch; attempt abandoned");
1247
+ GRPC_ERROR_UNREF(recv_initial_metadata_error_);
1248
+ recv_initial_metadata_error_ = GRPC_ERROR_NONE;
1249
+ recv_message_ready_deferred_batch_.reset(
1250
+ DEBUG_LOCATION,
1251
+ "unref deferred recv_message_ready batch; attempt abandoned");
1252
+ GRPC_ERROR_UNREF(recv_message_error_);
1253
+ recv_message_error_ = GRPC_ERROR_NONE;
1254
+ for (auto& on_complete_deferred_batch : on_complete_deferred_batches_) {
1255
+ on_complete_deferred_batch.batch.reset(
1256
+ DEBUG_LOCATION, "unref deferred on_complete batch; attempt abandoned");
1257
+ GRPC_ERROR_UNREF(on_complete_deferred_batch.error);
1258
+ }
1259
+ on_complete_deferred_batches_.clear();
1260
+ }
1261
+
1262
+ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimer(
1263
+ void* arg, grpc_error_handle error) {
1264
+ auto* call_attempt = static_cast<CallAttempt*>(arg);
1265
+ GRPC_CLOSURE_INIT(&call_attempt->on_per_attempt_recv_timer_,
1266
+ OnPerAttemptRecvTimerLocked, call_attempt, nullptr);
1267
+ GRPC_CALL_COMBINER_START(call_attempt->calld_->call_combiner_,
1268
+ &call_attempt->on_per_attempt_recv_timer_,
1269
+ GRPC_ERROR_REF(error), "per-attempt timer fired");
1270
+ }
1271
+
1272
+ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
1273
+ void* arg, grpc_error_handle error) {
1274
+ auto* call_attempt = static_cast<CallAttempt*>(arg);
1275
+ auto* calld = call_attempt->calld_;
1276
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1277
+ gpr_log(GPR_INFO,
1278
+ "chand=%p calld=%p attempt=%p: perAttemptRecvTimeout timer fired: "
1279
+ "error=%s, per_attempt_recv_timer_pending_=%d",
1280
+ calld->chand_, calld, call_attempt,
1281
+ grpc_error_std_string(error).c_str(),
1282
+ call_attempt->per_attempt_recv_timer_pending_);
1283
+ }
1284
+ CallCombinerClosureList closures;
1285
+ if (error == GRPC_ERROR_NONE &&
1286
+ call_attempt->per_attempt_recv_timer_pending_) {
1287
+ call_attempt->per_attempt_recv_timer_pending_ = false;
1288
+ // Cancel this attempt.
1289
+ // TODO(roth): When implementing hedging, we should not cancel the
1290
+ // current attempt.
1291
+ call_attempt->MaybeAddBatchForCancelOp(
1292
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1293
+ "retry perAttemptRecvTimeout exceeded"),
1294
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED),
1295
+ &closures);
1296
+ // Check whether we should retry.
1297
+ if (call_attempt->ShouldRetry(/*status=*/absl::nullopt,
1298
+ /*server_pushback_ms=*/absl::nullopt)) {
1299
+ // Mark current attempt as abandoned.
1300
+ call_attempt->Abandon();
1301
+ // We are retrying. Start backoff timer.
1302
+ calld->StartRetryTimer(/*server_pushback=*/absl::nullopt);
1303
+ } else {
1304
+ // Not retrying, so commit the call.
1305
+ calld->RetryCommit(call_attempt);
1306
+ // If retry state is no longer needed, switch to fast path for
1307
+ // subsequent batches.
1308
+ call_attempt->MaybeSwitchToFastPath();
1309
+ }
1310
+ }
1311
+ closures.RunClosures(calld->call_combiner_);
1312
+ call_attempt->Unref(DEBUG_LOCATION, "OnPerAttemptRecvTimer");
1313
+ GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnPerAttemptRecvTimer");
1314
+ }
1315
+
1316
+ void RetryFilter::CallData::CallAttempt::MaybeCancelPerAttemptRecvTimer() {
1317
+ if (per_attempt_recv_timer_pending_) {
1318
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1319
+ gpr_log(GPR_INFO,
1320
+ "chand=%p calld=%p attempt=%p: cancelling "
1321
+ "perAttemptRecvTimeout timer",
1322
+ calld_->chand_, calld_, this);
1323
+ }
1324
+ per_attempt_recv_timer_pending_ = false;
1325
+ grpc_timer_cancel(&per_attempt_recv_timer_);
1326
+ }
1327
+ }
1328
+
1329
+ //
1330
+ // RetryFilter::CallData::CallAttempt::BatchData
1331
+ //
1332
+
1333
+ RetryFilter::CallData::CallAttempt::BatchData::BatchData(
1334
+ RefCountedPtr<CallAttempt> attempt, int refcount, bool set_on_complete)
1335
+ : RefCounted(
1336
+ GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) ? "BatchData" : nullptr,
1337
+ refcount),
1338
+ call_attempt_(std::move(attempt)) {
1339
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1340
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: creating batch %p",
1341
+ call_attempt_->calld_->chand_, call_attempt_->calld_,
1342
+ call_attempt_.get(), this);
1343
+ }
1344
+ // We hold a ref to the call stack for every batch sent on a call attempt.
1345
+ // This is because some batches on the call attempt may not complete
1346
+ // until after all of the batches are completed at the surface (because
1347
+ // each batch that is pending at the surface holds a ref). This
1348
+ // can happen for replayed send ops, and it can happen for
1349
+ // recv_initial_metadata and recv_message ops on a call attempt that has
1350
+ // been abandoned.
1351
+ GRPC_CALL_STACK_REF(call_attempt_->calld_->owning_call_, "Retry BatchData");
1352
+ batch_.payload = &call_attempt_->batch_payload_;
1353
+ if (set_on_complete) {
1354
+ GRPC_CLOSURE_INIT(&on_complete_, OnComplete, this, nullptr);
1355
+ batch_.on_complete = &on_complete_;
1356
+ }
1357
+ }
1358
+
1359
+ RetryFilter::CallData::CallAttempt::BatchData::~BatchData() {
1360
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1361
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: destroying batch %p",
1362
+ call_attempt_->calld_->chand_, call_attempt_->calld_,
1363
+ call_attempt_.get(), this);
1364
+ }
1365
+ GRPC_CALL_STACK_UNREF(call_attempt_->calld_->owning_call_, "Retry BatchData");
1366
+ call_attempt_.reset(DEBUG_LOCATION, "~BatchData");
1367
+ }
1368
+
1369
+ void RetryFilter::CallData::CallAttempt::BatchData::
1370
+ FreeCachedSendOpDataForCompletedBatch() {
1371
+ auto* calld = call_attempt_->calld_;
1372
+ // TODO(roth): When we implement hedging, this logic will need to get
1373
+ // a bit more complex, because there may be other (now abandoned) call
1374
+ // attempts still using this data. We may need to do some sort of
1375
+ // ref-counting instead.
1376
+ if (batch_.send_initial_metadata) {
1377
+ calld->FreeCachedSendInitialMetadata();
1378
+ }
1379
+ if (batch_.send_message) {
1380
+ calld->FreeCachedSendMessage(call_attempt_->completed_send_message_count_ -
1381
+ 1);
1382
+ }
1383
+ if (batch_.send_trailing_metadata) {
1384
+ calld->FreeCachedSendTrailingMetadata();
1385
+ }
1386
+ }
1387
+
1388
+ //
1389
+ // recv_initial_metadata callback handling
1390
+ //
1391
+
1392
+ void RetryFilter::CallData::CallAttempt::BatchData::
1393
+ MaybeAddClosureForRecvInitialMetadataCallback(
1394
+ grpc_error_handle error, CallCombinerClosureList* closures) {
1395
+ // Find pending batch.
1396
+ PendingBatch* pending = call_attempt_->calld_->PendingBatchFind(
1397
+ "invoking recv_initial_metadata_ready for",
1398
+ [](grpc_transport_stream_op_batch* batch) {
1399
+ return batch->recv_initial_metadata &&
1400
+ batch->payload->recv_initial_metadata
1401
+ .recv_initial_metadata_ready != nullptr;
1402
+ });
1403
+ if (pending == nullptr) {
1404
+ GRPC_ERROR_UNREF(error);
1405
+ return;
1406
+ }
1407
+ // Return metadata.
1408
+ *pending->batch->payload->recv_initial_metadata.recv_initial_metadata =
1409
+ std::move(call_attempt_->recv_initial_metadata_);
1410
+ // Propagate trailing_metadata_available.
1411
+ *pending->batch->payload->recv_initial_metadata.trailing_metadata_available =
1412
+ call_attempt_->trailing_metadata_available_;
1413
+ // Update bookkeeping.
1414
+ // Note: Need to do this before invoking the callback, since invoking
1415
+ // the callback will result in yielding the call combiner.
1416
+ grpc_closure* recv_initial_metadata_ready =
1417
+ pending->batch->payload->recv_initial_metadata
1418
+ .recv_initial_metadata_ready;
1419
+ pending->batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
1420
+ nullptr;
1421
+ call_attempt_->calld_->MaybeClearPendingBatch(pending);
1422
+ // Add callback to closures.
1423
+ closures->Add(recv_initial_metadata_ready, error,
1424
+ "recv_initial_metadata_ready for pending batch");
1425
+ }
1426
+
1427
+ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
1428
+ void* arg, grpc_error_handle error) {
1429
+ RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1430
+ CallAttempt* call_attempt = batch_data->call_attempt_.get();
1431
+ CallData* calld = call_attempt->calld_;
1432
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1433
+ gpr_log(GPR_INFO,
1434
+ "chand=%p calld=%p attempt=%p batch_data=%p: "
1435
+ "got recv_initial_metadata_ready, error=%s",
1436
+ calld->chand_, calld, call_attempt, batch_data.get(),
1437
+ grpc_error_std_string(error).c_str());
1438
+ }
1439
+ call_attempt->completed_recv_initial_metadata_ = true;
1440
+ // If this attempt has been abandoned, then we're not going to use the
1441
+ // result of this recv_initial_metadata op, so do nothing.
1442
+ if (call_attempt->abandoned_) {
1443
+ GRPC_CALL_COMBINER_STOP(
1444
+ calld->call_combiner_,
1445
+ "recv_initial_metadata_ready for abandoned attempt");
1446
+ return;
1447
+ }
1448
+ // Cancel per-attempt recv timer, if any.
1449
+ call_attempt->MaybeCancelPerAttemptRecvTimer();
1450
+ // If we're not committed, check the response to see if we need to commit.
1451
+ if (!calld->retry_committed_) {
1452
+ // If we got an error or a Trailers-Only response and have not yet gotten
1453
+ // the recv_trailing_metadata_ready callback, then defer propagating this
1454
+ // callback back to the surface. We can evaluate whether to retry when
1455
+ // recv_trailing_metadata comes back.
1456
+ if (GPR_UNLIKELY((call_attempt->trailing_metadata_available_ ||
1457
+ error != GRPC_ERROR_NONE) &&
1458
+ !call_attempt->completed_recv_trailing_metadata_)) {
1459
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1460
+ gpr_log(GPR_INFO,
1461
+ "chand=%p calld=%p attempt=%p: deferring "
1462
+ "recv_initial_metadata_ready (Trailers-Only)",
1463
+ calld->chand_, calld, call_attempt);
1464
+ }
1465
+ call_attempt->recv_initial_metadata_ready_deferred_batch_ =
1466
+ std::move(batch_data);
1467
+ call_attempt->recv_initial_metadata_error_ = GRPC_ERROR_REF(error);
1468
+ CallCombinerClosureList closures;
1469
+ if (error != GRPC_ERROR_NONE) {
1470
+ call_attempt->MaybeAddBatchForCancelOp(GRPC_ERROR_REF(error),
1471
+ &closures);
1472
+ }
1473
+ if (!call_attempt->started_recv_trailing_metadata_) {
1474
+ // recv_trailing_metadata not yet started by application; start it
1475
+ // ourselves to get status.
1476
+ call_attempt->AddBatchForInternalRecvTrailingMetadata(&closures);
1477
+ }
1478
+ closures.RunClosures(calld->call_combiner_);
1479
+ return;
1480
+ }
1481
+ // Received valid initial metadata, so commit the call.
1482
+ calld->RetryCommit(call_attempt);
1483
+ // If retry state is no longer needed, switch to fast path for
1484
+ // subsequent batches.
1485
+ call_attempt->MaybeSwitchToFastPath();
1486
+ }
1487
+ // Invoke the callback to return the result to the surface.
1488
+ CallCombinerClosureList closures;
1489
+ batch_data->MaybeAddClosureForRecvInitialMetadataCallback(
1490
+ GRPC_ERROR_REF(error), &closures);
1491
+ closures.RunClosures(calld->call_combiner_);
1492
+ }
1493
+
1494
+ //
1495
+ // recv_message callback handling
1496
+ //
1497
+
1498
+ void RetryFilter::CallData::CallAttempt::BatchData::
1499
+ MaybeAddClosureForRecvMessageCallback(grpc_error_handle error,
1500
+ CallCombinerClosureList* closures) {
1501
+ // Find pending op.
1502
+ PendingBatch* pending = call_attempt_->calld_->PendingBatchFind(
1503
+ "invoking recv_message_ready for",
1504
+ [](grpc_transport_stream_op_batch* batch) {
1505
+ return batch->recv_message &&
1506
+ batch->payload->recv_message.recv_message_ready != nullptr;
1507
+ });
1508
+ if (pending == nullptr) {
1509
+ GRPC_ERROR_UNREF(error);
1510
+ return;
1511
+ }
1512
+ // Return payload.
1513
+ *pending->batch->payload->recv_message.recv_message =
1514
+ std::move(call_attempt_->recv_message_);
1515
+ // Update bookkeeping.
1516
+ // Note: Need to do this before invoking the callback, since invoking
1517
+ // the callback will result in yielding the call combiner.
1518
+ grpc_closure* recv_message_ready =
1519
+ pending->batch->payload->recv_message.recv_message_ready;
1520
+ pending->batch->payload->recv_message.recv_message_ready = nullptr;
1521
+ call_attempt_->calld_->MaybeClearPendingBatch(pending);
1522
+ // Add callback to closures.
1523
+ closures->Add(recv_message_ready, error,
1524
+ "recv_message_ready for pending batch");
1525
+ }
1526
+
1527
+ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1528
+ void* arg, grpc_error_handle error) {
1529
+ RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1530
+ CallAttempt* call_attempt = batch_data->call_attempt_.get();
1531
+ CallData* calld = call_attempt->calld_;
1532
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1533
+ gpr_log(GPR_INFO,
1534
+ "chand=%p calld=%p attempt=%p batch_data=%p: "
1535
+ "got recv_message_ready, error=%s",
1536
+ calld->chand_, calld, call_attempt, batch_data.get(),
1537
+ grpc_error_std_string(error).c_str());
1538
+ }
1539
+ ++call_attempt->completed_recv_message_count_;
1540
+ // If this attempt has been abandoned, then we're not going to use the
1541
+ // result of this recv_message op, so do nothing.
1542
+ if (call_attempt->abandoned_) {
1543
+ // The transport will not invoke recv_trailing_metadata_ready until the byte
1544
+ // stream for any recv_message op is orphaned, so we do that here to ensure
1545
+ // that any pending recv_trailing_metadata op can complete.
1546
+ call_attempt->recv_message_.reset();
1547
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1548
+ "recv_message_ready for abandoned attempt");
1549
+ return;
1550
+ }
1551
+ // Cancel per-attempt recv timer, if any.
1552
+ call_attempt->MaybeCancelPerAttemptRecvTimer();
1553
+ // If we're not committed, check the response to see if we need to commit.
1554
+ if (!calld->retry_committed_) {
1555
+ // If we got an error or the payload was nullptr and we have not yet gotten
1556
+ // the recv_trailing_metadata_ready callback, then defer propagating this
1557
+ // callback back to the surface. We can evaluate whether to retry when
1558
+ // recv_trailing_metadata comes back.
1559
+ if (GPR_UNLIKELY((call_attempt->recv_message_ == nullptr ||
1560
+ error != GRPC_ERROR_NONE) &&
1561
+ !call_attempt->completed_recv_trailing_metadata_)) {
1562
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1563
+ gpr_log(GPR_INFO,
1564
+ "chand=%p calld=%p attempt=%p: deferring recv_message_ready "
1565
+ "(nullptr message and recv_trailing_metadata pending)",
1566
+ calld->chand_, calld, call_attempt);
1567
+ }
1568
+ call_attempt->recv_message_ready_deferred_batch_ = std::move(batch_data);
1569
+ call_attempt->recv_message_error_ = GRPC_ERROR_REF(error);
1570
+ CallCombinerClosureList closures;
1571
+ if (error != GRPC_ERROR_NONE) {
1572
+ call_attempt->MaybeAddBatchForCancelOp(GRPC_ERROR_REF(error),
1573
+ &closures);
1574
+ }
1575
+ if (!call_attempt->started_recv_trailing_metadata_) {
1576
+ // recv_trailing_metadata not yet started by application; start it
1577
+ // ourselves to get status.
1578
+ call_attempt->AddBatchForInternalRecvTrailingMetadata(&closures);
1579
+ }
1580
+ closures.RunClosures(calld->call_combiner_);
1581
+ return;
1582
+ }
1583
+ // Received a valid message, so commit the call.
1584
+ calld->RetryCommit(call_attempt);
1585
+ // If retry state is no longer needed, switch to fast path for
1586
+ // subsequent batches.
1587
+ call_attempt->MaybeSwitchToFastPath();
1588
+ }
1589
+ // Invoke the callback to return the result to the surface.
1590
+ CallCombinerClosureList closures;
1591
+ batch_data->MaybeAddClosureForRecvMessageCallback(GRPC_ERROR_REF(error),
1592
+ &closures);
1593
+ closures.RunClosures(calld->call_combiner_);
1594
+ }
1595
+
1596
+ //
1597
+ // recv_trailing_metadata handling
1598
+ //
1599
+
1600
+ namespace {
1601
+
1602
+ // Sets *status, *server_pushback, and *is_lb_drop based on md_batch
1603
+ // and error.
1604
+ void GetCallStatus(
1605
+ Timestamp deadline, grpc_metadata_batch* md_batch, grpc_error_handle error,
1606
+ grpc_status_code* status, absl::optional<Duration>* server_pushback,
1607
+ bool* is_lb_drop,
1608
+ absl::optional<GrpcStreamNetworkState::ValueType>* stream_network_state) {
1609
+ if (error != GRPC_ERROR_NONE) {
1610
+ grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
1611
+ intptr_t value = 0;
1612
+ if (grpc_error_get_int(error, GRPC_ERROR_INT_LB_POLICY_DROP, &value) &&
1613
+ value != 0) {
1614
+ *is_lb_drop = true;
1615
+ }
1616
+ } else {
1617
+ *status = *md_batch->get(GrpcStatusMetadata());
1618
+ }
1619
+ *server_pushback = md_batch->get(GrpcRetryPushbackMsMetadata());
1620
+ *stream_network_state = md_batch->get(GrpcStreamNetworkState());
1621
+ GRPC_ERROR_UNREF(error);
1622
+ }
1623
+
1624
+ } // namespace
1625
+
1626
+ void RetryFilter::CallData::CallAttempt::BatchData::
1627
+ MaybeAddClosureForRecvTrailingMetadataReady(
1628
+ grpc_error_handle error, CallCombinerClosureList* closures) {
1629
+ auto* calld = call_attempt_->calld_;
1630
+ // Find pending batch.
1631
+ PendingBatch* pending = calld->PendingBatchFind(
1632
+ "invoking recv_trailing_metadata_ready for",
1633
+ [](grpc_transport_stream_op_batch* batch) {
1634
+ return batch->recv_trailing_metadata &&
1635
+ batch->payload->recv_trailing_metadata
1636
+ .recv_trailing_metadata_ready != nullptr;
1637
+ });
1638
+ // If we generated the recv_trailing_metadata op internally via
1639
+ // AddBatchForInternalRecvTrailingMetadata(), then there will be no
1640
+ // pending batch.
1641
+ if (pending == nullptr) {
1642
+ call_attempt_->recv_trailing_metadata_error_ = error;
1643
+ return;
1644
+ }
1645
+ // Copy transport stats to be delivered up to the surface.
1646
+ grpc_transport_move_stats(
1647
+ &call_attempt_->collect_stats_,
1648
+ pending->batch->payload->recv_trailing_metadata.collect_stats);
1649
+ // Return metadata.
1650
+ *pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata =
1651
+ std::move(call_attempt_->recv_trailing_metadata_);
1652
+ // Add closure.
1653
+ closures->Add(pending->batch->payload->recv_trailing_metadata
1654
+ .recv_trailing_metadata_ready,
1655
+ error, "recv_trailing_metadata_ready for pending batch");
1656
+ // Update bookkeeping.
1657
+ pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1658
+ nullptr;
1659
+ calld->MaybeClearPendingBatch(pending);
1660
+ }
1661
+
1662
+ void RetryFilter::CallData::CallAttempt::BatchData::
1663
+ AddClosuresForDeferredCompletionCallbacks(
1664
+ CallCombinerClosureList* closures) {
1665
+ // Add closure for deferred recv_initial_metadata_ready.
1666
+ if (GPR_UNLIKELY(call_attempt_->recv_initial_metadata_ready_deferred_batch_ !=
1667
+ nullptr)) {
1668
+ MaybeAddClosureForRecvInitialMetadataCallback(
1669
+ call_attempt_->recv_initial_metadata_error_, closures);
1670
+ call_attempt_->recv_initial_metadata_ready_deferred_batch_.reset(
1671
+ DEBUG_LOCATION, "resuming deferred recv_initial_metadata_ready");
1672
+ call_attempt_->recv_initial_metadata_error_ = GRPC_ERROR_NONE;
1673
+ }
1674
+ // Add closure for deferred recv_message_ready.
1675
+ if (GPR_UNLIKELY(call_attempt_->recv_message_ready_deferred_batch_ !=
1676
+ nullptr)) {
1677
+ MaybeAddClosureForRecvMessageCallback(call_attempt_->recv_message_error_,
1678
+ closures);
1679
+ call_attempt_->recv_message_ready_deferred_batch_.reset(
1680
+ DEBUG_LOCATION, "resuming deferred recv_message_ready");
1681
+ call_attempt_->recv_message_error_ = GRPC_ERROR_NONE;
1682
+ }
1683
+ // Add closures for deferred on_complete callbacks.
1684
+ for (auto& on_complete_deferred_batch :
1685
+ call_attempt_->on_complete_deferred_batches_) {
1686
+ closures->Add(&on_complete_deferred_batch.batch->on_complete_,
1687
+ on_complete_deferred_batch.error, "resuming on_complete");
1688
+ on_complete_deferred_batch.batch.release();
1689
+ }
1690
+ call_attempt_->on_complete_deferred_batches_.clear();
1691
+ }
1692
+
1693
+ void RetryFilter::CallData::CallAttempt::BatchData::
1694
+ AddClosuresToFailUnstartedPendingBatches(
1695
+ grpc_error_handle error, CallCombinerClosureList* closures) {
1696
+ auto* calld = call_attempt_->calld_;
1697
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(calld->pending_batches_); ++i) {
1698
+ PendingBatch* pending = &calld->pending_batches_[i];
1699
+ if (pending->batch == nullptr) continue;
1700
+ if (call_attempt_->PendingBatchContainsUnstartedSendOps(pending)) {
1701
+ closures->Add(pending->batch->on_complete, GRPC_ERROR_REF(error),
1702
+ "failing on_complete for pending batch");
1703
+ pending->batch->on_complete = nullptr;
1704
+ calld->MaybeClearPendingBatch(pending);
1705
+ }
1706
+ }
1707
+ GRPC_ERROR_UNREF(error);
1708
+ }
1709
+
1710
+ void RetryFilter::CallData::CallAttempt::BatchData::RunClosuresForCompletedCall(
1711
+ grpc_error_handle error) {
1712
+ // Construct list of closures to execute.
1713
+ CallCombinerClosureList closures;
1714
+ // First, add closure for recv_trailing_metadata_ready.
1715
+ MaybeAddClosureForRecvTrailingMetadataReady(GRPC_ERROR_REF(error), &closures);
1716
+ // If there are deferred batch completion callbacks, add them to closures.
1717
+ AddClosuresForDeferredCompletionCallbacks(&closures);
1718
+ // Add closures to fail any pending batches that have not yet been started.
1719
+ AddClosuresToFailUnstartedPendingBatches(GRPC_ERROR_REF(error), &closures);
1720
+ // Schedule all of the closures identified above.
1721
+ // Note: This will release the call combiner.
1722
+ closures.RunClosures(call_attempt_->calld_->call_combiner_);
1723
+ GRPC_ERROR_UNREF(error);
1724
+ }
1725
+
1726
+ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1727
+ void* arg, grpc_error_handle error) {
1728
+ // Add a ref to the outer call stack. This works around a TSAN reported
1729
+ // failure that we do not understand, but since we expect the lifetime of
1730
+ // this code to be relatively short we think it's OK to work around for now.
1731
+ // TSAN failure:
1732
+ // https://source.cloud.google.com/results/invocations/5b122974-4977-4862-beb1-dc1af9fbbd1d/targets/%2F%2Ftest%2Fcore%2Fend2end:h2_census_test@max_concurrent_streams@poller%3Dpoll/log
1733
+ RefCountedPtr<grpc_call_stack> owning_call_stack =
1734
+ static_cast<BatchData*>(arg)->call_attempt_->calld_->owning_call_->Ref();
1735
+ RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1736
+ CallAttempt* call_attempt = batch_data->call_attempt_.get();
1737
+ CallData* calld = call_attempt->calld_;
1738
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1739
+ gpr_log(GPR_INFO,
1740
+ "chand=%p calld=%p attempt=%p batch_data=%p: "
1741
+ "got recv_trailing_metadata_ready, error=%s",
1742
+ calld->chand_, calld, call_attempt, batch_data.get(),
1743
+ grpc_error_std_string(error).c_str());
1744
+ }
1745
+ call_attempt->completed_recv_trailing_metadata_ = true;
1746
+ // If this attempt has been abandoned, then we're not going to use the
1747
+ // result of this recv_trailing_metadata op, so do nothing.
1748
+ if (call_attempt->abandoned_) {
1749
+ GRPC_CALL_COMBINER_STOP(
1750
+ calld->call_combiner_,
1751
+ "recv_trailing_metadata_ready for abandoned attempt");
1752
+ return;
1753
+ }
1754
+ // Cancel per-attempt recv timer, if any.
1755
+ call_attempt->MaybeCancelPerAttemptRecvTimer();
1756
+ // Get the call's status and check for server pushback metadata.
1757
+ grpc_status_code status = GRPC_STATUS_OK;
1758
+ absl::optional<Duration> server_pushback;
1759
+ bool is_lb_drop = false;
1760
+ absl::optional<GrpcStreamNetworkState::ValueType> stream_network_state;
1761
+ grpc_metadata_batch* md_batch =
1762
+ batch_data->batch_.payload->recv_trailing_metadata.recv_trailing_metadata;
1763
+ GetCallStatus(calld->deadline_, md_batch, GRPC_ERROR_REF(error), &status,
1764
+ &server_pushback, &is_lb_drop, &stream_network_state);
1765
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1766
+ gpr_log(GPR_INFO,
1767
+ "chand=%p calld=%p attempt=%p: call finished, status=%s "
1768
+ "server_pushback=%s is_lb_drop=%d stream_network_state=%s",
1769
+ calld->chand_, calld, call_attempt,
1770
+ grpc_status_code_to_string(status),
1771
+ server_pushback.has_value() ? server_pushback->ToString().c_str()
1772
+ : "N/A",
1773
+ is_lb_drop,
1774
+ stream_network_state.has_value()
1775
+ ? absl::StrCat(*stream_network_state).c_str()
1776
+ : "N/A");
1777
+ }
1778
+ // Check if we should retry.
1779
+ if (!is_lb_drop) { // Never retry on LB drops.
1780
+ enum { kNoRetry, kTransparentRetry, kConfigurableRetry } retry = kNoRetry;
1781
+ // Handle transparent retries.
1782
+ if (stream_network_state.has_value() && !calld->retry_committed_) {
1783
+ // If not sent on wire, then always retry.
1784
+ // If sent on wire but not seen by server, retry exactly once.
1785
+ if (*stream_network_state == GrpcStreamNetworkState::kNotSentOnWire) {
1786
+ retry = kTransparentRetry;
1787
+ } else if (*stream_network_state ==
1788
+ GrpcStreamNetworkState::kNotSeenByServer &&
1789
+ !calld->sent_transparent_retry_not_seen_by_server_) {
1790
+ calld->sent_transparent_retry_not_seen_by_server_ = true;
1791
+ retry = kTransparentRetry;
1792
+ }
1793
+ }
1794
+ // If not transparently retrying, check for configurable retry.
1795
+ if (retry == kNoRetry &&
1796
+ call_attempt->ShouldRetry(status, server_pushback)) {
1797
+ retry = kConfigurableRetry;
1798
+ }
1799
+ // If we're retrying, do so.
1800
+ if (retry != kNoRetry) {
1801
+ CallCombinerClosureList closures;
1802
+ // Cancel call attempt.
1803
+ call_attempt->MaybeAddBatchForCancelOp(
1804
+ error == GRPC_ERROR_NONE
1805
+ ? grpc_error_set_int(
1806
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("call attempt failed"),
1807
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED)
1808
+ : GRPC_ERROR_REF(error),
1809
+ &closures);
1810
+ // For transparent retries, add a closure to immediately start a new
1811
+ // call attempt.
1812
+ // For configurable retries, start retry timer.
1813
+ if (retry == kTransparentRetry) {
1814
+ calld->AddClosureToStartTransparentRetry(&closures);
1815
+ } else {
1816
+ calld->StartRetryTimer(server_pushback);
1817
+ }
1818
+ // Record that this attempt has been abandoned.
1819
+ call_attempt->Abandon();
1820
+ // Yields call combiner.
1821
+ closures.RunClosures(calld->call_combiner_);
1822
+ return;
1823
+ }
1824
+ }
1825
+ // Not retrying, so commit the call.
1826
+ calld->RetryCommit(call_attempt);
1827
+ // If retry state is no longer needed, switch to fast path for
1828
+ // subsequent batches.
1829
+ call_attempt->MaybeSwitchToFastPath();
1830
+ // Run any necessary closures.
1831
+ batch_data->RunClosuresForCompletedCall(GRPC_ERROR_REF(error));
1832
+ }
1833
+
1834
+ //
1835
+ // on_complete callback handling
1836
+ //
1837
+
1838
+ void RetryFilter::CallData::CallAttempt::BatchData::
1839
+ AddClosuresForCompletedPendingBatch(grpc_error_handle error,
1840
+ CallCombinerClosureList* closures) {
1841
+ auto* calld = call_attempt_->calld_;
1842
+ PendingBatch* pending = calld->PendingBatchFind(
1843
+ "completed", [this](grpc_transport_stream_op_batch* batch) {
1844
+ // Match the pending batch with the same set of send ops as the
1845
+ // batch we've just completed.
1846
+ return batch->on_complete != nullptr &&
1847
+ batch_.send_initial_metadata == batch->send_initial_metadata &&
1848
+ batch_.send_message == batch->send_message &&
1849
+ batch_.send_trailing_metadata == batch->send_trailing_metadata;
1850
+ });
1851
+ // If batch_data is a replay batch, then there will be no pending
1852
+ // batch to complete.
1853
+ if (pending == nullptr) {
1854
+ GRPC_ERROR_UNREF(error);
1855
+ return;
1856
+ }
1857
+ // Propagate payload.
1858
+ if (batch_.send_message) {
1859
+ pending->batch->payload->send_message.stream_write_closed =
1860
+ batch_.payload->send_message.stream_write_closed;
1861
+ }
1862
+ // Add closure.
1863
+ closures->Add(pending->batch->on_complete, error,
1864
+ "on_complete for pending batch");
1865
+ pending->batch->on_complete = nullptr;
1866
+ calld->MaybeClearPendingBatch(pending);
1867
+ }
1868
+
1869
+ void RetryFilter::CallData::CallAttempt::BatchData::
1870
+ AddClosuresForReplayOrPendingSendOps(CallCombinerClosureList* closures) {
1871
+ auto* calld = call_attempt_->calld_;
1872
+ bool have_pending_send_ops = call_attempt_->HaveSendOpsToReplay();
1873
+ // We don't check send_initial_metadata here, because that op will always
1874
+ // be started as soon as it is received from the surface, so it will
1875
+ // never need to be started at this point.
1876
+ if (!have_pending_send_ops) {
1877
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(calld->pending_batches_); ++i) {
1878
+ PendingBatch* pending = &calld->pending_batches_[i];
1879
+ grpc_transport_stream_op_batch* batch = pending->batch;
1880
+ if (batch == nullptr || pending->send_ops_cached) continue;
1881
+ if (batch->send_message || batch->send_trailing_metadata) {
1882
+ have_pending_send_ops = true;
1883
+ break;
1884
+ }
1885
+ }
1886
+ }
1887
+ if (have_pending_send_ops) {
1888
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1889
+ gpr_log(GPR_INFO,
1890
+ "chand=%p calld=%p attempt=%p: starting next batch for pending "
1891
+ "send op(s)",
1892
+ calld->chand_, calld, call_attempt_.get());
1893
+ }
1894
+ call_attempt_->AddRetriableBatches(closures);
1895
+ }
1896
+ }
1897
+
1898
+ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
1899
+ void* arg, grpc_error_handle error) {
1900
+ RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1901
+ CallAttempt* call_attempt = batch_data->call_attempt_.get();
1902
+ CallData* calld = call_attempt->calld_;
1903
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1904
+ gpr_log(GPR_INFO,
1905
+ "chand=%p calld=%p attempt=%p batch_data=%p: "
1906
+ "got on_complete, error=%s, batch=%s",
1907
+ calld->chand_, calld, call_attempt, batch_data.get(),
1908
+ grpc_error_std_string(error).c_str(),
1909
+ grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
1910
+ }
1911
+ // If this attempt has been abandoned, then we're not going to propagate
1912
+ // the completion of this batch, so do nothing.
1913
+ if (call_attempt->abandoned_) {
1914
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1915
+ "on_complete for abandoned attempt");
1916
+ return;
1917
+ }
1918
+ // If we got an error and have not yet gotten the
1919
+ // recv_trailing_metadata_ready callback, then defer propagating this
1920
+ // callback back to the surface. We can evaluate whether to retry when
1921
+ // recv_trailing_metadata comes back.
1922
+ if (GPR_UNLIKELY(!calld->retry_committed_ && error != GRPC_ERROR_NONE &&
1923
+ !call_attempt->completed_recv_trailing_metadata_)) {
1924
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1925
+ gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: deferring on_complete",
1926
+ calld->chand_, calld, call_attempt);
1927
+ }
1928
+ call_attempt->on_complete_deferred_batches_.emplace_back(
1929
+ std::move(batch_data), GRPC_ERROR_REF(error));
1930
+ CallCombinerClosureList closures;
1931
+ call_attempt->MaybeAddBatchForCancelOp(GRPC_ERROR_REF(error), &closures);
1932
+ if (!call_attempt->started_recv_trailing_metadata_) {
1933
+ // recv_trailing_metadata not yet started by application; start it
1934
+ // ourselves to get status.
1935
+ call_attempt->AddBatchForInternalRecvTrailingMetadata(&closures);
1936
+ }
1937
+ closures.RunClosures(calld->call_combiner_);
1938
+ return;
1939
+ }
1940
+ // Update bookkeeping in call_attempt.
1941
+ if (batch_data->batch_.send_initial_metadata) {
1942
+ call_attempt->completed_send_initial_metadata_ = true;
1943
+ }
1944
+ if (batch_data->batch_.send_message) {
1945
+ ++call_attempt->completed_send_message_count_;
1946
+ }
1947
+ if (batch_data->batch_.send_trailing_metadata) {
1948
+ call_attempt->completed_send_trailing_metadata_ = true;
1949
+ }
1950
+ // If the call is committed, free cached data for send ops that we've just
1951
+ // completed.
1952
+ if (calld->retry_committed_) {
1953
+ batch_data->FreeCachedSendOpDataForCompletedBatch();
1954
+ }
1955
+ // Construct list of closures to execute.
1956
+ CallCombinerClosureList closures;
1957
+ // Add closure for the completed pending batch, if any.
1958
+ batch_data->AddClosuresForCompletedPendingBatch(GRPC_ERROR_REF(error),
1959
+ &closures);
1960
+ // If needed, add a callback to start any replay or pending send ops on
1961
+ // the LB call.
1962
+ if (!call_attempt->completed_recv_trailing_metadata_) {
1963
+ batch_data->AddClosuresForReplayOrPendingSendOps(&closures);
1964
+ }
1965
+ // If retry state is no longer needed (i.e., we're committed and there
1966
+ // are no more send ops to replay), switch to fast path for subsequent
1967
+ // batches.
1968
+ call_attempt->MaybeSwitchToFastPath();
1969
+ // Schedule all of the closures identified above.
1970
+ // Note: This yields the call combiner.
1971
+ closures.RunClosures(calld->call_combiner_);
1972
+ }
1973
+
1974
+ void RetryFilter::CallData::CallAttempt::BatchData::OnCompleteForCancelOp(
1975
+ void* arg, grpc_error_handle error) {
1976
+ RefCountedPtr<BatchData> batch_data(static_cast<BatchData*>(arg));
1977
+ CallAttempt* call_attempt = batch_data->call_attempt_.get();
1978
+ CallData* calld = call_attempt->calld_;
1979
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1980
+ gpr_log(GPR_INFO,
1981
+ "chand=%p calld=%p attempt=%p batch_data=%p: "
1982
+ "got on_complete for cancel_stream batch, error=%s, batch=%s",
1983
+ calld->chand_, calld, call_attempt, batch_data.get(),
1984
+ grpc_error_std_string(error).c_str(),
1985
+ grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
1986
+ }
1987
+ GRPC_CALL_COMBINER_STOP(
1988
+ calld->call_combiner_,
1989
+ "on_complete for internally generated cancel_stream op");
1990
+ }
1991
+
1992
+ //
1993
+ // retriable batch construction
1994
+ //
1995
+
1996
+ void RetryFilter::CallData::CallAttempt::BatchData::
1997
+ AddRetriableSendInitialMetadataOp() {
1998
+ auto* calld = call_attempt_->calld_;
1999
+ // We need to make a copy of the metadata batch for each attempt, since
2000
+ // the filters in the subchannel stack may modify this batch, and we don't
2001
+ // want those modifications to be passed forward to subsequent attempts.
2002
+ //
2003
+ // If we've already completed one or more attempts, add the
2004
+ // grpc-retry-attempts header.
2005
+ call_attempt_->send_initial_metadata_ = calld->send_initial_metadata_.Copy();
2006
+ if (GPR_UNLIKELY(calld->num_attempts_completed_ > 0)) {
2007
+ call_attempt_->send_initial_metadata_.Set(GrpcPreviousRpcAttemptsMetadata(),
2008
+ calld->num_attempts_completed_);
2009
+ } else {
2010
+ call_attempt_->send_initial_metadata_.Remove(
2011
+ GrpcPreviousRpcAttemptsMetadata());
2012
+ }
2013
+ call_attempt_->started_send_initial_metadata_ = true;
2014
+ batch_.send_initial_metadata = true;
2015
+ batch_.payload->send_initial_metadata.send_initial_metadata =
2016
+ &call_attempt_->send_initial_metadata_;
2017
+ batch_.payload->send_initial_metadata.send_initial_metadata_flags =
2018
+ calld->send_initial_metadata_flags_;
2019
+ batch_.payload->send_initial_metadata.peer_string = calld->peer_string_;
2020
+ }
2021
+
2022
+ void RetryFilter::CallData::CallAttempt::BatchData::
2023
+ AddRetriableSendMessageOp() {
2024
+ auto* calld = call_attempt_->calld_;
2025
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2026
+ gpr_log(
2027
+ GPR_INFO,
2028
+ "chand=%p calld=%p attempt=%p: starting calld->send_messages[%" PRIuPTR
2029
+ "]",
2030
+ calld->chand_, calld, call_attempt_.get(),
2031
+ call_attempt_->started_send_message_count_);
2032
+ }
2033
+ ByteStreamCache* cache =
2034
+ calld->send_messages_[call_attempt_->started_send_message_count_];
2035
+ ++call_attempt_->started_send_message_count_;
2036
+ call_attempt_->send_message_.Init(cache);
2037
+ batch_.send_message = true;
2038
+ batch_.payload->send_message.send_message.reset(
2039
+ call_attempt_->send_message_.get());
2040
+ }
2041
+
2042
+ void RetryFilter::CallData::CallAttempt::BatchData::
2043
+ AddRetriableSendTrailingMetadataOp() {
2044
+ auto* calld = call_attempt_->calld_;
2045
+ // We need to make a copy of the metadata batch for each attempt, since
2046
+ // the filters in the subchannel stack may modify this batch, and we don't
2047
+ // want those modifications to be passed forward to subsequent attempts.
2048
+ call_attempt_->send_trailing_metadata_ =
2049
+ calld->send_trailing_metadata_.Copy();
2050
+ call_attempt_->started_send_trailing_metadata_ = true;
2051
+ batch_.send_trailing_metadata = true;
2052
+ batch_.payload->send_trailing_metadata.send_trailing_metadata =
2053
+ &call_attempt_->send_trailing_metadata_;
2054
+ }
2055
+
2056
+ void RetryFilter::CallData::CallAttempt::BatchData::
2057
+ AddRetriableRecvInitialMetadataOp() {
2058
+ call_attempt_->started_recv_initial_metadata_ = true;
2059
+ batch_.recv_initial_metadata = true;
2060
+ call_attempt_->recv_initial_metadata_.Clear();
2061
+ batch_.payload->recv_initial_metadata.recv_initial_metadata =
2062
+ &call_attempt_->recv_initial_metadata_;
2063
+ batch_.payload->recv_initial_metadata.trailing_metadata_available =
2064
+ &call_attempt_->trailing_metadata_available_;
2065
+ GRPC_CLOSURE_INIT(&call_attempt_->recv_initial_metadata_ready_,
2066
+ RecvInitialMetadataReady, this, grpc_schedule_on_exec_ctx);
2067
+ batch_.payload->recv_initial_metadata.recv_initial_metadata_ready =
2068
+ &call_attempt_->recv_initial_metadata_ready_;
2069
+ }
2070
+
2071
+ void RetryFilter::CallData::CallAttempt::BatchData::
2072
+ AddRetriableRecvMessageOp() {
2073
+ ++call_attempt_->started_recv_message_count_;
2074
+ batch_.recv_message = true;
2075
+ batch_.payload->recv_message.recv_message = &call_attempt_->recv_message_;
2076
+ batch_.payload->recv_message.call_failed_before_recv_message = nullptr;
2077
+ GRPC_CLOSURE_INIT(&call_attempt_->recv_message_ready_, RecvMessageReady, this,
2078
+ grpc_schedule_on_exec_ctx);
2079
+ batch_.payload->recv_message.recv_message_ready =
2080
+ &call_attempt_->recv_message_ready_;
2081
+ }
2082
+
2083
+ void RetryFilter::CallData::CallAttempt::BatchData::
2084
+ AddRetriableRecvTrailingMetadataOp() {
2085
+ call_attempt_->started_recv_trailing_metadata_ = true;
2086
+ batch_.recv_trailing_metadata = true;
2087
+ call_attempt_->recv_trailing_metadata_.Clear();
2088
+ batch_.payload->recv_trailing_metadata.recv_trailing_metadata =
2089
+ &call_attempt_->recv_trailing_metadata_;
2090
+ batch_.payload->recv_trailing_metadata.collect_stats =
2091
+ &call_attempt_->collect_stats_;
2092
+ GRPC_CLOSURE_INIT(&call_attempt_->recv_trailing_metadata_ready_,
2093
+ RecvTrailingMetadataReady, this, grpc_schedule_on_exec_ctx);
2094
+ batch_.payload->recv_trailing_metadata.recv_trailing_metadata_ready =
2095
+ &call_attempt_->recv_trailing_metadata_ready_;
2096
+ }
2097
+
2098
+ void RetryFilter::CallData::CallAttempt::BatchData::AddCancelStreamOp(
2099
+ grpc_error_handle error) {
2100
+ batch_.cancel_stream = true;
2101
+ batch_.payload->cancel_stream.cancel_error = error;
2102
+ // Override on_complete callback.
2103
+ GRPC_CLOSURE_INIT(&on_complete_, OnCompleteForCancelOp, this, nullptr);
2104
+ }
2105
+
2106
+ //
2107
+ // CallData vtable functions
2108
+ //
2109
+
2110
+ grpc_error_handle RetryFilter::CallData::Init(
2111
+ grpc_call_element* elem, const grpc_call_element_args* args) {
2112
+ auto* chand = static_cast<RetryFilter*>(elem->channel_data);
2113
+ new (elem->call_data) CallData(chand, *args);
2114
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2115
+ gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand,
2116
+ elem->call_data);
2117
+ }
2118
+ return GRPC_ERROR_NONE;
2119
+ }
2120
+
2121
+ void RetryFilter::CallData::Destroy(grpc_call_element* elem,
2122
+ const grpc_call_final_info* /*final_info*/,
2123
+ grpc_closure* then_schedule_closure) {
2124
+ auto* calld = static_cast<CallData*>(elem->call_data);
2125
+ // Save our ref to the CallStackDestructionBarrier until after our
2126
+ // dtor is invoked.
2127
+ RefCountedPtr<CallStackDestructionBarrier> call_stack_destruction_barrier =
2128
+ std::move(calld->call_stack_destruction_barrier_);
2129
+ calld->~CallData();
2130
+ // Now set the callback in the CallStackDestructionBarrier object,
2131
+ // right before we release our ref to it (implicitly upon returning).
2132
+ // The callback will be invoked when the CallStackDestructionBarrier
2133
+ // is destroyed.
2134
+ call_stack_destruction_barrier->set_on_call_stack_destruction(
2135
+ then_schedule_closure);
2136
+ }
2137
+
2138
+ void RetryFilter::CallData::StartTransportStreamOpBatch(
2139
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
2140
+ auto* calld = static_cast<CallData*>(elem->call_data);
2141
+ calld->StartTransportStreamOpBatch(batch);
2142
+ }
2143
+
2144
+ void RetryFilter::CallData::SetPollent(grpc_call_element* elem,
2145
+ grpc_polling_entity* pollent) {
2146
+ auto* calld = static_cast<CallData*>(elem->call_data);
2147
+ calld->pollent_ = pollent;
2148
+ }
2149
+
2150
+ //
2151
+ // CallData implementation
2152
+ //
2153
+
2154
+ const RetryMethodConfig* RetryFilter::GetRetryPolicy(
2155
+ const grpc_call_context_element* context) {
2156
+ if (context == nullptr) return nullptr;
2157
+ auto* svc_cfg_call_data = static_cast<ServiceConfigCallData*>(
2158
+ context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2159
+ if (svc_cfg_call_data == nullptr) return nullptr;
2160
+ return static_cast<const RetryMethodConfig*>(
2161
+ svc_cfg_call_data->GetMethodParsedConfig(service_config_parser_index_));
2162
+ }
2163
+
2164
+ RetryFilter::CallData::CallData(RetryFilter* chand,
2165
+ const grpc_call_element_args& args)
2166
+ : chand_(chand),
2167
+ retry_throttle_data_(chand->retry_throttle_data_),
2168
+ retry_policy_(chand->GetRetryPolicy(args.context)),
2169
+ retry_backoff_(
2170
+ BackOff::Options()
2171
+ .set_initial_backoff(retry_policy_ == nullptr
2172
+ ? Duration::Zero()
2173
+ : retry_policy_->initial_backoff())
2174
+ .set_multiplier(retry_policy_ == nullptr
2175
+ ? 0
2176
+ : retry_policy_->backoff_multiplier())
2177
+ .set_jitter(RETRY_BACKOFF_JITTER)
2178
+ .set_max_backoff(retry_policy_ == nullptr
2179
+ ? Duration::Zero()
2180
+ : retry_policy_->max_backoff())),
2181
+ path_(grpc_slice_ref_internal(args.path)),
2182
+ deadline_(args.deadline),
2183
+ arena_(args.arena),
2184
+ owning_call_(args.call_stack),
2185
+ call_combiner_(args.call_combiner),
2186
+ call_context_(args.context),
2187
+ call_stack_destruction_barrier_(
2188
+ arena_->New<CallStackDestructionBarrier>()),
2189
+ pending_send_initial_metadata_(false),
2190
+ pending_send_message_(false),
2191
+ pending_send_trailing_metadata_(false),
2192
+ retry_committed_(false),
2193
+ retry_timer_pending_(false),
2194
+ retry_codepath_started_(false),
2195
+ sent_transparent_retry_not_seen_by_server_(false) {}
2196
+
2197
+ RetryFilter::CallData::~CallData() {
2198
+ FreeAllCachedSendOpData();
2199
+ grpc_slice_unref_internal(path_);
2200
+ // Make sure there are no remaining pending batches.
2201
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2202
+ GPR_ASSERT(pending_batches_[i].batch == nullptr);
2203
+ }
2204
+ GRPC_ERROR_UNREF(cancelled_from_surface_);
2205
+ }
2206
+
2207
+ void RetryFilter::CallData::StartTransportStreamOpBatch(
2208
+ grpc_transport_stream_op_batch* batch) {
2209
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace) &&
2210
+ !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2211
+ gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from surface: %s",
2212
+ chand_, this, grpc_transport_stream_op_batch_string(batch).c_str());
2213
+ }
2214
+ // If we have an LB call, delegate to the LB call.
2215
+ if (committed_call_ != nullptr) {
2216
+ // Note: This will release the call combiner.
2217
+ committed_call_->StartTransportStreamOpBatch(batch);
2218
+ return;
2219
+ }
2220
+ // If we were previously cancelled from the surface, fail this
2221
+ // batch immediately.
2222
+ if (cancelled_from_surface_ != GRPC_ERROR_NONE) {
2223
+ // Note: This will release the call combiner.
2224
+ grpc_transport_stream_op_batch_finish_with_failure(
2225
+ batch, GRPC_ERROR_REF(cancelled_from_surface_), call_combiner_);
2226
+ return;
2227
+ }
2228
+ // Handle cancellation.
2229
+ if (GPR_UNLIKELY(batch->cancel_stream)) {
2230
+ // Save cancel_error in case subsequent batches are started.
2231
+ GRPC_ERROR_UNREF(cancelled_from_surface_);
2232
+ cancelled_from_surface_ =
2233
+ GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2234
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2235
+ gpr_log(GPR_INFO, "chand=%p calld=%p: cancelled from surface: %s", chand_,
2236
+ this, grpc_error_std_string(cancelled_from_surface_).c_str());
2237
+ }
2238
+ // Fail any pending batches.
2239
+ PendingBatchesFail(GRPC_ERROR_REF(cancelled_from_surface_));
2240
+ // If we have a current call attempt, commit the call, then send
2241
+ // the cancellation down to that attempt. When the call fails, it
2242
+ // will not be retried, because we have committed it here.
2243
+ if (call_attempt_ != nullptr) {
2244
+ RetryCommit(call_attempt_.get());
2245
+ // TODO(roth): When implementing hedging, this will get more
2246
+ // complex, because instead of just passing the batch down to a
2247
+ // single call attempt, we'll need to cancel multiple call
2248
+ // attempts and wait for the cancellation on_complete from each call
2249
+ // attempt before we propagate the on_complete from this batch
2250
+ // back to the surface.
2251
+ // Note: This will release the call combiner.
2252
+ call_attempt_->CancelFromSurface(batch);
2253
+ return;
2254
+ }
2255
+ // Cancel retry timer if needed.
2256
+ if (retry_timer_pending_) {
2257
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2258
+ gpr_log(GPR_INFO, "chand=%p calld=%p: cancelling retry timer", chand_,
2259
+ this);
2260
+ }
2261
+ retry_timer_pending_ = false; // Lame timer callback.
2262
+ grpc_timer_cancel(&retry_timer_);
2263
+ FreeAllCachedSendOpData();
2264
+ }
2265
+ // We have no call attempt, so there's nowhere to send the cancellation
2266
+ // batch. Return it back to the surface immediately.
2267
+ // Note: This will release the call combiner.
2268
+ grpc_transport_stream_op_batch_finish_with_failure(
2269
+ batch, GRPC_ERROR_REF(cancelled_from_surface_), call_combiner_);
2270
+ return;
2271
+ }
2272
+ // Add the batch to the pending list.
2273
+ PendingBatch* pending = PendingBatchesAdd(batch);
2274
+ // If the timer is pending, yield the call combiner and wait for it to
2275
+ // run, since we don't want to start another call attempt until it does.
2276
+ if (retry_timer_pending_) {
2277
+ GRPC_CALL_COMBINER_STOP(call_combiner_,
2278
+ "added pending batch while retry timer pending");
2279
+ return;
2280
+ }
2281
+ // If we do not yet have a call attempt, create one.
2282
+ if (call_attempt_ == nullptr) {
2283
+ // If this is the first batch and retries are already committed
2284
+ // (e.g., if this batch put the call above the buffer size limit), then
2285
+ // immediately create an LB call and delegate the batch to it. This
2286
+ // avoids the overhead of unnecessarily allocating a CallAttempt
2287
+ // object or caching any of the send op data.
2288
+ // Note that we would ideally like to do this also on subsequent
2289
+ // attempts (e.g., if a batch puts the call above the buffer size
2290
+ // limit since the last attempt was complete), but in practice that's
2291
+ // not really worthwhile, because we will almost always have cached and
2292
+ // completed at least the send_initial_metadata op on the previous
2293
+ // attempt, which means that we'd need special logic to replay the
2294
+ // batch anyway, which is exactly what the CallAttempt object provides.
2295
+ // We also skip this optimization if perAttemptRecvTimeout is set in the
2296
+ // retry policy, because we need the code in CallAttempt to handle
2297
+ // the associated timer.
2298
+ if (!retry_codepath_started_ && retry_committed_ &&
2299
+ (retry_policy_ == nullptr ||
2300
+ !retry_policy_->per_attempt_recv_timeout().has_value())) {
2301
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2302
+ gpr_log(GPR_INFO,
2303
+ "chand=%p calld=%p: retry committed before first attempt; "
2304
+ "creating LB call",
2305
+ chand_, this);
2306
+ }
2307
+ PendingBatchClear(pending);
2308
+ auto* service_config_call_data =
2309
+ static_cast<ClientChannelServiceConfigCallData*>(
2310
+ call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2311
+ committed_call_ = CreateLoadBalancedCall(
2312
+ service_config_call_data->call_dispatch_controller(),
2313
+ /*is_transparent_retry=*/false);
2314
+ committed_call_->StartTransportStreamOpBatch(batch);
2315
+ return;
2316
+ }
2317
+ // Otherwise, create a call attempt.
2318
+ // The attempt will automatically start any necessary replays or
2319
+ // pending batches.
2320
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2321
+ gpr_log(GPR_INFO, "chand=%p calld=%p: creating call attempt", chand_,
2322
+ this);
2323
+ }
2324
+ retry_codepath_started_ = true;
2325
+ CreateCallAttempt(/*is_transparent_retry=*/false);
2326
+ return;
2327
+ }
2328
+ // Send batches to call attempt.
2329
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2330
+ gpr_log(GPR_INFO, "chand=%p calld=%p: starting batch on attempt=%p", chand_,
2331
+ this, call_attempt_.get());
2332
+ }
2333
+ call_attempt_->StartRetriableBatches();
2334
+ }
2335
+
2336
+ OrphanablePtr<ClientChannel::LoadBalancedCall>
2337
+ RetryFilter::CallData::CreateLoadBalancedCall(
2338
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
2339
+ bool is_transparent_retry) {
2340
+ grpc_call_element_args args = {owning_call_, nullptr, call_context_,
2341
+ path_, /*start_time=*/0, deadline_,
2342
+ arena_, call_combiner_};
2343
+ return chand_->client_channel_->CreateLoadBalancedCall(
2344
+ args, pollent_,
2345
+ // This callback holds a ref to the CallStackDestructionBarrier
2346
+ // object until the LB call is destroyed.
2347
+ call_stack_destruction_barrier_->MakeLbCallDestructionClosure(this),
2348
+ call_dispatch_controller, is_transparent_retry);
2349
+ }
2350
+
2351
+ void RetryFilter::CallData::CreateCallAttempt(bool is_transparent_retry) {
2352
+ call_attempt_ = MakeRefCounted<CallAttempt>(this, is_transparent_retry);
2353
+ call_attempt_->StartRetriableBatches();
2354
+ }
2355
+
2356
+ //
2357
+ // send op data caching
2358
+ //
2359
+
2360
+ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2361
+ if (pending->send_ops_cached) return;
2362
+ pending->send_ops_cached = true;
2363
+ grpc_transport_stream_op_batch* batch = pending->batch;
2364
+ // Save a copy of metadata for send_initial_metadata ops.
2365
+ if (batch->send_initial_metadata) {
2366
+ seen_send_initial_metadata_ = true;
2367
+ grpc_metadata_batch* send_initial_metadata =
2368
+ batch->payload->send_initial_metadata.send_initial_metadata;
2369
+ send_initial_metadata_ = send_initial_metadata->Copy();
2370
+ send_initial_metadata_flags_ =
2371
+ batch->payload->send_initial_metadata.send_initial_metadata_flags;
2372
+ peer_string_ = batch->payload->send_initial_metadata.peer_string;
2373
+ }
2374
+ // Set up cache for send_message ops.
2375
+ if (batch->send_message) {
2376
+ ByteStreamCache* cache = arena_->New<ByteStreamCache>(
2377
+ std::move(batch->payload->send_message.send_message));
2378
+ send_messages_.push_back(cache);
2379
+ }
2380
+ // Save metadata batch for send_trailing_metadata ops.
2381
+ if (batch->send_trailing_metadata) {
2382
+ seen_send_trailing_metadata_ = true;
2383
+ grpc_metadata_batch* send_trailing_metadata =
2384
+ batch->payload->send_trailing_metadata.send_trailing_metadata;
2385
+ send_trailing_metadata_ = send_trailing_metadata->Copy();
2386
+ }
2387
+ }
2388
+
2389
+ void RetryFilter::CallData::FreeCachedSendInitialMetadata() {
2390
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2391
+ gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_initial_metadata",
2392
+ chand_, this);
2393
+ }
2394
+ send_initial_metadata_.Clear();
2395
+ }
2396
+
2397
+ void RetryFilter::CallData::FreeCachedSendMessage(size_t idx) {
2398
+ if (send_messages_[idx] != nullptr) {
2399
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2400
+ gpr_log(GPR_INFO,
2401
+ "chand=%p calld=%p: destroying send_messages[%" PRIuPTR "]",
2402
+ chand_, this, idx);
2403
+ }
2404
+ send_messages_[idx]->Destroy();
2405
+ send_messages_[idx] = nullptr;
2406
+ }
2407
+ }
2408
+
2409
+ void RetryFilter::CallData::FreeCachedSendTrailingMetadata() {
2410
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2411
+ gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_trailing_metadata",
2412
+ chand_, this);
2413
+ }
2414
+ send_trailing_metadata_.Clear();
2415
+ }
2416
+
2417
+ void RetryFilter::CallData::FreeAllCachedSendOpData() {
2418
+ if (seen_send_initial_metadata_) {
2419
+ FreeCachedSendInitialMetadata();
2420
+ }
2421
+ for (size_t i = 0; i < send_messages_.size(); ++i) {
2422
+ FreeCachedSendMessage(i);
2423
+ }
2424
+ if (seen_send_trailing_metadata_) {
2425
+ FreeCachedSendTrailingMetadata();
2426
+ }
2427
+ }
2428
+
2429
+ //
2430
+ // pending_batches management
2431
+ //
2432
+
2433
+ size_t RetryFilter::CallData::GetBatchIndex(
2434
+ grpc_transport_stream_op_batch* batch) {
2435
+ if (batch->send_initial_metadata) return 0;
2436
+ if (batch->send_message) return 1;
2437
+ if (batch->send_trailing_metadata) return 2;
2438
+ if (batch->recv_initial_metadata) return 3;
2439
+ if (batch->recv_message) return 4;
2440
+ if (batch->recv_trailing_metadata) return 5;
2441
+ GPR_UNREACHABLE_CODE(return (size_t)-1);
2442
+ }
2443
+
2444
+ // This is called via the call combiner, so access to calld is synchronized.
2445
+ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchesAdd(
2446
+ grpc_transport_stream_op_batch* batch) {
2447
+ const size_t idx = GetBatchIndex(batch);
2448
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2449
+ gpr_log(GPR_INFO,
2450
+ "chand=%p calld=%p: adding pending batch at index %" PRIuPTR,
2451
+ chand_, this, idx);
2452
+ }
2453
+ PendingBatch* pending = &pending_batches_[idx];
2454
+ GPR_ASSERT(pending->batch == nullptr);
2455
+ pending->batch = batch;
2456
+ pending->send_ops_cached = false;
2457
+ // Update state in calld about pending batches.
2458
+ // Also check if the batch takes us over the retry buffer limit.
2459
+ // Note: We don't check the size of trailing metadata here, because
2460
+ // gRPC clients do not send trailing metadata.
2461
+ if (batch->send_initial_metadata) {
2462
+ pending_send_initial_metadata_ = true;
2463
+ bytes_buffered_for_retry_ += batch->payload->send_initial_metadata
2464
+ .send_initial_metadata->TransportSize();
2465
+ }
2466
+ if (batch->send_message) {
2467
+ pending_send_message_ = true;
2468
+ bytes_buffered_for_retry_ +=
2469
+ batch->payload->send_message.send_message->length();
2470
+ }
2471
+ if (batch->send_trailing_metadata) {
2472
+ pending_send_trailing_metadata_ = true;
2473
+ }
2474
+ // TODO(roth): When we implement hedging, if there are currently attempts
2475
+ // in flight, we will need to pick the one on which the max number of send
2476
+ // ops have already been sent, and we commit to that attempt.
2477
+ if (GPR_UNLIKELY(bytes_buffered_for_retry_ >
2478
+ chand_->per_rpc_retry_buffer_size_)) {
2479
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2480
+ gpr_log(GPR_INFO,
2481
+ "chand=%p calld=%p: exceeded retry buffer size, committing",
2482
+ chand_, this);
2483
+ }
2484
+ RetryCommit(call_attempt_.get());
2485
+ }
2486
+ return pending;
2487
+ }
2488
+
2489
+ void RetryFilter::CallData::PendingBatchClear(PendingBatch* pending) {
2490
+ if (pending->batch->send_initial_metadata) {
2491
+ pending_send_initial_metadata_ = false;
2492
+ }
2493
+ if (pending->batch->send_message) {
2494
+ pending_send_message_ = false;
2495
+ }
2496
+ if (pending->batch->send_trailing_metadata) {
2497
+ pending_send_trailing_metadata_ = false;
2498
+ }
2499
+ pending->batch = nullptr;
2500
+ }
2501
+
2502
+ void RetryFilter::CallData::MaybeClearPendingBatch(PendingBatch* pending) {
2503
+ grpc_transport_stream_op_batch* batch = pending->batch;
2504
+ // We clear the pending batch if all of its callbacks have been
2505
+ // scheduled and reset to nullptr.
2506
+ if (batch->on_complete == nullptr &&
2507
+ (!batch->recv_initial_metadata ||
2508
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready ==
2509
+ nullptr) &&
2510
+ (!batch->recv_message ||
2511
+ batch->payload->recv_message.recv_message_ready == nullptr) &&
2512
+ (!batch->recv_trailing_metadata ||
2513
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready ==
2514
+ nullptr)) {
2515
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2516
+ gpr_log(GPR_INFO, "chand=%p calld=%p: clearing pending batch", chand_,
2517
+ this);
2518
+ }
2519
+ PendingBatchClear(pending);
2520
+ }
2521
+ }
2522
+
2523
+ // This is called via the call combiner, so access to calld is synchronized.
2524
+ void RetryFilter::CallData::FailPendingBatchInCallCombiner(
2525
+ void* arg, grpc_error_handle error) {
2526
+ grpc_transport_stream_op_batch* batch =
2527
+ static_cast<grpc_transport_stream_op_batch*>(arg);
2528
+ CallData* call = static_cast<CallData*>(batch->handler_private.extra_arg);
2529
+ // Note: This will release the call combiner.
2530
+ grpc_transport_stream_op_batch_finish_with_failure(
2531
+ batch, GRPC_ERROR_REF(error), call->call_combiner_);
2532
+ }
2533
+
2534
+ // This is called via the call combiner, so access to calld is synchronized.
2535
+ void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
2536
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
2537
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2538
+ size_t num_batches = 0;
2539
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2540
+ if (pending_batches_[i].batch != nullptr) ++num_batches;
2541
+ }
2542
+ gpr_log(GPR_INFO,
2543
+ "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2544
+ chand_, this, num_batches, grpc_error_std_string(error).c_str());
2545
+ }
2546
+ CallCombinerClosureList closures;
2547
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2548
+ PendingBatch* pending = &pending_batches_[i];
2549
+ grpc_transport_stream_op_batch* batch = pending->batch;
2550
+ if (batch != nullptr) {
2551
+ batch->handler_private.extra_arg = this;
2552
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2553
+ FailPendingBatchInCallCombiner, batch,
2554
+ grpc_schedule_on_exec_ctx);
2555
+ closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2556
+ "PendingBatchesFail");
2557
+ PendingBatchClear(pending);
2558
+ }
2559
+ }
2560
+ closures.RunClosuresWithoutYielding(call_combiner_);
2561
+ GRPC_ERROR_UNREF(error);
2562
+ }
2563
+
2564
+ template <typename Predicate>
2565
+ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchFind(
2566
+ const char* log_message, Predicate predicate) {
2567
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2568
+ PendingBatch* pending = &pending_batches_[i];
2569
+ grpc_transport_stream_op_batch* batch = pending->batch;
2570
+ if (batch != nullptr && predicate(batch)) {
2571
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2572
+ gpr_log(GPR_INFO,
2573
+ "chand=%p calld=%p: %s pending batch at index %" PRIuPTR,
2574
+ chand_, this, log_message, i);
2575
+ }
2576
+ return pending;
2577
+ }
2578
+ }
2579
+ return nullptr;
2580
+ }
2581
+
2582
+ //
2583
+ // retry code
2584
+ //
2585
+
2586
+ void RetryFilter::CallData::RetryCommit(CallAttempt* call_attempt) {
2587
+ if (retry_committed_) return;
2588
+ retry_committed_ = true;
2589
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2590
+ gpr_log(GPR_INFO, "chand=%p calld=%p: committing retries", chand_, this);
2591
+ }
2592
+ if (call_attempt != nullptr) {
2593
+ // If the call attempt's LB call has been committed, inform the call
2594
+ // dispatch controller that the call has been committed.
2595
+ // Note: If call_attempt is null, this is happening before the first
2596
+ // retry attempt is started, in which case we'll just pass the real
2597
+ // call dispatch controller down into the LB call, and it won't be
2598
+ // our problem anymore.
2599
+ if (call_attempt->lb_call_committed()) {
2600
+ auto* service_config_call_data =
2601
+ static_cast<ClientChannelServiceConfigCallData*>(
2602
+ call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2603
+ service_config_call_data->call_dispatch_controller()->Commit();
2604
+ }
2605
+ // Free cached send ops.
2606
+ call_attempt->FreeCachedSendOpDataAfterCommit();
2607
+ }
2608
+ }
2609
+
2610
+ void RetryFilter::CallData::StartRetryTimer(
2611
+ absl::optional<Duration> server_pushback) {
2612
+ // Reset call attempt.
2613
+ call_attempt_.reset(DEBUG_LOCATION, "StartRetryTimer");
2614
+ // Compute backoff delay.
2615
+ Timestamp next_attempt_time;
2616
+ if (server_pushback.has_value()) {
2617
+ GPR_ASSERT(*server_pushback >= Duration::Zero());
2618
+ next_attempt_time = ExecCtx::Get()->Now() + *server_pushback;
2619
+ retry_backoff_.Reset();
2620
+ } else {
2621
+ next_attempt_time = retry_backoff_.NextAttemptTime();
2622
+ }
2623
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2624
+ gpr_log(GPR_INFO,
2625
+ "chand=%p calld=%p: retrying failed call in %" PRId64 " ms", chand_,
2626
+ this, (next_attempt_time - ExecCtx::Get()->Now()).millis());
2627
+ }
2628
+ // Schedule retry after computed delay.
2629
+ GRPC_CLOSURE_INIT(&retry_closure_, OnRetryTimer, this, nullptr);
2630
+ GRPC_CALL_STACK_REF(owning_call_, "OnRetryTimer");
2631
+ retry_timer_pending_ = true;
2632
+ grpc_timer_init(&retry_timer_, next_attempt_time, &retry_closure_);
2633
+ }
2634
+
2635
+ void RetryFilter::CallData::OnRetryTimer(void* arg, grpc_error_handle error) {
2636
+ auto* calld = static_cast<CallData*>(arg);
2637
+ GRPC_CLOSURE_INIT(&calld->retry_closure_, OnRetryTimerLocked, calld, nullptr);
2638
+ GRPC_CALL_COMBINER_START(calld->call_combiner_, &calld->retry_closure_,
2639
+ GRPC_ERROR_REF(error), "retry timer fired");
2640
+ }
2641
+
2642
+ void RetryFilter::CallData::OnRetryTimerLocked(void* arg,
2643
+ grpc_error_handle error) {
2644
+ auto* calld = static_cast<CallData*>(arg);
2645
+ if (error == GRPC_ERROR_NONE && calld->retry_timer_pending_) {
2646
+ calld->retry_timer_pending_ = false;
2647
+ calld->CreateCallAttempt(/*is_transparent_retry=*/false);
2648
+ } else {
2649
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_, "retry timer cancelled");
2650
+ }
2651
+ GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
2652
+ }
2653
+
2654
+ void RetryFilter::CallData::AddClosureToStartTransparentRetry(
2655
+ CallCombinerClosureList* closures) {
2656
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
2657
+ gpr_log(GPR_INFO, "chand=%p calld=%p: scheduling transparent retry", chand_,
2658
+ this);
2659
+ }
2660
+ GRPC_CALL_STACK_REF(owning_call_, "OnRetryTimer");
2661
+ GRPC_CLOSURE_INIT(&retry_closure_, StartTransparentRetry, this, nullptr);
2662
+ closures->Add(&retry_closure_, GRPC_ERROR_NONE, "start transparent retry");
2663
+ }
2664
+
2665
+ void RetryFilter::CallData::StartTransparentRetry(void* arg,
2666
+ grpc_error_handle /*error*/) {
2667
+ auto* calld = static_cast<CallData*>(arg);
2668
+ if (calld->cancelled_from_surface_ == GRPC_ERROR_NONE) {
2669
+ calld->CreateCallAttempt(/*is_transparent_retry=*/true);
2670
+ } else {
2671
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
2672
+ "call cancelled before transparent retry");
2673
+ }
2674
+ GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
2675
+ }
2676
+
2677
+ } // namespace
2678
+
2679
+ const grpc_channel_filter kRetryFilterVtable = {
2680
+ RetryFilter::CallData::StartTransportStreamOpBatch,
2681
+ nullptr,
2682
+ RetryFilter::StartTransportOp,
2683
+ sizeof(RetryFilter::CallData),
2684
+ RetryFilter::CallData::Init,
2685
+ RetryFilter::CallData::SetPollent,
2686
+ RetryFilter::CallData::Destroy,
2687
+ sizeof(RetryFilter),
2688
+ RetryFilter::Init,
2689
+ grpc_channel_stack_no_post_init,
2690
+ RetryFilter::Destroy,
2691
+ RetryFilter::GetChannelInfo,
2692
+ "retry_filter",
2693
+ };
2694
+
2695
+ } // namespace grpc_core