grpc 1.43.1 → 1.44.0.pre2

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

Potentially problematic release.


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

Files changed (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -22,26 +22,24 @@
22
22
  #include "absl/status/statusor.h"
23
23
  #include "absl/strings/strip.h"
24
24
 
25
+ #include <grpc/status.h>
25
26
  #include <grpc/support/log.h>
26
27
 
27
28
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
29
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
29
30
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
30
- #include "src/core/ext/service_config/service_config.h"
31
- #include "src/core/ext/service_config/service_config_call_data.h"
32
31
  #include "src/core/lib/backoff/backoff.h"
33
32
  #include "src/core/lib/channel/channel_args.h"
34
33
  #include "src/core/lib/channel/channel_stack.h"
35
34
  #include "src/core/lib/channel/status_util.h"
36
35
  #include "src/core/lib/gprpp/manual_constructor.h"
37
36
  #include "src/core/lib/iomgr/polling_entity.h"
37
+ #include "src/core/lib/service_config/service_config.h"
38
+ #include "src/core/lib/service_config/service_config_call_data.h"
38
39
  #include "src/core/lib/slice/slice_internal.h"
39
40
  #include "src/core/lib/slice/slice_string_helpers.h"
40
41
  #include "src/core/lib/transport/error_utils.h"
41
- #include "src/core/lib/transport/metadata.h"
42
42
  #include "src/core/lib/transport/metadata_batch.h"
43
- #include "src/core/lib/transport/static_metadata.h"
44
- #include "src/core/lib/transport/status_metadata.h"
45
43
  #include "src/core/lib/uri/uri_parser.h"
46
44
 
47
45
  //
@@ -396,10 +394,8 @@ class RetryFilter::CallData {
396
394
  void MaybeSwitchToFastPath();
397
395
 
398
396
  // Returns true if the call should be retried.
399
- // If server_pushback_md is non-null, sets *server_pushback_ms.
400
397
  bool ShouldRetry(absl::optional<grpc_status_code> status, bool is_lb_drop,
401
- grpc_mdelem* server_pushback_md,
402
- grpc_millis* server_pushback_ms);
398
+ absl::optional<grpc_millis> server_pushback_ms);
403
399
 
404
400
  // Abandons the call attempt. Unrefs any deferred batches.
405
401
  void Abandon();
@@ -420,7 +416,6 @@ class RetryFilter::CallData {
420
416
  // BatchData.batch.payload points to this.
421
417
  grpc_transport_stream_op_batch_payload batch_payload_;
422
418
  // For send_initial_metadata.
423
- grpc_linked_mdelem retry_attempts_metadata_;
424
419
  grpc_metadata_batch send_initial_metadata_{calld_->arena_};
425
420
  // For send_message.
426
421
  // TODO(roth): Restructure this to eliminate use of ManualConstructor.
@@ -509,8 +504,8 @@ class RetryFilter::CallData {
509
504
  void RetryCommit(CallAttempt* call_attempt);
510
505
 
511
506
  // Starts a timer to retry after appropriate back-off.
512
- // If server_pushback_ms is -1, retry_backoff_ is used.
513
- void StartRetryTimer(grpc_millis server_pushback_ms);
507
+ // If server_pushback_ms is nullopt, retry_backoff_ is used.
508
+ void StartRetryTimer(absl::optional<grpc_millis> server_pushback_ms);
514
509
 
515
510
  static void OnRetryTimer(void* arg, grpc_error_handle error);
516
511
  static void OnRetryTimerLocked(void* arg, grpc_error_handle error);
@@ -1065,7 +1060,7 @@ void RetryFilter::CallData::CallAttempt::CancelFromSurface(
1065
1060
 
1066
1061
  bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1067
1062
  absl::optional<grpc_status_code> status, bool is_lb_drop,
1068
- grpc_mdelem* server_pushback_md, grpc_millis* server_pushback_ms) {
1063
+ absl::optional<grpc_millis> server_pushback_ms) {
1069
1064
  // LB drops always inhibit retries.
1070
1065
  if (is_lb_drop) return false;
1071
1066
  // TODO(roth): Handle transparent retries here.
@@ -1131,10 +1126,8 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1131
1126
  return false;
1132
1127
  }
1133
1128
  // Check server push-back.
1134
- if (server_pushback_md != nullptr) {
1135
- // If the value is "-1" or any other unparseable string, we do not retry.
1136
- uint32_t ms;
1137
- if (!grpc_parse_slice_to_uint32(GRPC_MDVALUE(*server_pushback_md), &ms)) {
1129
+ if (server_pushback_ms.has_value()) {
1130
+ if (*server_pushback_ms < 0) {
1138
1131
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1139
1132
  gpr_log(GPR_INFO,
1140
1133
  "chand=%p calld=%p attempt=%p: not retrying due to server "
@@ -1146,10 +1139,10 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1146
1139
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1147
1140
  gpr_log(
1148
1141
  GPR_INFO,
1149
- "chand=%p calld=%p attempt=%p: server push-back: retry in %u ms",
1150
- calld_->chand_, calld_, this, ms);
1142
+ "chand=%p calld=%p attempt=%p: server push-back: retry in %" PRIu64
1143
+ " ms",
1144
+ calld_->chand_, calld_, this, *server_pushback_ms);
1151
1145
  }
1152
- *server_pushback_ms = static_cast<grpc_millis>(ms);
1153
1146
  }
1154
1147
  }
1155
1148
  // Check with call dispatch controller.
@@ -1236,11 +1229,11 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
1236
1229
  // Check whether we should retry.
1237
1230
  if (call_attempt->ShouldRetry(
1238
1231
  /*status=*/absl::nullopt, /*is_lb_drop=*/false,
1239
- /*server_pushback_md=*/nullptr, /*server_pushback_ms=*/nullptr)) {
1232
+ /*server_pushback_ms=*/absl::nullopt)) {
1240
1233
  // Mark current attempt as abandoned.
1241
1234
  call_attempt->Abandon();
1242
1235
  // We are retrying. Start backoff timer.
1243
- calld->StartRetryTimer(/*server_pushback_ms=*/-1);
1236
+ calld->StartRetryTimer(/*server_pushback_ms=*/absl::nullopt);
1244
1237
  } else {
1245
1238
  // Not retrying, so commit the call.
1246
1239
  calld->RetryCommit(call_attempt);
@@ -1534,11 +1527,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
1534
1527
 
1535
1528
  namespace {
1536
1529
 
1537
- // Sets *status, *server_pushback_md, and *is_lb_drop based on md_batch
1530
+ // Sets *status, *server_pushback_ms, and *is_lb_drop based on md_batch
1538
1531
  // and error.
1539
1532
  void GetCallStatus(grpc_millis deadline, grpc_metadata_batch* md_batch,
1540
1533
  grpc_error_handle error, grpc_status_code* status,
1541
- grpc_mdelem** server_pushback_md, bool* is_lb_drop) {
1534
+ absl::optional<grpc_millis>* server_pushback_ms,
1535
+ bool* is_lb_drop) {
1542
1536
  if (error != GRPC_ERROR_NONE) {
1543
1537
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
1544
1538
  intptr_t value = 0;
@@ -1547,13 +1541,8 @@ void GetCallStatus(grpc_millis deadline, grpc_metadata_batch* md_batch,
1547
1541
  *is_lb_drop = true;
1548
1542
  }
1549
1543
  } else {
1550
- GPR_ASSERT(md_batch->legacy_index()->named.grpc_status != nullptr);
1551
- *status = grpc_get_status_code_from_metadata(
1552
- md_batch->legacy_index()->named.grpc_status->md);
1553
- if (md_batch->legacy_index()->named.grpc_retry_pushback_ms != nullptr) {
1554
- *server_pushback_md =
1555
- &md_batch->legacy_index()->named.grpc_retry_pushback_ms->md;
1556
- }
1544
+ *status = *md_batch->get(GrpcStatusMetadata());
1545
+ *server_pushback_ms = md_batch->get(GrpcRetryPushbackMsMetadata());
1557
1546
  }
1558
1547
  GRPC_ERROR_UNREF(error);
1559
1548
  }
@@ -1685,12 +1674,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1685
1674
  call_attempt->MaybeCancelPerAttemptRecvTimer();
1686
1675
  // Get the call's status and check for server pushback metadata.
1687
1676
  grpc_status_code status = GRPC_STATUS_OK;
1688
- grpc_mdelem* server_pushback_md = nullptr;
1677
+ absl::optional<grpc_millis> server_pushback_ms;
1689
1678
  grpc_metadata_batch* md_batch =
1690
1679
  batch_data->batch_.payload->recv_trailing_metadata.recv_trailing_metadata;
1691
1680
  bool is_lb_drop = false;
1692
1681
  GetCallStatus(calld->deadline_, md_batch, GRPC_ERROR_REF(error), &status,
1693
- &server_pushback_md, &is_lb_drop);
1682
+ &server_pushback_ms, &is_lb_drop);
1694
1683
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1695
1684
  gpr_log(
1696
1685
  GPR_INFO,
@@ -1699,9 +1688,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
1699
1688
  is_lb_drop);
1700
1689
  }
1701
1690
  // Check if we should retry.
1702
- grpc_millis server_pushback_ms = -1;
1703
- if (call_attempt->ShouldRetry(status, is_lb_drop, server_pushback_md,
1704
- &server_pushback_ms)) {
1691
+ if (call_attempt->ShouldRetry(status, is_lb_drop, server_pushback_ms)) {
1705
1692
  // Start retry timer.
1706
1693
  calld->StartRetryTimer(server_pushback_ms);
1707
1694
  // Cancel call attempt.
@@ -1893,35 +1880,19 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnCompleteForCancelOp(
1893
1880
  void RetryFilter::CallData::CallAttempt::BatchData::
1894
1881
  AddRetriableSendInitialMetadataOp() {
1895
1882
  auto* calld = call_attempt_->calld_;
1896
- // Maps the number of retries to the corresponding metadata value slice.
1897
- const grpc_slice* retry_count_strings[] = {&GRPC_MDSTR_1, &GRPC_MDSTR_2,
1898
- &GRPC_MDSTR_3, &GRPC_MDSTR_4};
1899
1883
  // We need to make a copy of the metadata batch for each attempt, since
1900
1884
  // the filters in the subchannel stack may modify this batch, and we don't
1901
1885
  // want those modifications to be passed forward to subsequent attempts.
1902
1886
  //
1903
1887
  // If we've already completed one or more attempts, add the
1904
1888
  // grpc-retry-attempts header.
1905
- grpc_metadata_batch_copy(&calld->send_initial_metadata_,
1906
- &call_attempt_->send_initial_metadata_);
1907
- if (GPR_UNLIKELY(call_attempt_->send_initial_metadata_.legacy_index()
1908
- ->named.grpc_previous_rpc_attempts != nullptr)) {
1909
- call_attempt_->send_initial_metadata_.Remove(
1910
- GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1911
- }
1889
+ call_attempt_->send_initial_metadata_ = calld->send_initial_metadata_.Copy();
1912
1890
  if (GPR_UNLIKELY(calld->num_attempts_completed_ > 0)) {
1913
- grpc_mdelem retry_md = grpc_mdelem_create(
1914
- GRPC_MDSTR_GRPC_PREVIOUS_RPC_ATTEMPTS,
1915
- *retry_count_strings[calld->num_attempts_completed_ - 1], nullptr);
1916
- grpc_error_handle error = grpc_metadata_batch_add_tail(
1917
- &call_attempt_->send_initial_metadata_,
1918
- &call_attempt_->retry_attempts_metadata_, retry_md,
1919
- GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1920
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
1921
- gpr_log(GPR_ERROR, "error adding retry metadata: %s",
1922
- grpc_error_std_string(error).c_str());
1923
- GPR_ASSERT(false);
1924
- }
1891
+ call_attempt_->send_initial_metadata_.Set(GrpcPreviousRpcAttemptsMetadata(),
1892
+ calld->num_attempts_completed_);
1893
+ } else {
1894
+ call_attempt_->send_initial_metadata_.Remove(
1895
+ GrpcPreviousRpcAttemptsMetadata());
1925
1896
  }
1926
1897
  call_attempt_->started_send_initial_metadata_ = true;
1927
1898
  batch_.send_initial_metadata = true;
@@ -1958,8 +1929,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1958
1929
  // We need to make a copy of the metadata batch for each attempt, since
1959
1930
  // the filters in the subchannel stack may modify this batch, and we don't
1960
1931
  // want those modifications to be passed forward to subsequent attempts.
1961
- grpc_metadata_batch_copy(&calld->send_trailing_metadata_,
1962
- &call_attempt_->send_trailing_metadata_);
1932
+ call_attempt_->send_trailing_metadata_ =
1933
+ calld->send_trailing_metadata_.Copy();
1963
1934
  call_attempt_->started_send_trailing_metadata_ = true;
1964
1935
  batch_.send_trailing_metadata = true;
1965
1936
  batch_.payload->send_trailing_metadata.send_trailing_metadata =
@@ -2274,7 +2245,7 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2274
2245
  seen_send_initial_metadata_ = true;
2275
2246
  grpc_metadata_batch* send_initial_metadata =
2276
2247
  batch->payload->send_initial_metadata.send_initial_metadata;
2277
- grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_);
2248
+ send_initial_metadata_ = send_initial_metadata->Copy();
2278
2249
  send_initial_metadata_flags_ =
2279
2250
  batch->payload->send_initial_metadata.send_initial_metadata_flags;
2280
2251
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
@@ -2290,7 +2261,7 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2290
2261
  seen_send_trailing_metadata_ = true;
2291
2262
  grpc_metadata_batch* send_trailing_metadata =
2292
2263
  batch->payload->send_trailing_metadata.send_trailing_metadata;
2293
- grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_);
2264
+ send_trailing_metadata_ = send_trailing_metadata->Copy();
2294
2265
  }
2295
2266
  }
2296
2267
 
@@ -2512,13 +2483,15 @@ void RetryFilter::CallData::RetryCommit(CallAttempt* call_attempt) {
2512
2483
  }
2513
2484
  }
2514
2485
 
2515
- void RetryFilter::CallData::StartRetryTimer(grpc_millis server_pushback_ms) {
2486
+ void RetryFilter::CallData::StartRetryTimer(
2487
+ absl::optional<grpc_millis> server_pushback_ms) {
2516
2488
  // Reset call attempt.
2517
2489
  call_attempt_.reset(DEBUG_LOCATION, "StartRetryTimer");
2518
2490
  // Compute backoff delay.
2519
2491
  grpc_millis next_attempt_time;
2520
- if (server_pushback_ms >= 0) {
2521
- next_attempt_time = ExecCtx::Get()->Now() + server_pushback_ms;
2492
+ if (server_pushback_ms.has_value()) {
2493
+ GPR_ASSERT(*server_pushback_ms >= 0);
2494
+ next_attempt_time = ExecCtx::Get()->Now() + *server_pushback_ms;
2522
2495
  retry_backoff_.Reset();
2523
2496
  } else {
2524
2497
  next_attempt_time = retry_backoff_.NextAttemptTime();
@@ -31,12 +31,12 @@
31
31
 
32
32
  #include "src/core/ext/filters/client_channel/client_channel.h"
33
33
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
34
- #include "src/core/ext/filters/client_channel/server_address.h"
35
34
  #include "src/core/lib/channel/channel_args.h"
36
35
  #include "src/core/lib/channel/status_util.h"
37
36
  #include "src/core/lib/gpr/string.h"
38
37
  #include "src/core/lib/gprpp/memory.h"
39
38
  #include "src/core/lib/json/json_util.h"
39
+ #include "src/core/lib/resolver/server_address.h"
40
40
  #include "src/core/lib/uri/uri_parser.h"
41
41
 
42
42
  // As per the retry design, we do not allow more than 5 retry attempts.
@@ -22,9 +22,9 @@
22
22
  #include <memory>
23
23
 
24
24
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
25
- #include "src/core/ext/service_config/service_config_parser.h"
26
25
  #include "src/core/lib/channel/status_util.h"
27
26
  #include "src/core/lib/iomgr/exec_ctx.h" // for grpc_millis
27
+ #include "src/core/lib/service_config/service_config_parser.h"
28
28
 
29
29
  namespace grpc_core {
30
30
  namespace internal {
@@ -19,11 +19,11 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include "src/core/ext/service_config/service_config_call_data.h"
23
22
  #include "src/core/lib/channel/channel_args.h"
24
23
  #include "src/core/lib/channel/channel_stack.h"
25
24
  #include "src/core/lib/channel/channel_stack_builder.h"
26
25
  #include "src/core/lib/config/core_configuration.h"
26
+ #include "src/core/lib/service_config/service_config_call_data.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include "absl/strings/str_format.h"
28
28
 
29
+ #include <grpc/status.h>
29
30
  #include <grpc/support/alloc.h>
30
31
  #include <grpc/support/string_util.h>
31
32
 
@@ -50,7 +51,6 @@
50
51
  #include "src/core/lib/surface/channel.h"
51
52
  #include "src/core/lib/transport/connectivity_state.h"
52
53
  #include "src/core/lib/transport/error_utils.h"
53
- #include "src/core/lib/transport/status_metadata.h"
54
54
  #include "src/core/lib/uri/uri_parser.h"
55
55
 
56
56
  // Strong and weak refs.
@@ -141,14 +141,14 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
141
141
  deadline_(args.deadline) {
142
142
  grpc_call_stack* callstk = SUBCHANNEL_CALL_TO_CALL_STACK(this);
143
143
  const grpc_call_element_args call_args = {
144
- callstk, /* call_stack */
145
- nullptr, /* server_transport_data */
146
- args.context, /* context */
147
- args.path, /* path */
148
- args.start_time, /* start_time */
149
- args.deadline, /* deadline */
150
- args.arena, /* arena */
151
- args.call_combiner /* call_combiner */
144
+ callstk, /* call_stack */
145
+ nullptr, /* server_transport_data */
146
+ args.context, /* context */
147
+ args.path.c_slice(), /* path */
148
+ args.start_time, /* start_time */
149
+ args.deadline, /* deadline */
150
+ args.arena, /* arena */
151
+ args.call_combiner /* call_combiner */
152
152
  };
153
153
  *error = grpc_call_stack_init(connected_subchannel_->channel_stack(), 1,
154
154
  SubchannelCall::Destroy, this, &call_args);
@@ -252,12 +252,7 @@ void GetCallStatus(grpc_status_code* status, grpc_millis deadline,
252
252
  if (error != GRPC_ERROR_NONE) {
253
253
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
254
254
  } else {
255
- if (md_batch->legacy_index()->named.grpc_status != nullptr) {
256
- *status = grpc_get_status_code_from_metadata(
257
- md_batch->legacy_index()->named.grpc_status->md);
258
- } else {
259
- *status = GRPC_STATUS_UNKNOWN;
260
- }
255
+ *status = md_batch->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
261
256
  }
262
257
  GRPC_ERROR_UNREF(error);
263
258
  }
@@ -969,7 +964,8 @@ void ConnectionDestroy(void* arg, grpc_error_handle /*error*/) {
969
964
 
970
965
  bool Subchannel::PublishTransportLocked() {
971
966
  // Construct channel stack.
972
- grpc_channel_stack_builder* builder = grpc_channel_stack_builder_create();
967
+ grpc_channel_stack_builder* builder =
968
+ grpc_channel_stack_builder_create("subchannel");
973
969
  grpc_channel_stack_builder_set_channel_arguments(
974
970
  builder, connecting_result_.channel_args);
975
971
  grpc_channel_stack_builder_set_transport(builder,
@@ -27,15 +27,14 @@
27
27
  #include "src/core/lib/backoff/backoff.h"
28
28
  #include "src/core/lib/channel/channel_stack.h"
29
29
  #include "src/core/lib/gpr/time_precise.h"
30
- #include "src/core/lib/gprpp/arena.h"
31
30
  #include "src/core/lib/gprpp/dual_ref_counted.h"
32
31
  #include "src/core/lib/gprpp/ref_counted.h"
33
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
34
33
  #include "src/core/lib/gprpp/sync.h"
35
34
  #include "src/core/lib/iomgr/polling_entity.h"
36
35
  #include "src/core/lib/iomgr/timer.h"
36
+ #include "src/core/lib/resource_quota/arena.h"
37
37
  #include "src/core/lib/transport/connectivity_state.h"
38
- #include "src/core/lib/transport/metadata.h"
39
38
 
40
39
  namespace grpc_core {
41
40
 
@@ -75,7 +74,7 @@ class SubchannelCall {
75
74
  struct Args {
76
75
  RefCountedPtr<ConnectedSubchannel> connected_subchannel;
77
76
  grpc_polling_entity* pollent;
78
- grpc_slice path;
77
+ Slice path;
79
78
  gpr_cycle_counter start_time;
80
79
  grpc_millis deadline;
81
80
  Arena* arena;
@@ -22,16 +22,17 @@
22
22
 
23
23
  #include "absl/strings/numbers.h"
24
24
 
25
+ #include <grpc/status.h>
25
26
  #include <grpc/support/alloc.h>
26
27
  #include <grpc/support/log.h>
27
28
 
28
29
  #include "src/core/ext/filters/fault_injection/service_config_parser.h"
29
- #include "src/core/ext/service_config/service_config_call_data.h"
30
30
  #include "src/core/lib/channel/channel_stack.h"
31
31
  #include "src/core/lib/channel/status_util.h"
32
32
  #include "src/core/lib/gprpp/sync.h"
33
33
  #include "src/core/lib/iomgr/closure.h"
34
34
  #include "src/core/lib/iomgr/timer.h"
35
+ #include "src/core/lib/service_config/service_config_call_data.h"
35
36
  #include "src/core/lib/transport/status_conversion.h"
36
37
 
37
38
  namespace grpc_core {
@@ -45,31 +46,11 @@ static_assert(
45
46
  std::is_trivially_destructible<std::atomic<uint32_t>>::value,
46
47
  "the active fault counter needs to have a trivially destructible type");
47
48
 
48
- inline int GetMetadatumValueInt(grpc_mdelem md) {
49
- int res;
50
- if (absl::SimpleAtoi(StringViewFromSlice(GRPC_MDVALUE(md)), &res)) {
51
- return res;
52
- } else {
53
- return -1;
54
- }
55
- }
56
-
57
- inline uint32_t GetMetadatumValueUnsignedInt(grpc_mdelem md) {
58
- uint32_t res;
59
- if (absl::SimpleAtoi(StringViewFromSlice(GRPC_MDVALUE(md)), &res)) {
60
- return res;
61
- } else {
62
- return -1;
63
- }
64
- }
65
-
66
- inline int64_t GetMetadatumValueInt64(grpc_mdelem md) {
67
- int64_t res;
68
- if (absl::SimpleAtoi(StringViewFromSlice(GRPC_MDVALUE(md)), &res)) {
69
- return res;
70
- } else {
71
- return -1;
72
- }
49
+ template <typename T>
50
+ auto AsInt(absl::string_view s) -> absl::optional<T> {
51
+ T x;
52
+ if (absl::SimpleAtoi(s, &x)) return x;
53
+ return absl::nullopt;
73
54
  }
74
55
 
75
56
  inline bool UnderFraction(const uint32_t numerator,
@@ -346,41 +327,49 @@ void CallData::DecideWhetherToInjectFaults(
346
327
  *fi_policy_);
347
328
  }
348
329
  };
349
- initial_metadata->ForEach([&](grpc_mdelem md) {
350
- absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md));
351
- // Only perform string comparison if:
352
- // 1. Needs to check this header;
353
- // 2. The value is not been filled before.
354
- if (!fi_policy_->abort_code_header.empty() &&
355
- (copied_policy == nullptr ||
356
- copied_policy->abort_code == GRPC_STATUS_OK) &&
357
- key == fi_policy_->abort_code_header) {
330
+ std::string buffer;
331
+ if (!fi_policy_->abort_code_header.empty() &&
332
+ (copied_policy == nullptr ||
333
+ copied_policy->abort_code == GRPC_STATUS_OK)) {
334
+ auto value = initial_metadata->GetStringValue(
335
+ fi_policy_->abort_code_header, &buffer);
336
+ if (value.has_value()) {
358
337
  maybe_copy_policy_func();
359
- grpc_status_code_from_int(GetMetadatumValueInt(md),
360
- &copied_policy->abort_code);
338
+ grpc_status_code_from_int(
339
+ AsInt<int>(*value).value_or(GRPC_STATUS_UNKNOWN),
340
+ &copied_policy->abort_code);
361
341
  }
362
- if (!fi_policy_->abort_percentage_header.empty() &&
363
- key == fi_policy_->abort_percentage_header) {
342
+ }
343
+ if (!fi_policy_->abort_percentage_header.empty()) {
344
+ auto value = initial_metadata->GetStringValue(
345
+ fi_policy_->abort_percentage_header, &buffer);
346
+ if (value.has_value()) {
364
347
  maybe_copy_policy_func();
365
348
  copied_policy->abort_percentage_numerator =
366
- std::min(GetMetadatumValueUnsignedInt(md),
349
+ std::min(AsInt<uint32_t>(*value).value_or(-1),
367
350
  fi_policy_->abort_percentage_numerator);
368
351
  }
369
- if (!fi_policy_->delay_header.empty() &&
370
- (copied_policy == nullptr || copied_policy->delay == 0) &&
371
- key == fi_policy_->delay_header) {
352
+ }
353
+ if (!fi_policy_->delay_header.empty() &&
354
+ (copied_policy == nullptr || copied_policy->delay == 0)) {
355
+ auto value =
356
+ initial_metadata->GetStringValue(fi_policy_->delay_header, &buffer);
357
+ if (value.has_value()) {
372
358
  maybe_copy_policy_func();
373
359
  copied_policy->delay = static_cast<grpc_millis>(
374
- std::max(GetMetadatumValueInt64(md), int64_t(0)));
360
+ std::max(AsInt<int64_t>(*value).value_or(0), int64_t(0)));
375
361
  }
376
- if (!fi_policy_->delay_percentage_header.empty() &&
377
- key == fi_policy_->delay_percentage_header) {
362
+ }
363
+ if (!fi_policy_->delay_percentage_header.empty()) {
364
+ auto value = initial_metadata->GetStringValue(
365
+ fi_policy_->delay_percentage_header, &buffer);
366
+ if (value.has_value()) {
378
367
  maybe_copy_policy_func();
379
368
  copied_policy->delay_percentage_numerator =
380
- std::min(GetMetadatumValueUnsignedInt(md),
369
+ std::min(AsInt<uint32_t>(*value).value_or(-1),
381
370
  fi_policy_->delay_percentage_numerator);
382
371
  }
383
- });
372
+ }
384
373
  if (copied_policy != nullptr) fi_policy_ = copied_policy;
385
374
  }
386
375
  // Roll the dice
@@ -122,14 +122,12 @@ ParseFaultInjectionPolicy(const Json::Array& policies_json_array,
122
122
  }
123
123
  }
124
124
  // Parse max_faults
125
- if (ParseJsonObjectField(json_object, "maxFaults",
126
- &fault_injection_policy.max_faults,
127
- &sub_error_list, false)) {
128
- if (fault_injection_policy.max_faults < 0) {
129
- sub_error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
130
- "field:maxFaults error:should be zero or positive"));
131
- }
132
- }
125
+ static_assert(
126
+ std::is_unsigned<decltype(fault_injection_policy.max_faults)>::value,
127
+ "maxFaults should be unsigned");
128
+ ParseJsonObjectField(json_object, "maxFaults",
129
+ &fault_injection_policy.max_faults, &sub_error_list,
130
+ false);
133
131
  if (!sub_error_list.empty()) {
134
132
  error_list->push_back(GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
135
133
  absl::StrCat("failed to parse faultInjectionPolicy index ", i),
@@ -21,8 +21,8 @@
21
21
 
22
22
  #include <vector>
23
23
 
24
- #include "src/core/ext/service_config/service_config_parser.h"
25
24
  #include "src/core/lib/iomgr/exec_ctx.h"
25
+ #include "src/core/lib/service_config/service_config_parser.h"
26
26
 
27
27
  namespace grpc_core {
28
28