grpc 1.70.1 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1432) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +116 -149
  3. data/include/grpc/event_engine/endpoint_config.h +5 -5
  4. data/include/grpc/event_engine/event_engine.h +44 -5
  5. data/include/grpc/event_engine/memory_request.h +3 -3
  6. data/include/grpc/impl/channel_arg_names.h +70 -50
  7. data/include/grpc/status.h +1 -1
  8. data/include/grpc/support/json.h +16 -16
  9. data/include/grpc/support/workaround_list.h +1 -4
  10. data/src/core/{lib/transport → call}/call_arena_allocator.cc +1 -1
  11. data/src/core/{lib/transport → call}/call_arena_allocator.h +3 -3
  12. data/src/core/{lib/transport → call}/call_destination.h +4 -4
  13. data/src/core/{lib/transport → call}/call_filters.cc +2 -2
  14. data/src/core/{lib/transport → call}/call_filters.h +125 -65
  15. data/src/core/{lib/channel → call}/call_finalization.h +3 -3
  16. data/src/core/{lib/transport → call}/call_spine.cc +33 -35
  17. data/src/core/{lib/transport → call}/call_spine.h +124 -39
  18. data/src/core/{lib/transport → call}/call_state.cc +1 -1
  19. data/src/core/{lib/transport → call}/call_state.h +11 -11
  20. data/src/core/{lib/surface → call}/client_call.cc +22 -13
  21. data/src/core/{lib/surface → call}/client_call.h +6 -6
  22. data/src/core/{lib/transport → call}/custom_metadata.h +3 -3
  23. data/src/core/{lib/transport → call}/interception_chain.cc +5 -5
  24. data/src/core/{lib/transport → call}/interception_chain.h +34 -14
  25. data/src/core/{lib/transport → call}/message.cc +1 -1
  26. data/src/core/{lib/transport → call}/message.h +7 -3
  27. data/src/core/{lib/transport → call}/metadata.cc +2 -2
  28. data/src/core/{lib/transport → call}/metadata.h +92 -4
  29. data/src/core/{lib/transport → call}/metadata_batch.cc +3 -3
  30. data/src/core/{lib/transport → call}/metadata_batch.h +86 -25
  31. data/src/core/{lib/transport → call}/metadata_compression_traits.h +3 -3
  32. data/src/core/{lib/transport → call}/metadata_info.cc +27 -9
  33. data/src/core/{lib/transport → call}/metadata_info.h +4 -4
  34. data/src/core/{lib/transport → call}/parsed_metadata.cc +1 -1
  35. data/src/core/{lib/transport → call}/parsed_metadata.h +3 -3
  36. data/src/core/call/request_buffer.cc +22 -22
  37. data/src/core/call/request_buffer.h +7 -7
  38. data/src/core/call/security_context.cc +125 -0
  39. data/src/core/call/security_context.h +114 -0
  40. data/src/core/{lib/surface → call}/server_call.cc +26 -9
  41. data/src/core/{lib/surface → call}/server_call.h +7 -5
  42. data/src/core/{lib/transport → call}/simple_slice_based_metadata.h +4 -4
  43. data/src/core/{lib/channel → call}/status_util.cc +1 -1
  44. data/src/core/{lib/channel → call}/status_util.h +3 -3
  45. data/src/core/channelz/channelz.cc +2 -2
  46. data/src/core/channelz/channelz.h +3 -22
  47. data/src/core/channelz/channelz_registry.cc +0 -7
  48. data/src/core/client_channel/client_channel.cc +40 -42
  49. data/src/core/client_channel/client_channel.h +6 -5
  50. data/src/core/client_channel/client_channel_filter.cc +64 -151
  51. data/src/core/client_channel/client_channel_filter.h +11 -7
  52. data/src/core/client_channel/client_channel_internal.h +1 -1
  53. data/src/core/client_channel/client_channel_plugin.cc +2 -1
  54. data/src/core/client_channel/client_channel_service_config.cc +1 -1
  55. data/src/core/client_channel/client_channel_service_config.h +5 -5
  56. data/src/core/client_channel/config_selector.h +2 -2
  57. data/src/core/client_channel/direct_channel.cc +3 -3
  58. data/src/core/client_channel/direct_channel.h +1 -1
  59. data/src/core/client_channel/dynamic_filters.cc +0 -1
  60. data/src/core/client_channel/dynamic_filters.h +0 -1
  61. data/src/core/client_channel/lb_metadata.cc +7 -8
  62. data/src/core/client_channel/lb_metadata.h +4 -4
  63. data/src/core/client_channel/load_balanced_call_destination.cc +5 -5
  64. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  65. data/src/core/client_channel/retry_filter.cc +1 -1
  66. data/src/core/client_channel/retry_filter.h +1 -1
  67. data/src/core/client_channel/retry_filter_legacy_call_data.cc +50 -50
  68. data/src/core/client_channel/retry_filter_legacy_call_data.h +11 -11
  69. data/src/core/client_channel/retry_interceptor.cc +16 -14
  70. data/src/core/client_channel/retry_interceptor.h +3 -3
  71. data/src/core/client_channel/retry_service_config.cc +2 -2
  72. data/src/core/client_channel/retry_service_config.h +4 -4
  73. data/src/core/client_channel/retry_throttle.cc +30 -34
  74. data/src/core/client_channel/retry_throttle.h +10 -2
  75. data/src/core/client_channel/subchannel.cc +50 -84
  76. data/src/core/client_channel/subchannel.h +5 -6
  77. data/src/core/client_channel/subchannel_stream_client.cc +14 -12
  78. data/src/core/client_channel/subchannel_stream_client.h +5 -5
  79. data/src/core/config/config_vars.cc +1 -0
  80. data/src/core/config/config_vars.h +1 -0
  81. data/src/core/config/core_configuration.h +2 -2
  82. data/src/core/config/load_config.cc +3 -2
  83. data/src/core/config/load_config.h +1 -1
  84. data/src/core/credentials/call/call_credentials.h +157 -0
  85. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.cc +4 -4
  86. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.h +4 -4
  87. data/src/core/{lib/security/credentials/composite/composite_credentials.cc → credentials/call/composite/composite_call_credentials.cc} +4 -57
  88. data/src/core/credentials/call/composite/composite_call_credentials.h +82 -0
  89. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.cc +3 -4
  90. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.h +5 -5
  91. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.cc +1 -1
  92. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.h +3 -3
  93. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.cc +7 -9
  94. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.h +5 -5
  95. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.cc +1 -2
  96. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.h +4 -4
  97. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.cc +3 -2
  98. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.h +4 -4
  99. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +3 -2
  100. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.h +6 -6
  101. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.cc +3 -3
  102. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.h +6 -6
  103. data/src/core/{lib/security/util → credentials/call}/json_util.cc +1 -1
  104. data/src/core/{lib/security/util → credentials/call}/json_util.h +3 -3
  105. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.cc +2 -2
  106. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.h +3 -3
  107. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.cc +4 -5
  108. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.h +7 -7
  109. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.cc +3 -3
  110. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.h +3 -3
  111. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.cc +8 -7
  112. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.h +8 -8
  113. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.cc +2 -3
  114. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.h +5 -5
  115. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.cc +5 -6
  116. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.h +9 -9
  117. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.cc +4 -4
  118. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.h +5 -5
  119. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.cc +5 -5
  120. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.h +4 -4
  121. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.cc +1 -1
  122. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.h +3 -3
  123. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_linux.cc +1 -1
  124. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_no_op.cc +1 -1
  125. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_windows.cc +1 -1
  126. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_client_options.cc +1 -1
  127. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.cc +1 -1
  128. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.h +3 -3
  129. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_server_options.cc +1 -1
  130. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry.h +4 -4
  131. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry_init.cc +21 -17
  132. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +68 -0
  133. data/src/core/{lib/security/credentials/composite/composite_credentials.h → credentials/transport/composite/composite_channel_credentials.h} +6 -51
  134. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.cc +4 -26
  135. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.h +5 -37
  136. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.cc +7 -7
  137. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.h +4 -4
  138. data/src/core/{lib/security/credentials → credentials/transport}/google_default/credentials_generic.cc +3 -3
  139. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.cc +33 -21
  140. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.h +5 -5
  141. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.cc +2 -2
  142. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.h +5 -5
  143. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.cc +2 -2
  144. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.h +5 -5
  145. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.cc +2 -2
  146. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.h +5 -5
  147. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.cc +5 -5
  148. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.h +4 -4
  149. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.cc +2 -2
  150. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.h +3 -3
  151. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.cc +4 -4
  152. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.h +6 -6
  153. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.cc +5 -5
  154. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.h +4 -4
  155. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_factory.h +3 -3
  156. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.cc +1 -1
  157. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.h +4 -4
  158. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.cc +13 -14
  159. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.h +18 -18
  160. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_match.cc +1 -1
  161. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.cc +25 -17
  162. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.h +8 -8
  163. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.cc +2 -2
  164. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.h +3 -3
  165. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.cc +1 -1
  166. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.h +7 -7
  167. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.cc +1 -2
  168. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.h +4 -5
  169. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots.h +3 -3
  170. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_fallback.cc +1 -1
  171. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.cc +2 -2
  172. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.h +3 -3
  173. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_windows.cc +1 -1
  174. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.cc +3 -3
  175. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.h +4 -4
  176. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.cc +6 -6
  177. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.h +5 -5
  178. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.cc +15 -15
  179. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.h +19 -19
  180. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.cc +1 -1
  181. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.h +3 -3
  182. data/src/core/{lib/security/credentials/credentials.cc → credentials/transport/transport_credentials.cc} +1 -3
  183. data/src/core/{lib/security/credentials/credentials.h → credentials/transport/transport_credentials.h} +5 -121
  184. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.cc +7 -6
  185. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.h +6 -6
  186. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -12
  187. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +7 -7
  188. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +9 -6
  189. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +10 -17
  190. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -6
  191. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +2 -2
  192. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -9
  193. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +7 -7
  194. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +1 -1
  195. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  196. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -6
  197. data/src/core/ext/filters/http/client/http_client_filter.h +5 -5
  198. data/src/core/ext/filters/http/client_authority_filter.cc +8 -13
  199. data/src/core/ext/filters/http/client_authority_filter.h +6 -6
  200. data/src/core/ext/filters/http/message_compress/compression_filter.cc +19 -23
  201. data/src/core/ext/filters/http/message_compress/compression_filter.h +19 -14
  202. data/src/core/ext/filters/http/server/http_server_filter.cc +4 -9
  203. data/src/core/ext/filters/http/server/http_server_filter.h +4 -4
  204. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -26
  205. data/src/core/ext/filters/message_size/message_size_filter.h +20 -21
  206. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -9
  207. data/src/core/ext/filters/rbac/rbac_filter.h +6 -6
  208. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  209. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -7
  210. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +4 -4
  211. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +1 -1
  212. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +2 -2
  213. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -5
  214. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +4 -3
  215. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +37 -24
  216. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -6
  217. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  218. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.cc +2 -2
  219. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +5 -7
  220. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +136 -110
  221. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +7 -7
  222. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +3 -3
  223. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  224. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  225. data/src/core/ext/transport/chttp2/transport/frame.cc +91 -70
  226. data/src/core/ext/transport/chttp2/transport/frame.h +41 -5
  227. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
  228. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +8 -8
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -3
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -7
  231. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -2
  232. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
  233. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -33
  234. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -8
  235. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
  236. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +13 -11
  237. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -4
  238. data/src/core/ext/transport/chttp2/transport/http2_status.h +52 -0
  239. data/src/core/ext/transport/chttp2/transport/internal.h +21 -13
  240. data/src/core/ext/transport/chttp2/transport/parsing.cc +49 -36
  241. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +1 -1
  242. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  243. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +2 -2
  244. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +2 -2
  245. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +2 -2
  246. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -39
  247. data/src/core/ext/transport/chttp2/transport/varint.cc +4 -4
  248. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -34
  249. data/src/core/ext/transport/inproc/inproc_transport.cc +2 -4
  250. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -11
  251. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +65 -65
  252. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +28 -28
  253. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +14 -14
  254. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +6 -6
  255. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +6 -6
  256. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +4 -4
  257. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +146 -130
  258. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +72 -71
  259. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +26 -26
  260. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +7 -7
  261. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +216 -218
  262. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +66 -66
  263. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +27 -27
  264. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +9 -9
  265. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +326 -328
  266. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +103 -103
  267. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +58 -58
  268. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +14 -14
  269. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +22 -24
  270. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +3 -3
  271. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +29 -29
  272. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +16 -16
  273. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +186 -192
  274. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +54 -54
  275. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +54 -54
  276. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +21 -21
  277. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +59 -61
  278. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +15 -15
  279. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +100 -100
  280. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +34 -34
  281. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +12 -12
  282. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +5 -5
  283. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +144 -114
  284. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +42 -40
  285. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +19 -19
  286. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +9 -9
  287. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +27 -27
  288. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +10 -10
  289. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +12 -14
  290. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +2 -2
  291. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +41 -41
  292. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +16 -16
  293. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +24 -24
  294. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +9 -9
  295. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +139 -139
  296. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +46 -46
  297. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +61 -61
  298. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +20 -20
  299. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +3 -3
  300. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +1 -1
  301. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +6 -6
  302. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -4
  303. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +33 -33
  304. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +14 -14
  305. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +12 -14
  306. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +2 -2
  307. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +52 -54
  308. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +10 -10
  309. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +738 -626
  310. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +246 -221
  311. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +2 -0
  312. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +13 -13
  313. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +4 -4
  314. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +3 -3
  315. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +2 -2
  316. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +7 -7
  317. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +3 -3
  318. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +15 -15
  319. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +7 -7
  320. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +7 -7
  321. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +3 -3
  322. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +16 -16
  323. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +10 -10
  324. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +306 -312
  325. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +96 -96
  326. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +61 -61
  327. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +27 -27
  328. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +19 -19
  329. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +6 -6
  330. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +25 -25
  331. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +9 -9
  332. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +34 -34
  333. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +9 -9
  334. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +3 -3
  335. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +2 -2
  336. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +294 -294
  337. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +105 -105
  338. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +3 -3
  339. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +1 -1
  340. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +23 -23
  341. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +8 -8
  342. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +84 -84
  343. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +28 -28
  344. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +87 -87
  345. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +31 -31
  346. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +37 -7
  347. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +7 -5
  348. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +24 -24
  349. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +5 -5
  350. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +130 -132
  351. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +43 -43
  352. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +6 -6
  353. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +2 -2
  354. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +60 -60
  355. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +26 -26
  356. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +7 -7
  357. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +3 -3
  358. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +142 -0
  359. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +55 -0
  360. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +32 -0
  361. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +33 -0
  362. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +7 -4
  363. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +6 -6
  364. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +2 -2
  365. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +7 -7
  366. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +3 -3
  367. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +11 -11
  368. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +4 -4
  369. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +85 -89
  370. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +20 -20
  371. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +80 -83
  372. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +27 -27
  373. data/src/core/ext/upb-gen/google/api/http.upb.h +51 -51
  374. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +22 -22
  375. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +327 -301
  376. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +97 -85
  377. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +1 -0
  378. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +9 -11
  379. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +9 -10
  380. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +110 -113
  381. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +25 -25
  382. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +6 -6
  383. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +4 -4
  384. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +21 -22
  385. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +3 -3
  386. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +70 -72
  387. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +17 -17
  388. data/src/core/ext/upb-gen/validate/validate.upb.h +368 -368
  389. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +117 -117
  390. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +9 -10
  391. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +7 -7
  392. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +3 -3
  393. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +12 -12
  394. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +2 -2
  395. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +27 -30
  396. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +7 -7
  397. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +3 -3
  398. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +3 -3
  399. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +1 -1
  400. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +22 -24
  401. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +3 -3
  402. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +6 -4
  403. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +50 -47
  404. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +210 -199
  405. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  406. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +33 -33
  407. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +19 -17
  408. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +41 -0
  409. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +33 -0
  410. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +26 -19
  411. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +98 -87
  412. data/src/core/{lib/security/transport → filter/auth}/auth_filters.h +101 -12
  413. data/src/core/{lib/security/transport → filter/auth}/client_auth_filter.cc +103 -12
  414. data/src/core/{lib/security/transport → filter/auth}/server_auth_filter.cc +5 -12
  415. data/src/core/filter/blackboard.cc +2 -2
  416. data/src/core/filter/filter_args.h +2 -2
  417. data/src/core/handshaker/handshaker.cc +0 -11
  418. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -5
  419. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +31 -32
  420. data/src/core/handshaker/http_connect/http_proxy_mapper.h +4 -4
  421. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +5 -5
  422. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +5 -5
  423. data/src/core/handshaker/proxy_mapper.h +4 -4
  424. data/src/core/handshaker/proxy_mapper_registry.cc +5 -6
  425. data/src/core/handshaker/proxy_mapper_registry.h +4 -4
  426. data/src/core/handshaker/security/secure_endpoint.cc +2 -2
  427. data/src/core/handshaker/security/security_handshaker.cc +4 -6
  428. data/src/core/handshaker/security/security_handshaker.h +1 -1
  429. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -4
  430. data/src/core/lib/channel/channel_args.cc +13 -13
  431. data/src/core/lib/channel/channel_args.h +57 -38
  432. data/src/core/lib/channel/channel_stack.h +1 -2
  433. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  434. data/src/core/lib/channel/connected_channel.cc +3 -3
  435. data/src/core/lib/channel/promise_based_filter.cc +9 -9
  436. data/src/core/lib/channel/promise_based_filter.h +82 -83
  437. data/src/core/lib/compression/compression.cc +3 -2
  438. data/src/core/lib/compression/compression_internal.cc +9 -9
  439. data/src/core/lib/compression/compression_internal.h +3 -3
  440. data/src/core/lib/debug/trace_flags.cc +5 -6
  441. data/src/core/lib/debug/trace_flags.h +2 -3
  442. data/src/core/lib/event_engine/ares_resolver.cc +9 -11
  443. data/src/core/lib/event_engine/ares_resolver.h +6 -10
  444. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -4
  445. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
  446. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +6 -7
  447. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -4
  448. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +2 -4
  449. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +3 -7
  450. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -4
  451. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -7
  452. data/src/core/lib/event_engine/channel_args_endpoint_config.h +6 -7
  453. data/src/core/lib/event_engine/common_closures.h +2 -4
  454. data/src/core/lib/event_engine/default_event_engine.cc +62 -33
  455. data/src/core/lib/event_engine/default_event_engine.h +24 -33
  456. data/src/core/lib/event_engine/default_event_engine_factory.cc +12 -18
  457. data/src/core/lib/event_engine/default_event_engine_factory.h +3 -5
  458. data/src/core/lib/event_engine/event_engine.cc +2 -4
  459. data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -4
  460. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +2 -4
  461. data/src/core/lib/event_engine/extensions/iomgr_compatible.h +39 -0
  462. data/src/core/lib/event_engine/extensions/supports_fd.h +2 -4
  463. data/src/core/lib/event_engine/extensions/supports_win_sockets.h +48 -0
  464. data/src/core/lib/event_engine/extensions/tcp_trace.h +3 -5
  465. data/src/core/lib/event_engine/forkable.cc +2 -4
  466. data/src/core/lib/event_engine/forkable.h +2 -4
  467. data/src/core/lib/event_engine/grpc_polled_fd.h +2 -4
  468. data/src/core/lib/event_engine/handle_containers.h +2 -4
  469. data/src/core/lib/event_engine/memory_allocator_factory.h +2 -4
  470. data/src/core/lib/event_engine/poller.h +2 -4
  471. data/src/core/lib/event_engine/posix.h +2 -4
  472. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -50
  473. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -4
  474. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -51
  475. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +2 -4
  476. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -4
  477. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -4
  478. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -4
  479. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +2 -4
  480. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -4
  481. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +2 -4
  482. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -4
  483. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -4
  484. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -4
  485. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -4
  486. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +6 -12
  487. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +2 -4
  488. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -7
  489. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -4
  490. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -4
  491. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -5
  492. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -4
  493. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +28 -4
  494. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -4
  495. data/src/core/lib/event_engine/posix_engine/set_socket_dualstack.cc +64 -0
  496. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +5 -17
  497. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +2 -4
  498. data/src/core/lib/event_engine/posix_engine/timer.cc +4 -6
  499. data/src/core/lib/event_engine/posix_engine/timer.h +4 -6
  500. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +2 -4
  501. data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -4
  502. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -7
  503. data/src/core/lib/event_engine/posix_engine/timer_manager.h +4 -6
  504. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +4 -8
  505. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +24 -25
  506. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +2 -4
  507. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -4
  508. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +12 -6
  509. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -4
  510. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -4
  511. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -4
  512. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -4
  513. data/src/core/lib/event_engine/query_extensions.h +2 -4
  514. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +2 -4
  515. data/src/core/lib/event_engine/resolved_address.cc +2 -4
  516. data/src/core/lib/event_engine/resolved_address_internal.h +2 -4
  517. data/src/core/lib/event_engine/shim.cc +11 -20
  518. data/src/core/lib/event_engine/shim.h +13 -4
  519. data/src/core/lib/event_engine/slice.cc +2 -4
  520. data/src/core/lib/event_engine/slice_buffer.cc +2 -4
  521. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  522. data/src/core/lib/event_engine/tcp_socket_utils.h +5 -7
  523. data/src/core/lib/event_engine/thread_local.cc +2 -4
  524. data/src/core/lib/event_engine/thread_local.h +2 -4
  525. data/src/core/lib/event_engine/thread_pool/thread_count.cc +2 -4
  526. data/src/core/lib/event_engine/thread_pool/thread_count.h +4 -18
  527. data/src/core/lib/event_engine/thread_pool/thread_pool.h +2 -4
  528. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -4
  529. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +18 -12
  530. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +4 -5
  531. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +2 -4
  532. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +2 -4
  533. data/src/core/lib/event_engine/time_util.cc +2 -4
  534. data/src/core/lib/event_engine/time_util.h +2 -4
  535. data/src/core/lib/event_engine/utils.cc +2 -4
  536. data/src/core/lib/event_engine/utils.h +2 -4
  537. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -4
  538. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -4
  539. data/src/core/lib/event_engine/windows/iocp.cc +2 -4
  540. data/src/core/lib/event_engine/windows/iocp.h +2 -4
  541. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +2 -4
  542. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +2 -4
  543. data/src/core/lib/event_engine/windows/win_socket.cc +13 -4
  544. data/src/core/lib/event_engine/windows/win_socket.h +5 -4
  545. data/src/core/lib/event_engine/windows/windows_endpoint.cc +7 -14
  546. data/src/core/lib/event_engine/windows/windows_endpoint.h +4 -6
  547. data/src/core/lib/event_engine/windows/windows_engine.cc +44 -4
  548. data/src/core/lib/event_engine/windows/windows_engine.h +10 -6
  549. data/src/core/lib/event_engine/windows/windows_listener.cc +7 -10
  550. data/src/core/lib/event_engine/windows/windows_listener.h +11 -8
  551. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +2 -4
  552. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -4
  553. data/src/core/lib/event_engine/work_queue/work_queue.h +2 -4
  554. data/src/core/lib/experiments/experiments.cc +276 -234
  555. data/src/core/lib/experiments/experiments.h +121 -100
  556. data/src/core/lib/iomgr/buffer_list.h +22 -21
  557. data/src/core/lib/iomgr/cfstream_handle.cc +0 -2
  558. data/src/core/lib/iomgr/closure.h +1 -4
  559. data/src/core/lib/iomgr/combiner.cc +0 -1
  560. data/src/core/lib/iomgr/endpoint_pair_posix.cc +43 -16
  561. data/src/core/lib/iomgr/endpoint_pair_windows.cc +43 -8
  562. data/src/core/lib/iomgr/error.cc +28 -44
  563. data/src/core/lib/iomgr/ev_epoll1_linux.cc +13 -1
  564. data/src/core/lib/iomgr/ev_poll_posix.cc +13 -0
  565. data/src/core/lib/iomgr/event_engine_shims/closure.cc +0 -1
  566. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +0 -2
  567. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +0 -1
  568. data/src/core/lib/iomgr/exec_ctx.cc +1 -7
  569. data/src/core/lib/iomgr/exec_ctx.h +1 -132
  570. data/src/core/lib/iomgr/executor.cc +0 -11
  571. data/src/core/lib/iomgr/polling_entity.cc +2 -7
  572. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -2
  573. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -2
  574. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  575. data/src/core/lib/iomgr/socket_utils_posix.cc +23 -11
  576. data/src/core/lib/iomgr/socket_utils_posix.h +12 -2
  577. data/src/core/lib/iomgr/tcp_client_cfstream.cc +8 -9
  578. data/src/core/lib/iomgr/tcp_client_posix.cc +11 -15
  579. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  580. data/src/core/lib/iomgr/tcp_posix.cc +59 -31
  581. data/src/core/lib/iomgr/tcp_posix.h +10 -2
  582. data/src/core/lib/iomgr/tcp_server_posix.cc +10 -4
  583. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -4
  584. data/src/core/lib/iomgr/tcp_server_windows.cc +27 -17
  585. data/src/core/lib/iomgr/timer_manager.cc +1 -9
  586. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -2
  587. data/src/core/lib/promise/activity.h +4 -4
  588. data/src/core/lib/promise/all_ok.h +31 -0
  589. data/src/core/lib/promise/detail/join_state.h +16 -68
  590. data/src/core/lib/promise/detail/promise_factory.h +85 -25
  591. data/src/core/lib/promise/detail/promise_like.h +16 -19
  592. data/src/core/lib/promise/detail/seq_state.h +102 -315
  593. data/src/core/lib/promise/for_each.h +14 -5
  594. data/src/core/lib/promise/if.h +48 -20
  595. data/src/core/lib/promise/interceptor_list.h +9 -9
  596. data/src/core/lib/promise/latch.h +14 -6
  597. data/src/core/lib/promise/loop.h +61 -18
  598. data/src/core/lib/promise/map.h +166 -49
  599. data/src/core/lib/promise/party.cc +48 -14
  600. data/src/core/lib/promise/party.h +220 -27
  601. data/src/core/lib/promise/pipe.h +12 -12
  602. data/src/core/lib/promise/poll.h +29 -24
  603. data/src/core/lib/promise/prioritized_race.h +16 -22
  604. data/src/core/lib/promise/promise.h +4 -5
  605. data/src/core/lib/promise/race.h +4 -12
  606. data/src/core/lib/promise/seq.h +41 -6
  607. data/src/core/lib/promise/sleep.cc +3 -3
  608. data/src/core/lib/promise/sleep.h +14 -1
  609. data/src/core/lib/promise/status_flag.h +32 -14
  610. data/src/core/lib/promise/try_join.h +119 -5
  611. data/src/core/lib/promise/try_seq.h +39 -12
  612. data/src/core/lib/resource_quota/arena.h +79 -0
  613. data/src/core/lib/resource_quota/memory_quota.cc +53 -49
  614. data/src/core/lib/resource_quota/memory_quota.h +4 -4
  615. data/src/core/lib/security/authorization/evaluate_args.cc +4 -4
  616. data/src/core/lib/security/authorization/evaluate_args.h +4 -4
  617. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -8
  618. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +7 -7
  619. data/src/core/lib/security/authorization/matchers.h +3 -3
  620. data/src/core/lib/security/authorization/rbac_policy.cc +1 -1
  621. data/src/core/lib/security/authorization/rbac_policy.h +3 -3
  622. data/src/core/lib/slice/slice.h +6 -0
  623. data/src/core/lib/slice/slice_buffer.cc +2 -2
  624. data/src/core/lib/slice/slice_buffer.h +2 -2
  625. data/src/core/lib/surface/call.cc +20 -22
  626. data/src/core/lib/surface/call.h +4 -3
  627. data/src/core/lib/surface/call_utils.cc +5 -5
  628. data/src/core/lib/surface/call_utils.h +11 -7
  629. data/src/core/lib/surface/channel.cc +6 -14
  630. data/src/core/lib/surface/channel.h +5 -5
  631. data/src/core/lib/surface/channel_init.cc +1 -1
  632. data/src/core/lib/surface/channel_init.h +2 -2
  633. data/src/core/lib/surface/completion_queue.cc +87 -66
  634. data/src/core/lib/surface/filter_stack_call.cc +42 -31
  635. data/src/core/lib/surface/filter_stack_call.h +2 -2
  636. data/src/core/lib/surface/init.cc +19 -15
  637. data/src/core/lib/surface/lame_client.cc +1 -1
  638. data/src/core/lib/surface/legacy_channel.cc +37 -31
  639. data/src/core/lib/surface/legacy_channel.h +3 -3
  640. data/src/core/lib/surface/version.cc +2 -2
  641. data/src/core/lib/transport/connectivity_state.cc +8 -9
  642. data/src/core/lib/transport/connectivity_state.h +2 -4
  643. data/src/core/lib/transport/error_utils.cc +65 -11
  644. data/src/core/lib/transport/error_utils.h +2 -2
  645. data/src/core/lib/transport/status_conversion.cc +16 -14
  646. data/src/core/lib/transport/status_conversion.h +5 -4
  647. data/src/core/lib/transport/timeout_encoding.cc +15 -15
  648. data/src/core/lib/transport/timeout_encoding.h +3 -2
  649. data/src/core/lib/transport/transport.cc +0 -1
  650. data/src/core/lib/transport/transport.h +17 -12
  651. data/src/core/lib/transport/transport_op_string.cc +1 -1
  652. data/src/core/load_balancing/backend_metric_parser.cc +21 -28
  653. data/src/core/load_balancing/delegating_helper.h +1 -1
  654. data/src/core/load_balancing/endpoint_list.cc +1 -1
  655. data/src/core/load_balancing/endpoint_list.h +7 -7
  656. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +2 -7
  657. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +4 -4
  658. data/src/core/load_balancing/grpclb/grpclb.cc +22 -40
  659. data/src/core/load_balancing/health_check_client.cc +16 -48
  660. data/src/core/load_balancing/health_check_client_internal.h +7 -7
  661. data/src/core/load_balancing/lb_policy.cc +4 -6
  662. data/src/core/load_balancing/lb_policy.h +4 -4
  663. data/src/core/load_balancing/lb_policy_registry.cc +10 -8
  664. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +57 -68
  665. data/src/core/load_balancing/outlier_detection/outlier_detection.h +4 -3
  666. data/src/core/load_balancing/pick_first/pick_first.cc +11 -966
  667. data/src/core/load_balancing/priority/priority.cc +8 -13
  668. data/src/core/load_balancing/ring_hash/ring_hash.cc +54 -90
  669. data/src/core/load_balancing/rls/rls.cc +132 -227
  670. data/src/core/load_balancing/rls/rls.h +97 -1
  671. data/src/core/load_balancing/round_robin/round_robin.cc +5 -5
  672. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +4 -4
  673. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +2 -2
  674. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +8 -14
  675. data/src/core/load_balancing/weighted_target/weighted_target.cc +8 -16
  676. data/src/core/load_balancing/xds/cds.cc +14 -25
  677. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -19
  678. data/src/core/load_balancing/xds/xds_cluster_manager.cc +10 -18
  679. data/src/core/load_balancing/xds/xds_override_host.cc +45 -92
  680. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  681. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  682. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -2
  683. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -10
  684. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -0
  685. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -15
  686. data/src/core/resolver/dns/native/dns_resolver.cc +1 -1
  687. data/src/core/resolver/fake/fake_resolver.cc +10 -11
  688. data/src/core/resolver/fake/fake_resolver.h +2 -2
  689. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +10 -13
  690. data/src/core/resolver/polling_resolver.cc +2 -5
  691. data/src/core/resolver/polling_resolver.h +3 -3
  692. data/src/core/resolver/resolver_registry.cc +4 -3
  693. data/src/core/resolver/xds/xds_config.cc +6 -6
  694. data/src/core/resolver/xds/xds_config.h +2 -2
  695. data/src/core/resolver/xds/xds_dependency_manager.cc +88 -80
  696. data/src/core/resolver/xds/xds_dependency_manager.h +4 -0
  697. data/src/core/resolver/xds/xds_resolver.cc +55 -77
  698. data/src/core/server/server.cc +78 -83
  699. data/src/core/server/server.h +17 -6
  700. data/src/core/server/server_call_tracer_filter.cc +4 -8
  701. data/src/core/server/server_config_selector.h +1 -1
  702. data/src/core/server/server_config_selector_filter.cc +9 -16
  703. data/src/core/server/xds_server_config_fetcher.cc +21 -23
  704. data/src/core/service_config/service_config_channel_arg_filter.cc +8 -20
  705. data/src/core/service_config/service_config_impl.cc +3 -3
  706. data/src/core/telemetry/call_tracer.cc +10 -12
  707. data/src/core/telemetry/call_tracer.h +8 -7
  708. data/src/core/telemetry/metrics.cc +33 -15
  709. data/src/core/telemetry/metrics.h +17 -11
  710. data/src/core/telemetry/stats_data.cc +75 -2
  711. data/src/core/telemetry/stats_data.h +46 -4
  712. data/src/core/telemetry/tcp_tracer.h +91 -85
  713. data/src/core/{lib/security/context/security_context.cc → transport/auth_context.cc} +1 -96
  714. data/src/core/{lib/security/context/security_context.h → transport/auth_context.h} +6 -76
  715. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -2
  716. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -14
  717. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  718. data/src/core/tsi/fake_transport_security.cc +5 -0
  719. data/src/core/tsi/ssl_transport_security.cc +1 -1
  720. data/src/core/util/check_class_size.h +48 -0
  721. data/src/core/util/dump_args.h +1 -9
  722. data/src/core/util/env.h +3 -4
  723. data/src/core/util/examine_stack.cc +2 -2
  724. data/src/core/util/examine_stack.h +3 -4
  725. data/src/core/util/gcp_metadata_query.cc +1 -1
  726. data/src/core/util/gpr_time.cc +0 -2
  727. data/src/core/util/http_client/httpcli.cc +7 -8
  728. data/src/core/util/http_client/httpcli.h +4 -4
  729. data/src/core/util/http_client/httpcli_security_connector.cc +5 -5
  730. data/src/core/util/json/json_channel_args.h +2 -1
  731. data/src/core/util/json/json_object_loader.cc +4 -4
  732. data/src/core/util/json/json_object_loader.h +12 -12
  733. data/src/core/util/json/json_reader.cc +4 -4
  734. data/src/core/util/json/json_writer.cc +3 -3
  735. data/src/core/util/latent_see.cc +3 -3
  736. data/src/core/util/latent_see.h +2 -2
  737. data/src/core/util/linux/env.cc +3 -4
  738. data/src/core/util/load_file.cc +26 -14
  739. data/src/core/util/lru_cache.h +4 -4
  740. data/src/core/util/match.h +7 -7
  741. data/src/core/util/matchers.cc +1 -2
  742. data/src/core/util/matchers.h +2 -2
  743. data/src/core/util/posix/env.cc +2 -2
  744. data/src/core/util/posix/sync.cc +0 -1
  745. data/src/core/util/posix/time.cc +0 -1
  746. data/src/core/util/ring_buffer.h +4 -5
  747. data/src/core/util/status_helper.cc +98 -79
  748. data/src/core/util/status_helper.h +13 -30
  749. data/src/core/util/sync_abseil.cc +0 -1
  750. data/src/core/util/table.h +6 -21
  751. data/src/core/util/time.cc +1 -1
  752. data/src/core/util/time.h +3 -3
  753. data/src/core/util/time_precise.cc +0 -1
  754. data/src/core/util/type_list.h +56 -0
  755. data/src/core/util/uri.cc +6 -4
  756. data/src/core/util/uri.h +7 -0
  757. data/src/core/util/useful.h +4 -4
  758. data/src/core/util/validation_errors.cc +5 -5
  759. data/src/core/util/wait_for_single_owner.h +62 -0
  760. data/src/core/util/windows/env.cc +3 -3
  761. data/src/core/util/windows/sync.cc +0 -1
  762. data/src/core/util/windows/time.cc +0 -1
  763. data/src/core/util/work_serializer.cc +27 -267
  764. data/src/core/util/work_serializer.h +3 -27
  765. data/src/core/xds/grpc/certificate_provider_store.cc +13 -18
  766. data/src/core/xds/grpc/certificate_provider_store.h +3 -3
  767. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +5 -5
  768. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  769. data/src/core/xds/grpc/xds_audit_logger_registry.cc +1 -1
  770. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +20 -20
  771. data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
  772. data/src/core/xds/grpc/xds_certificate_provider.cc +16 -16
  773. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  774. data/src/core/xds/grpc/xds_client_grpc.cc +14 -14
  775. data/src/core/xds/grpc/xds_client_grpc.h +4 -2
  776. data/src/core/xds/grpc/xds_cluster.h +7 -7
  777. data/src/core/xds/grpc/xds_cluster_parser.cc +28 -27
  778. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  779. data/src/core/xds/grpc/xds_common_types.cc +2 -2
  780. data/src/core/xds/grpc/xds_common_types.h +4 -4
  781. data/src/core/xds/grpc/xds_common_types_parser.cc +29 -31
  782. data/src/core/xds/grpc/xds_common_types_parser.h +8 -7
  783. data/src/core/xds/grpc/xds_endpoint.cc +3 -4
  784. data/src/core/xds/grpc/xds_endpoint_parser.cc +14 -14
  785. data/src/core/xds/grpc/xds_health_status.cc +4 -4
  786. data/src/core/xds/grpc/xds_health_status.h +4 -3
  787. data/src/core/xds/grpc/xds_http_fault_filter.cc +19 -21
  788. data/src/core/xds/grpc/xds_http_fault_filter.h +4 -3
  789. data/src/core/xds/grpc/xds_http_filter.h +4 -4
  790. data/src/core/xds/grpc/xds_http_filter_registry.cc +7 -7
  791. data/src/core/xds/grpc/xds_http_filter_registry.h +4 -4
  792. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +7 -7
  793. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +4 -3
  794. data/src/core/xds/grpc/xds_http_rbac_filter.cc +30 -23
  795. data/src/core/xds/grpc/xds_http_rbac_filter.h +4 -3
  796. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +10 -10
  797. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +4 -3
  798. data/src/core/xds/grpc/xds_lb_policy_registry.cc +4 -4
  799. data/src/core/xds/grpc/xds_listener.cc +4 -6
  800. data/src/core/xds/grpc/xds_listener.h +10 -10
  801. data/src/core/xds/grpc/xds_listener_parser.cc +58 -51
  802. data/src/core/xds/grpc/xds_listener_parser.h +2 -1
  803. data/src/core/xds/grpc/xds_metadata.cc +5 -5
  804. data/src/core/xds/grpc/xds_metadata_parser.cc +65 -52
  805. data/src/core/xds/grpc/xds_route_config.cc +9 -15
  806. data/src/core/xds/grpc/xds_route_config.h +10 -10
  807. data/src/core/xds/grpc/xds_route_config_parser.cc +115 -117
  808. data/src/core/xds/grpc/xds_route_config_parser.h +5 -5
  809. data/src/core/xds/grpc/xds_routing.cc +6 -6
  810. data/src/core/xds/grpc/xds_routing.h +6 -6
  811. data/src/core/xds/grpc/xds_server_grpc.cc +82 -49
  812. data/src/core/xds/grpc/xds_server_grpc.h +26 -13
  813. data/src/core/xds/grpc/xds_server_grpc_interface.h +33 -0
  814. data/src/core/xds/grpc/xds_transport_grpc.cc +10 -11
  815. data/src/core/xds/grpc/xds_transport_grpc.h +5 -3
  816. data/src/core/xds/xds_client/lrs_client.cc +77 -88
  817. data/src/core/xds/xds_client/lrs_client.h +15 -15
  818. data/src/core/xds/xds_client/xds_api.cc +5 -5
  819. data/src/core/xds/xds_client/xds_bootstrap.cc +11 -1
  820. data/src/core/xds/xds_client/xds_bootstrap.h +23 -1
  821. data/src/core/xds/xds_client/xds_client.cc +573 -378
  822. data/src/core/xds/xds_client/xds_client.h +42 -15
  823. data/src/core/xds/xds_client/xds_resource_type.h +3 -5
  824. data/src/core/xds/xds_client/xds_resource_type_impl.h +3 -3
  825. data/src/core/xds/xds_client/xds_transport.h +1 -1
  826. data/src/ruby/ext/grpc/extconf.rb +1 -1
  827. data/src/ruby/lib/grpc/version.rb +1 -1
  828. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.cc +13 -55
  829. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.cc +13 -55
  830. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.cc +13 -55
  831. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.cc +13 -55
  832. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.cc +17 -59
  833. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.cc +13 -55
  834. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.cc +13 -55
  835. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.cc +13 -55
  836. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.cc +13 -55
  837. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.cc +13 -55
  838. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.cc +13 -55
  839. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.cc +13 -55
  840. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.cc +41 -76
  841. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.cc +13 -55
  842. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.cc +17 -91
  843. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.cc +13 -55
  844. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.cc +13 -55
  845. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.cc +13 -55
  846. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.cc +13 -55
  847. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.cc +13 -55
  848. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -57
  849. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.cc +13 -13
  850. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.cc +13 -55
  851. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.cc +13 -55
  852. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.cc +13 -55
  853. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.cc +13 -55
  854. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +13 -55
  855. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.cc +13 -55
  856. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.cc +13 -55
  857. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +13 -13
  858. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.cc +13 -55
  859. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.cc +13 -55
  860. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.cc +16 -57
  861. data/third_party/boringssl-with-bazel/src/crypto/bio/errno.cc +13 -55
  862. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.cc +14 -56
  863. data/third_party/boringssl-with-bazel/src/crypto/bio/file.cc +14 -56
  864. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.cc +18 -58
  865. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +13 -55
  866. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.cc +15 -51
  867. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.cc +17 -60
  868. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +13 -55
  869. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.cc +13 -13
  870. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.cc +13 -13
  871. data/third_party/boringssl-with-bazel/src/crypto/{bn_extra → bn}/bn_asn1.cc +13 -13
  872. data/third_party/boringssl-with-bazel/src/crypto/{bn_extra → bn}/convert.cc +13 -55
  873. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.cc +14 -57
  874. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.cc +13 -13
  875. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.cc +13 -13
  876. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.cc +13 -13
  877. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.cc +23 -15
  878. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +13 -13
  879. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.cc +13 -13
  880. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.cc +13 -13
  881. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +18 -18
  882. data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +110 -0
  883. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_aesctrhmac.cc +18 -23
  884. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_aesgcmsiv.cc +20 -13
  885. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_chacha20poly1305.cc +13 -13
  886. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_des.cc +13 -55
  887. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_null.cc +51 -0
  888. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_rc2.cc +27 -69
  889. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_rc4.cc +54 -0
  890. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/e_tls.cc +13 -13
  891. data/third_party/boringssl-with-bazel/src/crypto/cipher/get_cipher.cc +85 -0
  892. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/internal.h +29 -69
  893. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/tls_cbc.cc +13 -51
  894. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.cc +14 -58
  895. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +13 -13
  896. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.cc +13 -15
  897. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.cc +13 -15
  898. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.cc +13 -15
  899. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.cc +13 -15
  900. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.cc +13 -15
  901. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.cc +14 -16
  902. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.cc +13 -14
  903. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +13 -14
  904. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +13 -13
  905. data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.cc +13 -67
  906. data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +14 -16
  907. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.cc +13 -13
  908. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.cc +13 -13
  909. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +13 -13
  910. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +13 -13
  911. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.cc +15 -13
  912. data/third_party/boringssl-with-bazel/src/crypto/des/des.cc +13 -55
  913. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +27 -69
  914. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +124 -0
  915. data/third_party/boringssl-with-bazel/src/crypto/{dh_extra → dh}/params.cc +13 -51
  916. data/third_party/boringssl-with-bazel/src/crypto/{digest_extra → digest}/digest_extra.cc +13 -55
  917. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.cc +13 -58
  918. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.cc +13 -53
  919. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +13 -13
  920. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra → ec}/ec_asn1.cc +24 -61
  921. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra → ec}/ec_derive.cc +13 -13
  922. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra → ec}/hash_to_curve.cc +14 -14
  923. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra → ec}/internal.h +13 -13
  924. data/third_party/boringssl-with-bazel/src/crypto/ecdh/ecdh.cc +73 -0
  925. data/third_party/boringssl-with-bazel/src/crypto/{ecdsa_extra → ecdsa}/ecdsa_asn1.cc +17 -61
  926. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.cc +13 -13
  927. data/third_party/boringssl-with-bazel/src/crypto/err/err.cc +17 -107
  928. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +13 -13
  929. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.cc +29 -79
  930. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.cc +122 -198
  931. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.cc +13 -55
  932. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +13 -55
  933. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh.cc +15 -8
  934. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh_asn1.cc +13 -8
  935. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.cc +56 -110
  936. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.cc +13 -54
  937. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.cc +20 -66
  938. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.cc +13 -13
  939. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.cc +13 -13
  940. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.cc +13 -13
  941. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.cc +19 -57
  942. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.cc +13 -54
  943. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.cc +13 -13
  944. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.cc +13 -13
  945. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.cc +29 -77
  946. data/third_party/boringssl-with-bazel/src/crypto/evp/print.cc +13 -51
  947. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.cc +13 -8
  948. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +13 -55
  949. data/third_party/boringssl-with-bazel/src/crypto/ex_data.cc +13 -107
  950. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +112 -48
  951. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.cc.inc +13 -13
  952. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes → aes}/cbc.cc.inc +13 -47
  953. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes → aes}/cfb.cc.inc +13 -47
  954. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/ctr.cc.inc +100 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes → aes}/gcm.cc.inc +127 -314
  956. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes → aes}/gcm_nohw.cc.inc +13 -13
  957. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +419 -66
  958. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.cc.inc +13 -47
  959. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +13 -53
  960. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/ofb.cc.inc +53 -0
  961. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes → aes}/polyval.cc.inc +13 -13
  962. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.cc +28 -20
  963. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +501 -14
  964. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.cc.inc +13 -55
  965. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +15 -2
  966. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.cc.inc +13 -55
  967. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.cc.inc +13 -55
  968. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.cc.inc +13 -55
  969. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.cc.inc +16 -57
  970. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.cc.inc +13 -55
  971. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.cc.inc +13 -13
  972. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.cc.inc +16 -109
  973. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.cc.inc +13 -107
  974. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +13 -13
  975. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.cc.inc +13 -55
  976. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -134
  977. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +13 -51
  978. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.cc.inc +14 -109
  979. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.cc.inc +13 -13
  980. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.cc.inc +13 -55
  981. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.cc.inc +13 -107
  982. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.cc.inc +13 -107
  983. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.cc.inc +18 -13
  984. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +20 -17
  985. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.cc.inc +13 -55
  986. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.cc.inc +13 -53
  987. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.cc.inc +13 -13
  988. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.cc.inc +14 -56
  989. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.cc.inc +69 -283
  990. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aesccm.cc.inc +21 -58
  991. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +14 -65
  992. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cmac/cmac.cc.inc +13 -47
  993. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +13 -13
  994. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.cc.inc +13 -55
  995. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.cc.inc +13 -55
  996. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +13 -13
  997. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.cc.inc +13 -55
  998. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.cc.inc +13 -55
  999. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +13 -55
  1000. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +13 -47
  1001. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digestsign/digestsign.cc.inc +13 -54
  1002. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +91 -91
  1003. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.cc.inc +14 -66
  1004. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.cc.inc +14 -72
  1005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.cc.inc +14 -66
  1006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.cc.inc +13 -13
  1007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +19 -66
  1008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.cc.inc +14 -66
  1009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.cc.inc +13 -13
  1010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz-table.h +15 -10
  1011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.cc.inc +22 -17
  1012. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +22 -17
  1013. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.cc.inc +13 -13
  1014. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +13 -13
  1015. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.cc.inc +21 -15
  1016. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.cc.inc +14 -66
  1017. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.cc.inc +13 -13
  1018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.cc.inc +13 -13
  1019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.cc.inc +14 -66
  1020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.cc.inc +14 -65
  1021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +13 -51
  1022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +13 -13
  1023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.cc +13 -13
  1024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.cc.inc +13 -13
  1025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.cc.inc +13 -55
  1026. data/third_party/boringssl-with-bazel/src/crypto/{keccak → fipsmodule/keccak}/internal.h +13 -13
  1027. data/third_party/boringssl-with-bazel/src/crypto/{keccak/keccak.cc → fipsmodule/keccak/keccak.cc.inc} +14 -14
  1028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +1993 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +1165 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.cc.inc +18 -25
  1031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +18 -24
  1032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.cc.inc +15 -13
  1033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.cc.inc +14 -109
  1034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +13 -56
  1035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.cc.inc +13 -54
  1036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.cc.inc +18 -77
  1037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +38 -90
  1038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.cc.inc +13 -13
  1039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.cc.inc +13 -13
  1040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +34 -34
  1041. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +13 -13
  1042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +44 -56
  1043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.cc.inc +13 -55
  1044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.cc.inc +13 -55
  1045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.cc.inc +13 -55
  1046. data/third_party/boringssl-with-bazel/src/crypto/{slhdsa → fipsmodule/slhdsa}/address.h +28 -32
  1047. data/third_party/boringssl-with-bazel/src/crypto/{slhdsa/fors.cc → fipsmodule/slhdsa/fors.cc.inc} +44 -44
  1048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fors.h +58 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/{slhdsa/merkle.cc → fipsmodule/slhdsa/merkle.cc.inc} +46 -46
  1050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/merkle.h +70 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/{slhdsa → fipsmodule/slhdsa}/params.h +20 -25
  1052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +329 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/thash.cc.inc +173 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/thash.h +85 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/{slhdsa/wots.cc → fipsmodule/slhdsa/wots.cc.inc} +46 -46
  1056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/wots.h +50 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +13 -13
  1058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.cc.inc +13 -51
  1059. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.cc +13 -13
  1060. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.cc +21 -13
  1061. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +13 -13
  1062. data/third_party/boringssl-with-bazel/src/crypto/internal.h +82 -208
  1063. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +13 -13
  1064. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.cc +52 -28
  1065. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +31 -75
  1066. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.cc +13 -55
  1067. data/third_party/boringssl-with-bazel/src/crypto/md4/md4.cc +13 -55
  1068. data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +13 -13
  1069. data/third_party/boringssl-with-bazel/src/crypto/md5/md5.cc +13 -55
  1070. data/third_party/boringssl-with-bazel/src/crypto/mem.cc +13 -55
  1071. data/third_party/boringssl-with-bazel/src/crypto/mldsa/mldsa.cc +47 -1747
  1072. data/third_party/boringssl-with-bazel/src/crypto/mlkem/mlkem.cc +97 -1042
  1073. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.cc +13 -55
  1074. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +14 -56
  1075. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.cc +13 -55
  1076. data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +44 -0
  1077. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.cc +13 -107
  1078. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.cc +18 -58
  1079. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.cc +56 -103
  1080. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.cc +13 -55
  1081. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.cc +13 -55
  1082. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.cc +13 -55
  1083. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.cc +13 -55
  1084. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.cc +13 -55
  1085. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +13 -13
  1086. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.cc +13 -13
  1087. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.cc +15 -13
  1088. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +13 -54
  1089. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.cc +13 -54
  1090. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.cc +13 -54
  1091. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.cc +13 -54
  1092. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +13 -13
  1093. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.cc +13 -13
  1094. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.cc +13 -13
  1095. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.cc +13 -13
  1096. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +13 -13
  1097. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.cc +13 -13
  1098. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/deterministic.cc +13 -13
  1099. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/fork_detect.cc +13 -13
  1100. data/third_party/boringssl-with-bazel/src/crypto/rand/forkunsafe.cc +44 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/getentropy.cc +13 -13
  1102. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/getrandom_fillin.h +13 -13
  1103. data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +42 -0
  1104. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/passive.cc +13 -13
  1105. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/rand_extra.cc → rand/rand.cc} +13 -13
  1106. data/third_party/boringssl-with-bazel/src/crypto/rand/sysrand_internal.h +37 -0
  1107. data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +46 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/urandom.cc +13 -13
  1109. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/windows.cc +13 -13
  1110. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.cc +13 -55
  1111. data/third_party/boringssl-with-bazel/src/crypto/refcount.cc +13 -13
  1112. data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +36 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/{rsa_extra → rsa}/rsa_asn1.cc +13 -54
  1114. data/third_party/boringssl-with-bazel/src/crypto/{rsa_extra → rsa}/rsa_crypt.cc +13 -55
  1115. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_extra.cc +19 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_print.cc +27 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/sha/sha1.cc +13 -13
  1118. data/third_party/boringssl-with-bazel/src/crypto/sha/sha256.cc +13 -13
  1119. data/third_party/boringssl-with-bazel/src/crypto/sha/sha512.cc +13 -13
  1120. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.cc +13 -13
  1121. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/slhdsa.cc +62 -256
  1122. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +204 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/spake2plus.cc +501 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.cc +13 -55
  1125. data/third_party/boringssl-with-bazel/src/crypto/thread.cc +13 -55
  1126. data/third_party/boringssl-with-bazel/src/crypto/thread_none.cc +13 -13
  1127. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.cc +13 -13
  1128. data/third_party/boringssl-with-bazel/src/crypto/thread_win.cc +13 -13
  1129. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +13 -13
  1130. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.cc +14 -14
  1131. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.cc +14 -14
  1132. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.cc +14 -14
  1133. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.cc +13 -55
  1134. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +13 -55
  1135. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.cc +13 -55
  1136. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.cc +13 -55
  1137. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.cc +14 -56
  1138. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.cc +25 -71
  1139. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.cc +13 -55
  1140. data/third_party/boringssl-with-bazel/src/crypto/x509/ext_dat.h +13 -55
  1141. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.cc +13 -55
  1142. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +13 -57
  1143. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.cc +13 -55
  1144. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.cc +13 -13
  1145. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.cc +13 -54
  1146. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.cc +13 -55
  1147. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.cc +13 -55
  1148. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.cc +13 -55
  1149. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.cc +13 -55
  1150. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_akey.cc +13 -55
  1151. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_akeya.cc +13 -55
  1152. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_alt.cc +13 -54
  1153. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bcons.cc +13 -55
  1154. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bitst.cc +13 -55
  1155. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_conf.cc +13 -55
  1156. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_cpols.cc +13 -57
  1157. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_crld.cc +13 -55
  1158. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_enum.cc +13 -55
  1159. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_extku.cc +13 -55
  1160. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_genn.cc +13 -55
  1161. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_ia5.cc +13 -57
  1162. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.cc +17 -66
  1163. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_int.cc +13 -55
  1164. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_lib.cc +14 -57
  1165. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_ncons.cc +13 -54
  1166. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_ocsp.cc +13 -8
  1167. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_pcons.cc +13 -54
  1168. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_pmaps.cc +13 -54
  1169. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_prn.cc +13 -55
  1170. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_purp.cc +13 -55
  1171. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_skey.cc +13 -55
  1172. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.cc +17 -70
  1173. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.cc +13 -55
  1174. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.cc +13 -55
  1175. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.cc +13 -55
  1176. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.cc +13 -55
  1177. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.cc +13 -55
  1178. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.cc +13 -55
  1179. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.cc +14 -60
  1180. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.cc +13 -55
  1181. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.cc +13 -55
  1182. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.cc +13 -55
  1183. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.cc +13 -55
  1184. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.cc +13 -55
  1185. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.cc +13 -55
  1186. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.cc +13 -55
  1187. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.cc +13 -55
  1188. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.cc +13 -55
  1189. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.cc +13 -55
  1190. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.cc +13 -55
  1191. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.cc +13 -55
  1192. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +13 -55
  1193. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.cc +13 -55
  1194. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.cc +13 -55
  1195. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.cc +13 -55
  1196. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.cc +13 -55
  1197. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.cc +13 -55
  1198. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.cc +13 -55
  1199. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.cc +13 -55
  1200. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.cc +13 -55
  1201. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.cc +13 -58
  1202. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.cc +13 -55
  1203. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.cc +13 -55
  1204. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.cc +13 -55
  1205. data/third_party/boringssl-with-bazel/src/gen/crypto/err_data.cc +465 -451
  1206. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -13
  1207. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +13 -47
  1208. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +16 -76
  1209. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +14 -14
  1210. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +23 -62
  1211. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +13 -13
  1212. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +14 -56
  1213. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +15 -53
  1214. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +13 -55
  1215. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +13 -13
  1216. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +13 -55
  1217. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +13 -13
  1218. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +13 -55
  1219. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +14 -121
  1220. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +13 -55
  1221. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +13 -13
  1222. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +31 -16
  1223. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +13 -55
  1224. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +13 -13
  1225. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +31 -59
  1226. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +13 -13
  1227. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +13 -55
  1228. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +13 -13
  1229. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +13 -13
  1230. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +13 -13
  1231. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +13 -13
  1232. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +13 -55
  1233. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +13 -55
  1234. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +13 -55
  1235. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +13 -58
  1236. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +13 -13
  1237. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +13 -13
  1238. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +14 -66
  1239. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +14 -71
  1240. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +14 -65
  1241. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +13 -51
  1242. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +13 -13
  1243. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +13 -107
  1244. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +13 -55
  1245. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +13 -55
  1246. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +13 -107
  1247. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +13 -13
  1248. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +13 -13
  1249. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +13 -55
  1250. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +13 -13
  1251. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +13 -13
  1252. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +13 -13
  1253. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +13 -13
  1254. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +13 -55
  1255. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +13 -55
  1256. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +13 -55
  1257. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +13 -55
  1258. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +13 -19
  1259. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +13 -37
  1260. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +27 -69
  1261. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +13 -55
  1262. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +13 -13
  1263. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +13 -13
  1264. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +13 -13
  1265. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +13 -13
  1266. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +13 -13
  1267. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +22 -60
  1268. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +13 -13
  1269. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +13 -13
  1270. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +13 -55
  1271. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +13 -13
  1272. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +13 -13
  1273. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +13 -13
  1274. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -13
  1275. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +13 -55
  1276. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +13 -55
  1277. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +13 -58
  1278. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +13 -13
  1279. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +13 -13
  1280. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +13 -55
  1281. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +13 -13
  1282. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +54 -13
  1283. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +19 -32
  1284. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +13 -13
  1285. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +198 -174
  1286. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +14 -114
  1287. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +13 -55
  1288. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +23 -13
  1289. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +13 -55
  1290. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +13 -13
  1291. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -156
  1292. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +15 -15
  1293. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +13 -55
  1294. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +14 -61
  1295. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +13 -13
  1296. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +13 -13
  1297. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3_errors.h +13 -53
  1298. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +13 -8
  1299. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +15 -114
  1300. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +13 -55
  1301. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +13 -110
  1302. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +17 -115
  1303. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -55
  1304. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +16 -115
  1305. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +32 -34
  1306. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +310 -132
  1307. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +19 -16
  1308. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -123
  1309. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +56 -175
  1310. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +27 -158
  1311. data/third_party/boringssl-with-bazel/src/ssl/internal.h +117 -246
  1312. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +22 -120
  1313. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +16 -148
  1314. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +16 -110
  1315. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +16 -16
  1316. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +14 -81
  1317. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +15 -20
  1318. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +14 -113
  1319. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +19 -145
  1320. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +166 -38
  1321. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +13 -109
  1322. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +15 -17
  1323. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -184
  1324. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +23 -67
  1325. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +25 -144
  1326. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +14 -82
  1327. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +20 -143
  1328. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +15 -15
  1329. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +15 -139
  1330. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +28 -156
  1331. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +16 -16
  1332. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +92 -44
  1333. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +68 -80
  1334. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +155 -53
  1335. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +13 -55
  1336. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +15 -109
  1337. data/third_party/upb/upb/base/internal/log2.h +3 -1
  1338. data/third_party/upb/upb/base/string_view.h +10 -0
  1339. data/third_party/upb/upb/hash/common.c +5 -1
  1340. data/third_party/upb/upb/json/decode.c +2 -2
  1341. data/third_party/upb/upb/json/decode.h +0 -1
  1342. data/third_party/upb/upb/mem/alloc.h +5 -0
  1343. data/third_party/upb/upb/mem/arena.c +296 -142
  1344. data/third_party/upb/upb/mem/arena.h +47 -11
  1345. data/third_party/upb/upb/mem/arena.hpp +4 -20
  1346. data/third_party/upb/upb/mem/internal/arena.h +4 -6
  1347. data/third_party/upb/upb/message/accessors.h +41 -0
  1348. data/third_party/upb/upb/message/compat.c +11 -14
  1349. data/third_party/upb/upb/message/compat.h +4 -3
  1350. data/third_party/upb/upb/message/copy.c +35 -30
  1351. data/third_party/upb/upb/message/internal/accessors.h +139 -10
  1352. data/third_party/upb/upb/message/internal/extension.c +28 -25
  1353. data/third_party/upb/upb/message/internal/extension.h +21 -5
  1354. data/third_party/upb/upb/message/internal/iterator.c +58 -0
  1355. data/third_party/upb/upb/message/internal/iterator.h +29 -0
  1356. data/third_party/upb/upb/message/internal/map.h +2 -3
  1357. data/third_party/upb/upb/message/internal/map_sorter.h +3 -2
  1358. data/third_party/upb/upb/message/internal/message.c +48 -29
  1359. data/third_party/upb/upb/message/internal/message.h +154 -24
  1360. data/third_party/upb/upb/message/map_sorter.c +20 -8
  1361. data/third_party/upb/upb/message/message.c +90 -38
  1362. data/third_party/upb/upb/message/message.h +58 -2
  1363. data/third_party/upb/upb/message/value.h +9 -0
  1364. data/third_party/upb/upb/mini_descriptor/build_enum.c +1 -1
  1365. data/third_party/upb/upb/mini_descriptor/decode.c +97 -136
  1366. data/third_party/upb/upb/mini_descriptor/decode.h +4 -3
  1367. data/third_party/upb/upb/mini_descriptor/internal/encode.hpp +1 -1
  1368. data/third_party/upb/upb/mini_table/extension_registry.c +24 -12
  1369. data/third_party/upb/upb/mini_table/extension_registry.h +13 -6
  1370. data/third_party/upb/upb/mini_table/message.c +21 -13
  1371. data/third_party/upb/upb/port/atomic.h +134 -7
  1372. data/third_party/upb/upb/port/def.inc +140 -38
  1373. data/third_party/upb/upb/port/undef.inc +11 -1
  1374. data/third_party/upb/upb/reflection/def.hpp +5 -1
  1375. data/third_party/upb/upb/reflection/def_pool.c +10 -3
  1376. data/third_party/upb/upb/reflection/descriptor_bootstrap.h +1 -1
  1377. data/third_party/upb/upb/reflection/file_def.c +12 -5
  1378. data/third_party/upb/upb/reflection/internal/def_builder.c +1 -1
  1379. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  1380. data/third_party/upb/upb/reflection/message.c +19 -16
  1381. data/third_party/upb/upb/reflection/message.h +3 -1
  1382. data/third_party/upb/upb/text/encode.c +1 -13
  1383. data/third_party/upb/upb/text/internal/encode.c +25 -6
  1384. data/third_party/upb/upb/text/internal/encode.h +4 -0
  1385. data/third_party/upb/upb/wire/decode.c +60 -45
  1386. data/third_party/upb/upb/wire/decode.h +4 -2
  1387. data/third_party/upb/upb/wire/encode.c +77 -42
  1388. data/third_party/upb/upb/wire/encode.h +2 -0
  1389. data/third_party/upb/upb/wire/eps_copy_input_stream.h +18 -20
  1390. data/third_party/upb/upb/wire/internal/decoder.h +4 -11
  1391. data/third_party/utf8_range/utf8_range.c +15 -275
  1392. data/third_party/utf8_range/utf8_range_neon.inc +117 -0
  1393. data/third_party/utf8_range/utf8_range_sse.inc +272 -0
  1394. data/third_party/zlib/deflate.c +40 -15
  1395. data/third_party/zlib/deflate.h +33 -2
  1396. data/third_party/zlib/gzguts.h +2 -6
  1397. data/third_party/zlib/inflate.c +1 -1
  1398. data/third_party/zlib/inftrees.c +3 -3
  1399. data/third_party/zlib/inftrees.h +2 -2
  1400. data/third_party/zlib/trees.c +18 -4
  1401. data/third_party/zlib/zconf.h +1 -9
  1402. data/third_party/zlib/zlib.h +12 -12
  1403. data/third_party/zlib/zutil.h +4 -25
  1404. metadata +227 -208
  1405. data/include/grpc/grpc_cronet.h +0 -37
  1406. data/src/core/lib/transport/http2_errors.h +0 -41
  1407. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.cc +0 -127
  1408. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.cc +0 -152
  1409. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.cc +0 -93
  1410. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.cc +0 -96
  1411. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.cc +0 -165
  1412. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.cc +0 -124
  1413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.cc.inc +0 -196
  1414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +0 -448
  1415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.cc.inc +0 -87
  1416. data/third_party/boringssl-with-bazel/src/crypto/mldsa/internal.h +0 -76
  1417. data/third_party/boringssl-with-bazel/src/crypto/mlkem/internal.h +0 -90
  1418. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.cc +0 -44
  1419. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/ios.cc +0 -42
  1420. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/sysrand_internal.h +0 -37
  1421. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/trusty.cc +0 -46
  1422. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +0 -79
  1423. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_extra.cc +0 -17
  1424. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.cc +0 -22
  1425. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/fors.h +0 -58
  1426. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/internal.h +0 -63
  1427. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/merkle.h +0 -70
  1428. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.cc +0 -173
  1429. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.h +0 -85
  1430. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/wots.h +0 -50
  1431. data/third_party/upb/upb/message/internal/compare_unknown.c +0 -289
  1432. data/third_party/upb/upb/message/internal/compare_unknown.h +0 -49
@@ -24,6 +24,7 @@
24
24
  #include <algorithm>
25
25
  #include <functional>
26
26
  #include <memory>
27
+ #include <optional>
27
28
  #include <string>
28
29
  #include <type_traits>
29
30
  #include <vector>
@@ -37,7 +38,6 @@
37
38
  #include "absl/strings/str_split.h"
38
39
  #include "absl/strings/string_view.h"
39
40
  #include "absl/strings/strip.h"
40
- #include "absl/types/optional.h"
41
41
  #include "envoy/config/core/v3/base.upb.h"
42
42
  #include "envoy/service/discovery/v3/discovery.upb.h"
43
43
  #include "envoy/service/discovery/v3/discovery.upbdefs.h"
@@ -111,7 +111,7 @@ class XdsClient::XdsChannel::RetryableCall final
111
111
 
112
112
  // Retry state.
113
113
  BackOff backoff_;
114
- absl::optional<EventEngine::TaskHandle> timer_handle_
114
+ std::optional<EventEngine::TaskHandle> timer_handle_
115
115
  ABSL_GUARDED_BY(&XdsClient::mu_);
116
116
 
117
117
  bool shutting_down_ = false;
@@ -124,7 +124,10 @@ class XdsClient::XdsChannel::AdsCall final
124
124
  // The ctor and dtor should not be used directly.
125
125
  explicit AdsCall(RefCountedPtr<RetryableCall<AdsCall>> retryable_call);
126
126
 
127
- void Orphan() override;
127
+ // Disable thread-safety analysis because this method is called via
128
+ // OrphanablePtr<>, but there's no way to pass the lock annotation
129
+ // through there.
130
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
128
131
 
129
132
  RetryableCall<AdsCall>* retryable_call() const {
130
133
  return retryable_call_.get();
@@ -204,14 +207,20 @@ class XdsClient::XdsChannel::AdsCall final
204
207
  // optimize by not resending the resource that we already have.
205
208
  auto& authority_state =
206
209
  ads_call->xds_client()->authority_state_map_[name_.authority];
207
- ResourceState& state = authority_state.resource_map[type_][name_.key];
210
+ ResourceState& state = authority_state.type_map[type_][name_.key];
208
211
  if (state.HasResource()) return;
209
212
  // Start timer.
210
213
  ads_call_ = std::move(ads_call);
214
+ Duration timeout = ads_call_->xds_client()->request_timeout_;
215
+ if (timeout == Duration::Zero()) {
216
+ timeout = XdsDataErrorHandlingEnabled() &&
217
+ ads_call_->xds_channel()
218
+ ->server_.ResourceTimerIsTransientFailure()
219
+ ? Duration::Seconds(30)
220
+ : Duration::Seconds(15);
221
+ }
211
222
  timer_handle_ = ads_call_->xds_client()->engine()->RunAfter(
212
- ads_call_->xds_client()->request_timeout_,
213
- [self = Ref(DEBUG_LOCATION, "timer")]() {
214
- ApplicationCallbackExecCtx callback_exec_ctx;
223
+ timeout, [self = Ref(DEBUG_LOCATION, "timer")]() {
215
224
  ExecCtx exec_ctx;
216
225
  self->OnTimer();
217
226
  });
@@ -223,26 +232,33 @@ class XdsClient::XdsChannel::AdsCall final
223
232
  timer_handle_.reset();
224
233
  auto& authority_state =
225
234
  ads_call_->xds_client()->authority_state_map_[name_.authority];
226
- ResourceState& state = authority_state.resource_map[type_][name_.key];
235
+ ResourceState& state = authority_state.type_map[type_][name_.key];
227
236
  // We might have received the resource after the timer fired but before
228
237
  // the callback ran.
229
238
  if (!state.HasResource()) {
230
239
  GRPC_TRACE_LOG(xds_client, INFO)
231
240
  << "[xds_client " << ads_call_->xds_client() << "] xds server "
232
- << ads_call_->xds_channel()->server_.server_uri()
241
+ << ads_call_->xds_channel()->server_uri()
233
242
  << ": timeout obtaining resource {type=" << type_->type_url()
234
243
  << " name="
235
244
  << XdsClient::ConstructFullXdsResourceName(
236
245
  name_.authority, type_->type_url(), name_.key)
237
246
  << "} from xds server";
238
247
  resource_seen_ = true;
239
- state.SetDoesNotExist();
248
+ if (XdsDataErrorHandlingEnabled() &&
249
+ ads_call_->xds_channel()
250
+ ->server_.ResourceTimerIsTransientFailure()) {
251
+ state.SetTimeout(
252
+ absl::StrCat("timeout obtaining resource from xDS server ",
253
+ ads_call_->xds_channel()->server_uri()));
254
+ } else {
255
+ state.SetDoesNotExistOnTimeout();
256
+ }
240
257
  ads_call_->xds_client()->NotifyWatchersOnResourceChanged(
241
- absl::NotFoundError("does not exist"), state.watchers(),
258
+ state.failed_status(), state.watchers(),
242
259
  ReadDelayHandle::NoWait());
243
260
  }
244
261
  }
245
- ads_call_->xds_client()->work_serializer_.DrainQueue();
246
262
  ads_call_.reset();
247
263
  }
248
264
 
@@ -257,7 +273,7 @@ class XdsClient::XdsChannel::AdsCall final
257
273
  // stream or (b) declared the resource to not exist due to the timer
258
274
  // firing.
259
275
  bool resource_seen_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
260
- absl::optional<EventEngine::TaskHandle> timer_handle_
276
+ std::optional<EventEngine::TaskHandle> timer_handle_
261
277
  ABSL_GUARDED_BY(&XdsClient::mu_);
262
278
  };
263
279
 
@@ -319,6 +335,11 @@ class XdsClient::XdsChannel::AdsCall final
319
335
  absl::string_view serialized_resource,
320
336
  DecodeContext* context)
321
337
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
338
+ void HandleServerReportedResourceError(size_t idx,
339
+ absl::string_view resource_name,
340
+ absl::Status status,
341
+ DecodeContext* context)
342
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
322
343
  absl::Status DecodeAdsResponse(absl::string_view encoded_response,
323
344
  DecodeContext* context)
324
345
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
@@ -384,9 +405,10 @@ XdsClient::XdsChannel::XdsChannel(WeakRefCountedPtr<XdsClient> xds_client,
384
405
  server_(server) {
385
406
  GRPC_TRACE_LOG(xds_client, INFO)
386
407
  << "[xds_client " << xds_client_.get() << "] creating channel " << this
387
- << " for server " << server.server_uri();
408
+ << " for server " << server_uri();
388
409
  absl::Status status;
389
- transport_ = xds_client_->transport_factory_->GetTransport(server, &status);
410
+ transport_ =
411
+ xds_client_->transport_factory_->GetTransport(*server.target(), &status);
390
412
  CHECK(transport_ != nullptr);
391
413
  if (!status.ok()) {
392
414
  SetChannelStatusLocked(std::move(status));
@@ -400,7 +422,7 @@ XdsClient::XdsChannel::XdsChannel(WeakRefCountedPtr<XdsClient> xds_client,
400
422
  XdsClient::XdsChannel::~XdsChannel() {
401
423
  GRPC_TRACE_LOG(xds_client, INFO)
402
424
  << "[xds_client " << xds_client() << "] destroying xds channel " << this
403
- << " for server " << server_.server_uri();
425
+ << " for server " << server_uri();
404
426
  xds_client_.reset(DEBUG_LOCATION, "XdsChannel");
405
427
  }
406
428
 
@@ -411,7 +433,7 @@ XdsClient::XdsChannel::~XdsChannel() {
411
433
  void XdsClient::XdsChannel::Orphaned() ABSL_NO_THREAD_SAFETY_ANALYSIS {
412
434
  GRPC_TRACE_LOG(xds_client, INFO)
413
435
  << "[xds_client " << xds_client() << "] orphaning xds channel " << this
414
- << " for server " << server_.server_uri();
436
+ << " for server " << server_uri();
415
437
  shutting_down_ = true;
416
438
  if (failure_watcher_ != nullptr) {
417
439
  transport_->StopConnectivityFailureWatch(failure_watcher_);
@@ -427,16 +449,12 @@ void XdsClient::XdsChannel::Orphaned() ABSL_NO_THREAD_SAFETY_ANALYSIS {
427
449
 
428
450
  void XdsClient::XdsChannel::ResetBackoff() { transport_->ResetBackoff(); }
429
451
 
430
- XdsClient::XdsChannel::AdsCall* XdsClient::XdsChannel::ads_call() const {
431
- return ads_call_->call();
432
- }
433
-
434
452
  void XdsClient::XdsChannel::SubscribeLocked(const XdsResourceType* type,
435
453
  const XdsResourceName& name) {
436
454
  if (ads_call_ == nullptr) {
437
455
  // Start the ADS call if this is the first request.
438
- ads_call_.reset(
439
- new RetryableCall<AdsCall>(WeakRef(DEBUG_LOCATION, "XdsChannel+ads")));
456
+ ads_call_ = MakeOrphanable<RetryableCall<AdsCall>>(
457
+ WeakRef(DEBUG_LOCATION, "XdsChannel+ads"));
440
458
  // Note: AdsCall's ctor will automatically subscribe to all
441
459
  // resources that the XdsClient already has watchers for, so we can
442
460
  // return here.
@@ -444,9 +462,9 @@ void XdsClient::XdsChannel::SubscribeLocked(const XdsResourceType* type,
444
462
  }
445
463
  // If the ADS call is in backoff state, we don't need to do anything now
446
464
  // because when the call is restarted it will resend all necessary requests.
447
- if (ads_call() == nullptr) return;
465
+ if (ads_call_->call() == nullptr) return;
448
466
  // Subscribe to this resource if the ADS call is active.
449
- ads_call()->SubscribeLocked(type, name, /*delay_send=*/false);
467
+ ads_call_->call()->SubscribeLocked(type, name, /*delay_send=*/false);
450
468
  }
451
469
 
452
470
  void XdsClient::XdsChannel::UnsubscribeLocked(const XdsResourceType* type,
@@ -459,6 +477,12 @@ void XdsClient::XdsChannel::UnsubscribeLocked(const XdsResourceType* type,
459
477
  if (!call->HasSubscribedResources()) {
460
478
  ads_call_.reset();
461
479
  }
480
+ } else {
481
+ // If there is currently no ADS call because we're in retry backoff,
482
+ // then we immediately trigger deletion of unsubscribed cache entries.
483
+ // This may orphan the XdsChannel, which would stop the retry
484
+ // timer, since we would no longer need to restart the ADS call.
485
+ xds_client_->MaybeRemoveUnsubscribedCacheEntriesForTypeLocked(this, type);
462
486
  }
463
487
  }
464
488
  }
@@ -478,16 +502,19 @@ bool XdsClient::XdsChannel::MaybeFallbackLocked(
478
502
  ++i) {
479
503
  authority_state.xds_channels.emplace_back(
480
504
  xds_client_->GetOrCreateXdsChannelLocked(*xds_servers[i], "fallback"));
481
- for (const auto& type_resource : authority_state.resource_map) {
482
- for (const auto& key_state : type_resource.second) {
483
- authority_state.xds_channels.back()->SubscribeLocked(
484
- type_resource.first, {authority, key_state.first});
505
+ for (const auto& [type, resource_map] : authority_state.type_map) {
506
+ for (const auto& [key, resource_state] : resource_map) {
507
+ if (resource_state.HasWatchers()) {
508
+ authority_state.xds_channels.back()->SubscribeLocked(
509
+ type, {authority, key});
510
+ }
485
511
  }
486
512
  }
487
513
  GRPC_TRACE_LOG(xds_client, INFO)
488
514
  << "[xds_client " << xds_client_.get() << "] authority " << authority
489
- << ": added fallback server " << xds_servers[i]->server_uri() << " ("
490
- << authority_state.xds_channels.back()->status().ToString() << ")";
515
+ << ": added fallback server " << xds_servers[i]->target()->server_uri()
516
+ << " (" << authority_state.xds_channels.back()->status().ToString()
517
+ << ")";
491
518
  if (authority_state.xds_channels.back()->status().ok()) return true;
492
519
  }
493
520
  GRPC_TRACE_LOG(xds_client, INFO)
@@ -502,39 +529,43 @@ void XdsClient::XdsChannel::SetHealthyLocked() {
502
529
  // 1. Channel is on the list of authority channels
503
530
  // 2. Channel is not the last channel on the list (i.e. not the active
504
531
  // channel)
505
- for (auto& authority : xds_client_->authority_state_map_) {
506
- auto& channels = authority.second.xds_channels;
532
+ for (auto& [authority, authority_state] : xds_client_->authority_state_map_) {
533
+ auto& channels = authority_state.xds_channels;
507
534
  // Skip if channel is active.
508
535
  if (channels.back() == this) continue;
509
536
  auto channel_it = std::find(channels.begin(), channels.end(), this);
510
537
  // Skip if this is not on the list
511
538
  if (channel_it != channels.end()) {
512
539
  GRPC_TRACE_LOG(xds_client, INFO)
513
- << "[xds_client " << xds_client_.get() << "] authority "
514
- << authority.first << ": Falling forward to " << server_.server_uri();
540
+ << "[xds_client " << xds_client_.get() << "] authority " << authority
541
+ << ": Falling forward to " << server_uri();
515
542
  // Lower priority channels are no longer needed, connection is back!
543
+ // Note that we move the lower priority channels out of the vector
544
+ // before we unref them, or else
545
+ // MaybeRemoveUnsubscribedCacheEntriesForTypeLocked() will try to
546
+ // access the vector while we are modifying it.
547
+ std::vector<RefCountedPtr<XdsChannel>> channels_to_unref(
548
+ std::make_move_iterator(channel_it + 1),
549
+ std::make_move_iterator(channels.end()));
516
550
  channels.erase(channel_it + 1, channels.end());
517
551
  }
518
552
  }
519
553
  }
520
554
 
521
555
  void XdsClient::XdsChannel::OnConnectivityFailure(absl::Status status) {
522
- {
523
- MutexLock lock(&xds_client_->mu_);
524
- SetChannelStatusLocked(std::move(status));
525
- }
526
- xds_client_->work_serializer_.DrainQueue();
556
+ MutexLock lock(&xds_client_->mu_);
557
+ SetChannelStatusLocked(std::move(status));
527
558
  }
528
559
 
529
560
  void XdsClient::XdsChannel::SetChannelStatusLocked(absl::Status status) {
530
561
  if (shutting_down_) return;
531
- status = absl::Status(status.code(), absl::StrCat("xDS channel for server ",
532
- server_.server_uri(), ": ",
533
- status.message()));
562
+ status = absl::Status(
563
+ status.code(), absl::StrCat("xDS channel for server ", server_uri(), ": ",
564
+ status.message()));
534
565
  LOG(INFO) << "[xds_client " << xds_client() << "] " << status;
535
566
  // If status was previously OK, report that the channel has gone unhealthy.
536
567
  if (status_.ok() && xds_client_->metrics_reporter_ != nullptr) {
537
- xds_client_->metrics_reporter_->ReportServerFailure(server_.server_uri());
568
+ xds_client_->metrics_reporter_->ReportServerFailure(server_uri());
538
569
  }
539
570
  // Save status in channel, so that we can immediately generate an
540
571
  // error for any new watchers that may be started.
@@ -542,17 +573,18 @@ void XdsClient::XdsChannel::SetChannelStatusLocked(absl::Status status) {
542
573
  // Find all watchers for this channel.
543
574
  WatcherSet watchers_cached;
544
575
  WatcherSet watchers_uncached;
545
- for (auto& a : xds_client_->authority_state_map_) { // authority
546
- if (a.second.xds_channels.empty() || a.second.xds_channels.back() != this ||
547
- MaybeFallbackLocked(a.first, a.second)) {
576
+ for (auto& [authority, authority_state] : xds_client_->authority_state_map_) {
577
+ if (authority_state.xds_channels.empty() ||
578
+ authority_state.xds_channels.back() != this ||
579
+ MaybeFallbackLocked(authority, authority_state)) {
548
580
  continue;
549
581
  }
550
- for (const auto& t : a.second.resource_map) { // type
551
- for (const auto& r : t.second) { // resource id
582
+ for (const auto& [_, resource_map] : authority_state.type_map) {
583
+ for (const auto& [_, resource_state] : resource_map) {
552
584
  auto& watchers =
553
- r.second.HasResource() ? watchers_cached : watchers_uncached;
554
- for (const auto& w : r.second.watchers()) { // watchers
555
- watchers.insert(w);
585
+ resource_state.HasResource() ? watchers_cached : watchers_uncached;
586
+ for (const auto& watcher : resource_state.watchers()) {
587
+ watchers.insert(watcher);
556
588
  }
557
589
  }
558
590
  }
@@ -613,8 +645,8 @@ void XdsClient::XdsChannel::RetryableCall<T>::StartNewCallLocked() {
613
645
  CHECK(call_ == nullptr);
614
646
  GRPC_TRACE_LOG(xds_client, INFO)
615
647
  << "[xds_client " << xds_channel()->xds_client() << "] xds server "
616
- << xds_channel()->server_.server_uri()
617
- << ": start new call from retryable call " << this;
648
+ << xds_channel()->server_uri() << ": start new call from retryable call "
649
+ << this;
618
650
  call_ = MakeOrphanable<T>(
619
651
  this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
620
652
  }
@@ -625,13 +657,12 @@ void XdsClient::XdsChannel::RetryableCall<T>::StartRetryTimerLocked() {
625
657
  const Duration delay = backoff_.NextAttemptDelay();
626
658
  GRPC_TRACE_LOG(xds_client, INFO)
627
659
  << "[xds_client " << xds_channel()->xds_client() << "] xds server "
628
- << xds_channel()->server_.server_uri()
660
+ << xds_channel()->server_uri()
629
661
  << ": call attempt failed; retry timer will fire in " << delay.millis()
630
662
  << "ms.";
631
663
  timer_handle_ = xds_channel()->xds_client()->engine()->RunAfter(
632
664
  delay,
633
665
  [self = this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start")]() {
634
- ApplicationCallbackExecCtx callback_exec_ctx;
635
666
  ExecCtx exec_ctx;
636
667
  self->OnRetryTimer();
637
668
  });
@@ -645,7 +676,7 @@ void XdsClient::XdsChannel::RetryableCall<T>::OnRetryTimer() {
645
676
  if (shutting_down_) return;
646
677
  GRPC_TRACE_LOG(xds_client, INFO)
647
678
  << "[xds_client " << xds_channel()->xds_client() << "] xds server "
648
- << xds_channel()->server_.server_uri()
679
+ << xds_channel()->server_uri()
649
680
  << ": retry timer fired (retryable call: " << this << ")";
650
681
  StartNewCallLocked();
651
682
  }
@@ -694,35 +725,42 @@ XdsClient::XdsChannel::AdsCall::AdsCall(
694
725
  // Start the call.
695
726
  GRPC_TRACE_LOG(xds_client, INFO)
696
727
  << "[xds_client " << xds_client() << "] xds server "
697
- << xds_channel()->server_.server_uri()
728
+ << xds_channel()->server_uri()
698
729
  << ": starting ADS call (ads_call: " << this
699
730
  << ", streaming_call: " << streaming_call_.get() << ")";
700
731
  // If this is a reconnect, add any necessary subscriptions from what's
701
732
  // already in the cache.
702
- for (auto& a : xds_client()->authority_state_map_) {
703
- const std::string& authority = a.first;
704
- auto it = std::find(a.second.xds_channels.begin(),
705
- a.second.xds_channels.end(), xds_channel());
733
+ for (auto& [authority, authority_state] :
734
+ xds_client()->authority_state_map_) {
735
+ auto it = std::find(authority_state.xds_channels.begin(),
736
+ authority_state.xds_channels.end(), xds_channel());
706
737
  // Skip authorities that are not using this xDS channel. The channel can be
707
738
  // anywhere in the list.
708
- if (it == a.second.xds_channels.end()) continue;
709
- for (const auto& t : a.second.resource_map) {
710
- const XdsResourceType* type = t.first;
711
- for (const auto& r : t.second) {
712
- const XdsResourceKey& resource_key = r.first;
713
- SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
739
+ if (it == authority_state.xds_channels.end()) continue;
740
+ for (const auto& [type, resource_map] : authority_state.type_map) {
741
+ for (const auto& [resource_key, resource_state] : resource_map) {
742
+ if (resource_state.HasWatchers()) {
743
+ SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
744
+ }
714
745
  }
715
746
  }
716
747
  }
717
748
  // Send initial message if we added any subscriptions above.
718
- for (const auto& p : state_map_) {
719
- SendMessageLocked(p.first);
749
+ for (const auto& [type, _] : state_map_) {
750
+ SendMessageLocked(type);
720
751
  }
721
752
  streaming_call_->StartRecvMessage();
722
753
  }
723
754
 
724
755
  void XdsClient::XdsChannel::AdsCall::Orphan() {
725
756
  state_map_.clear();
757
+ // We may have unsubscriptions for which we have not yet actually sent
758
+ // unsubscribe messages, and now we never will, so do a pass to delete
759
+ // any cache entries for which we've unsubscribed.
760
+ for (const auto& [_, type] : xds_client()->resource_types_) {
761
+ xds_client()->MaybeRemoveUnsubscribedCacheEntriesForTypeLocked(
762
+ xds_channel(), type);
763
+ }
726
764
  // Note that the initial ref is held by the StreamEventHandler, which
727
765
  // will be destroyed when streaming_call_ is destroyed, which may not happen
728
766
  // here, since there may be other refs held to streaming_call_ by internal
@@ -761,8 +799,8 @@ void XdsClient::XdsChannel::AdsCall::UnsubscribeLocked(
761
799
  }
762
800
 
763
801
  bool XdsClient::XdsChannel::AdsCall::HasSubscribedResources() const {
764
- for (const auto& p : state_map_) {
765
- if (!p.second.subscribed_resources.empty()) return true;
802
+ for (const auto& [_, resource_type_state] : state_map_) {
803
+ if (!resource_type_state.subscribed_resources.empty()) return true;
766
804
  }
767
805
  return false;
768
806
  }
@@ -861,6 +899,8 @@ void XdsClient::XdsChannel::AdsCall::SendMessageLocked(
861
899
  buffered_requests_.insert(type);
862
900
  return;
863
901
  }
902
+ xds_client()->MaybeRemoveUnsubscribedCacheEntriesForTypeLocked(xds_channel(),
903
+ type);
864
904
  auto& state = state_map_[type];
865
905
  std::string serialized_message = CreateAdsRequest(
866
906
  type->type_url(), xds_channel()->resource_type_version_map_[type],
@@ -868,7 +908,7 @@ void XdsClient::XdsChannel::AdsCall::SendMessageLocked(
868
908
  sent_initial_message_ = true;
869
909
  GRPC_TRACE_LOG(xds_client, INFO)
870
910
  << "[xds_client " << xds_client() << "] xds server "
871
- << xds_channel()->server_.server_uri()
911
+ << xds_channel()->server_uri()
872
912
  << ": sending ADS request: type=" << type->type_url()
873
913
  << " version=" << xds_channel()->resource_type_version_map_[type]
874
914
  << " nonce=" << state.nonce << " error=" << state.status;
@@ -883,9 +923,10 @@ void XdsClient::XdsChannel::AdsCall::OnRequestSent(bool ok) {
883
923
  // resource timer if needed.
884
924
  if (ok) {
885
925
  auto& resource_type_state = state_map_[send_message_pending_];
886
- for (const auto& p : resource_type_state.subscribed_resources) {
887
- for (auto& q : p.second) {
888
- q.second->MaybeMarkSubscriptionSendComplete(
926
+ for (const auto& [_, resource_map] :
927
+ resource_type_state.subscribed_resources) {
928
+ for (auto& [_, resource_timer] : resource_map) {
929
+ resource_timer->MaybeMarkSubscriptionSendComplete(
889
930
  Ref(DEBUG_LOCATION, "ResourceTimer"));
890
931
  }
891
932
  }
@@ -925,8 +966,8 @@ void XdsClient::XdsChannel::AdsCall::ParseResource(
925
966
  }
926
967
  // Parse the resource.
927
968
  XdsResourceType::DecodeContext resource_type_context = {
928
- xds_client(), xds_channel()->server_, &xds_client_trace,
929
- xds_client()->def_pool_.ptr(), context->arena.ptr()};
969
+ xds_client(), xds_channel()->server_, xds_client()->def_pool_.ptr(),
970
+ context->arena.ptr()};
930
971
  XdsResourceType::DecodeResult decode_result =
931
972
  context->type->Decode(resource_type_context, serialized_resource);
932
973
  // If we didn't already have the resource name from the Resource
@@ -961,13 +1002,14 @@ void XdsClient::XdsChannel::AdsCall::ParseResource(
961
1002
  return;
962
1003
  }
963
1004
  // Cancel resource-does-not-exist timer, if needed.
964
- auto timer_it = state_map_.find(context->type);
965
- if (timer_it != state_map_.end()) {
966
- auto it = timer_it->second.subscribed_resources.find(
1005
+ if (auto it = state_map_.find(context->type); it != state_map_.end()) {
1006
+ auto& resource_type_state = it->second;
1007
+ auto authority_it = resource_type_state.subscribed_resources.find(
967
1008
  parsed_resource_name->authority);
968
- if (it != timer_it->second.subscribed_resources.end()) {
969
- auto res_it = it->second.find(parsed_resource_name->key);
970
- if (res_it != it->second.end()) {
1009
+ if (authority_it != resource_type_state.subscribed_resources.end()) {
1010
+ auto& resource_map = authority_it->second;
1011
+ auto res_it = resource_map.find(parsed_resource_name->key);
1012
+ if (res_it != resource_map.end()) {
971
1013
  res_it->second->MarkSeen();
972
1014
  }
973
1015
  }
@@ -978,50 +1020,35 @@ void XdsClient::XdsChannel::AdsCall::ParseResource(
978
1020
  if (authority_it == xds_client()->authority_state_map_.end()) {
979
1021
  return; // Skip resource -- we don't have a subscription for it.
980
1022
  }
981
- // Found authority, so look up type.
982
1023
  AuthorityState& authority_state = authority_it->second;
983
- auto type_it = authority_state.resource_map.find(context->type);
984
- if (type_it == authority_state.resource_map.end()) {
1024
+ // Found authority, so look up type.
1025
+ auto type_it = authority_state.type_map.find(context->type);
1026
+ if (type_it == authority_state.type_map.end()) {
985
1027
  return; // Skip resource -- we don't have a subscription for it.
986
1028
  }
987
1029
  auto& type_map = type_it->second;
988
1030
  // Found type, so look up resource key.
989
- auto it = type_map.find(parsed_resource_name->key);
990
- if (it == type_map.end()) {
1031
+ auto res_it = type_map.find(parsed_resource_name->key);
1032
+ if (res_it == type_map.end()) {
991
1033
  return; // Skip resource -- we don't have a subscription for it.
992
1034
  }
993
- ResourceState& resource_state = it->second;
1035
+ ResourceState& resource_state = res_it->second;
994
1036
  // If needed, record that we've seen this resource.
995
1037
  if (context->type->AllResourcesRequiredInSotW()) {
996
1038
  context->resources_seen[parsed_resource_name->authority].insert(
997
1039
  parsed_resource_name->key);
998
1040
  }
999
- // If we previously ignored the resource's deletion, log that we're
1000
- // now re-adding it.
1001
- if (resource_state.ignored_deletion()) {
1002
- LOG(INFO) << "[xds_client " << xds_client() << "] xds server "
1003
- << xds_channel()->server_.server_uri()
1004
- << ": server returned new version of resource for which we "
1005
- "previously ignored a deletion: type "
1006
- << type_url << " name " << resource_name;
1007
- resource_state.set_ignored_deletion(false);
1008
- }
1009
1041
  // Update resource state based on whether the resource is valid.
1010
- absl::Status status = absl::InvalidArgumentError(
1011
- absl::StrCat("invalid resource: ", decode_status.ToString()));
1012
1042
  if (!decode_status.ok()) {
1013
- if (!resource_state.HasResource()) {
1014
- xds_client()->NotifyWatchersOnResourceChanged(std::move(status),
1015
- resource_state.watchers(),
1016
- context->read_delay_handle);
1017
- } else {
1018
- xds_client()->NotifyWatchersOnAmbientError(std::move(status),
1019
- resource_state.watchers(),
1020
- context->read_delay_handle);
1021
- }
1022
- resource_state.SetNacked(context->version, decode_status.ToString(),
1023
- context->update_time);
1024
1043
  ++context->num_invalid_resources;
1044
+ // If the fail_on_data_errors server feature is present, drop the
1045
+ // existing cached resource, if any.
1046
+ const bool drop_cached_resource = XdsDataErrorHandlingEnabled() &&
1047
+ xds_channel()->server_.FailOnDataErrors();
1048
+ resource_state.SetNacked(context->version, decode_status.message(),
1049
+ context->update_time, drop_cached_resource);
1050
+ xds_client()->NotifyWatchersOnError(resource_state,
1051
+ context->read_delay_handle);
1025
1052
  return;
1026
1053
  }
1027
1054
  // Resource is valid.
@@ -1059,6 +1086,91 @@ void XdsClient::XdsChannel::AdsCall::ParseResource(
1059
1086
  context->read_delay_handle);
1060
1087
  }
1061
1088
 
1089
+ void XdsClient::XdsChannel::AdsCall::HandleServerReportedResourceError(
1090
+ size_t idx, absl::string_view resource_name, absl::Status status,
1091
+ DecodeContext* context) {
1092
+ std::string error_prefix = absl::StrCat(
1093
+ "resource_errors index ", idx, ": ",
1094
+ resource_name.empty() ? "" : absl::StrCat(resource_name, ": "));
1095
+ if (resource_name.empty()) {
1096
+ context->errors.emplace_back(
1097
+ absl::StrCat(error_prefix, "resource_name unset"));
1098
+ ++context->num_invalid_resources;
1099
+ return;
1100
+ }
1101
+ if (status.ok()) {
1102
+ context->errors.emplace_back(
1103
+ absl::StrCat(error_prefix, "error_detail must be non-OK"));
1104
+ ++context->num_invalid_resources;
1105
+ return;
1106
+ }
1107
+ // Check the resource name.
1108
+ auto parsed_resource_name =
1109
+ xds_client()->ParseXdsResourceName(resource_name, context->type);
1110
+ if (!parsed_resource_name.ok()) {
1111
+ context->errors.emplace_back(
1112
+ absl::StrCat(error_prefix, "Cannot parse xDS resource name"));
1113
+ ++context->num_invalid_resources;
1114
+ return;
1115
+ }
1116
+ // Cancel resource-does-not-exist timer, if needed.
1117
+ auto timer_it = state_map_.find(context->type);
1118
+ if (timer_it != state_map_.end()) {
1119
+ auto it = timer_it->second.subscribed_resources.find(
1120
+ parsed_resource_name->authority);
1121
+ if (it != timer_it->second.subscribed_resources.end()) {
1122
+ auto res_it = it->second.find(parsed_resource_name->key);
1123
+ if (res_it != it->second.end()) {
1124
+ res_it->second->MarkSeen();
1125
+ }
1126
+ }
1127
+ }
1128
+ // Lookup the authority in the cache.
1129
+ auto authority_it =
1130
+ xds_client()->authority_state_map_.find(parsed_resource_name->authority);
1131
+ if (authority_it == xds_client()->authority_state_map_.end()) {
1132
+ return; // Skip resource -- we don't have a subscription for it.
1133
+ }
1134
+ AuthorityState& authority_state = authority_it->second;
1135
+ // Found authority, so look up type.
1136
+ auto type_it = authority_state.type_map.find(context->type);
1137
+ if (type_it == authority_state.type_map.end()) {
1138
+ return; // Skip resource -- we don't have a subscription for it.
1139
+ }
1140
+ auto& type_map = type_it->second;
1141
+ // Found type, so look up resource key.
1142
+ auto it = type_map.find(parsed_resource_name->key);
1143
+ if (it == type_map.end()) {
1144
+ return; // Skip resource -- we don't have a subscription for it.
1145
+ }
1146
+ ResourceState& resource_state = it->second;
1147
+ // If needed, record that we've seen this resource.
1148
+ if (context->type->AllResourcesRequiredInSotW()) {
1149
+ context->resources_seen[parsed_resource_name->authority].insert(
1150
+ parsed_resource_name->key);
1151
+ }
1152
+ ++context->num_invalid_resources;
1153
+ // Update cache state.
1154
+ const bool drop_cached_resource =
1155
+ xds_channel()->server_.FailOnDataErrors() &&
1156
+ (status.code() == absl::StatusCode::kNotFound ||
1157
+ status.code() == absl::StatusCode::kPermissionDenied);
1158
+ resource_state.SetReceivedError(context->version, std::move(status),
1159
+ context->update_time, drop_cached_resource);
1160
+ // If there is no cached resource (either because we didn't have one
1161
+ // or because we just dropped it due to fail_on_data_errors), then notify
1162
+ // via OnResourceChanged(); otherwise, notify via OnAmbientError().
1163
+ if (!resource_state.HasResource()) {
1164
+ xds_client()->NotifyWatchersOnResourceChanged(
1165
+ resource_state.failed_status(), resource_state.watchers(),
1166
+ context->read_delay_handle);
1167
+ } else {
1168
+ xds_client()->NotifyWatchersOnAmbientError(resource_state.failed_status(),
1169
+ resource_state.watchers(),
1170
+ context->read_delay_handle);
1171
+ }
1172
+ }
1173
+
1062
1174
  namespace {
1063
1175
 
1064
1176
  void MaybeLogDiscoveryResponse(
@@ -1089,7 +1201,8 @@ absl::Status XdsClient::XdsChannel::AdsCall::DecodeAdsResponse(
1089
1201
  }
1090
1202
  MaybeLogDiscoveryResponse(xds_client(), xds_client()->def_pool_.ptr(),
1091
1203
  response);
1092
- // Get the type_url, version, nonce, and number of resources.
1204
+ // Get the type_url, version, nonce, number of resources, and number
1205
+ // of errors.
1093
1206
  context->type_url = std::string(absl::StripPrefix(
1094
1207
  UpbStringToAbsl(
1095
1208
  envoy_service_discovery_v3_DiscoveryResponse_type_url(response)),
@@ -1102,12 +1215,18 @@ absl::Status XdsClient::XdsChannel::AdsCall::DecodeAdsResponse(
1102
1215
  const google_protobuf_Any* const* resources =
1103
1216
  envoy_service_discovery_v3_DiscoveryResponse_resources(response,
1104
1217
  &num_resources);
1218
+ size_t num_errors = 0;
1219
+ const envoy_service_discovery_v3_ResourceError* const* errors = nullptr;
1220
+ if (XdsDataErrorHandlingEnabled()) {
1221
+ errors = envoy_service_discovery_v3_DiscoveryResponse_resource_errors(
1222
+ response, &num_errors);
1223
+ }
1105
1224
  GRPC_TRACE_LOG(xds_client, INFO)
1106
1225
  << "[xds_client " << xds_client() << "] xds server "
1107
- << xds_channel()->server_.server_uri()
1226
+ << xds_channel()->server_uri()
1108
1227
  << ": received ADS response: type_url=" << context->type_url
1109
1228
  << ", version=" << context->version << ", nonce=" << context->nonce
1110
- << ", num_resources=" << num_resources;
1229
+ << ", num_resources=" << num_resources << ", num_errors=" << num_errors;
1111
1230
  context->type = xds_client()->GetResourceTypeLocked(context->type_url);
1112
1231
  if (context->type == nullptr) {
1113
1232
  return absl::InvalidArgumentError(
@@ -1152,6 +1271,29 @@ absl::Status XdsClient::XdsChannel::AdsCall::DecodeAdsResponse(
1152
1271
  }
1153
1272
  ParseResource(i, type_url, resource_name, serialized_resource, context);
1154
1273
  }
1274
+ // Process each error.
1275
+ for (size_t i = 0; i < num_errors; ++i) {
1276
+ absl::string_view name;
1277
+ {
1278
+ const envoy_service_discovery_v3_ResourceName* resource_name =
1279
+ envoy_service_discovery_v3_ResourceError_resource_name(errors[i]);
1280
+ if (resource_name != nullptr) {
1281
+ name = UpbStringToAbsl(
1282
+ envoy_service_discovery_v3_ResourceName_name(resource_name));
1283
+ }
1284
+ }
1285
+ absl::Status status;
1286
+ {
1287
+ const google_rpc_Status* error_detail =
1288
+ envoy_service_discovery_v3_ResourceError_error_detail(errors[i]);
1289
+ if (error_detail != nullptr) {
1290
+ status = absl::Status(
1291
+ static_cast<absl::StatusCode>(google_rpc_Status_code(error_detail)),
1292
+ UpbStringToAbsl(google_rpc_Status_message(error_detail)));
1293
+ }
1294
+ }
1295
+ HandleServerReportedResourceError(i, name, std::move(status), context);
1296
+ }
1155
1297
  return absl::OkStatus();
1156
1298
  }
1157
1299
 
@@ -1159,134 +1301,116 @@ void XdsClient::XdsChannel::AdsCall::OnRecvMessage(absl::string_view payload) {
1159
1301
  // context.read_delay_handle needs to be destroyed after the mutex is
1160
1302
  // released.
1161
1303
  DecodeContext context;
1162
- {
1163
- MutexLock lock(&xds_client()->mu_);
1164
- if (!IsCurrentCallOnChannel()) return;
1165
- // Parse and validate the response.
1166
- absl::Status status = DecodeAdsResponse(payload, &context);
1167
- if (!status.ok()) {
1168
- // Ignore unparsable response.
1304
+ MutexLock lock(&xds_client()->mu_);
1305
+ if (!IsCurrentCallOnChannel()) return;
1306
+ // Parse and validate the response.
1307
+ absl::Status status = DecodeAdsResponse(payload, &context);
1308
+ if (!status.ok()) {
1309
+ // Ignore unparsable response.
1310
+ LOG(ERROR) << "[xds_client " << xds_client() << "] xds server "
1311
+ << xds_channel()->server_uri()
1312
+ << ": error parsing ADS response (" << status << ") -- ignoring";
1313
+ } else {
1314
+ seen_response_ = true;
1315
+ xds_channel()->SetHealthyLocked();
1316
+ // Update nonce.
1317
+ auto& state = state_map_[context.type];
1318
+ state.nonce = context.nonce;
1319
+ // If we got an error, set state.status so that we'll NACK the update.
1320
+ if (!context.errors.empty()) {
1321
+ state.status = absl::UnavailableError(
1322
+ absl::StrCat("xDS response validation errors: [",
1323
+ absl::StrJoin(context.errors, "; "), "]"));
1169
1324
  LOG(ERROR) << "[xds_client " << xds_client() << "] xds server "
1170
- << xds_channel()->server_.server_uri()
1171
- << ": error parsing ADS response (" << status
1172
- << ") -- ignoring";
1173
- } else {
1174
- seen_response_ = true;
1175
- xds_channel()->SetHealthyLocked();
1176
- // Update nonce.
1177
- auto& state = state_map_[context.type];
1178
- state.nonce = context.nonce;
1179
- // If we got an error, set state.status so that we'll NACK the update.
1180
- if (!context.errors.empty()) {
1181
- state.status = absl::UnavailableError(
1182
- absl::StrCat("xDS response validation errors: [",
1183
- absl::StrJoin(context.errors, "; "), "]"));
1184
- LOG(ERROR) << "[xds_client " << xds_client() << "] xds server "
1185
- << xds_channel()->server_.server_uri()
1186
- << ": ADS response invalid for resource type "
1187
- << context.type_url << " version " << context.version
1188
- << ", will NACK: nonce=" << state.nonce
1189
- << " status=" << state.status;
1190
- }
1191
- // Delete resources not seen in update if needed.
1192
- if (context.type->AllResourcesRequiredInSotW()) {
1193
- for (auto& a : xds_client()->authority_state_map_) {
1194
- const std::string& authority = a.first;
1195
- AuthorityState& authority_state = a.second;
1196
- // Skip authorities that are not using this xDS channel.
1197
- if (authority_state.xds_channels.back() != xds_channel()) {
1198
- continue;
1199
- }
1200
- auto seen_authority_it = context.resources_seen.find(authority);
1201
- // Find this resource type.
1202
- auto type_it = authority_state.resource_map.find(context.type);
1203
- if (type_it == authority_state.resource_map.end()) continue;
1204
- // Iterate over resource ids.
1205
- for (auto& r : type_it->second) {
1206
- const XdsResourceKey& resource_key = r.first;
1207
- ResourceState& resource_state = r.second;
1208
- if (seen_authority_it == context.resources_seen.end() ||
1209
- seen_authority_it->second.find(resource_key) ==
1210
- seen_authority_it->second.end()) {
1211
- // If the resource was newly requested but has not yet been
1212
- // received, we don't want to generate an error for the
1213
- // watchers, because this ADS response may be in reaction to an
1214
- // earlier request that did not yet request the new resource, so
1215
- // its absence from the response does not necessarily indicate
1216
- // that the resource does not exist. For that case, we rely on
1217
- // the request timeout instead.
1218
- if (!resource_state.HasResource()) continue;
1219
- if (xds_channel()->server_.IgnoreResourceDeletion()) {
1220
- if (!resource_state.ignored_deletion()) {
1221
- LOG(ERROR)
1222
- << "[xds_client " << xds_client() << "] xds server "
1223
- << xds_channel()->server_.server_uri()
1224
- << ": ignoring deletion for resource type "
1225
- << context.type_url << " name "
1226
- << XdsClient::ConstructFullXdsResourceName(
1227
- authority, context.type_url.c_str(), resource_key);
1228
- resource_state.set_ignored_deletion(true);
1229
- }
1230
- } else {
1231
- resource_state.SetDoesNotExist();
1232
- xds_client()->NotifyWatchersOnResourceChanged(
1233
- absl::NotFoundError("does not exist"),
1234
- resource_state.watchers(), context.read_delay_handle);
1235
- }
1236
- }
1325
+ << xds_channel()->server_uri()
1326
+ << ": ADS response invalid for resource type "
1327
+ << context.type_url << " version " << context.version
1328
+ << ", will NACK: nonce=" << state.nonce
1329
+ << " status=" << state.status;
1330
+ }
1331
+ // Delete resources not seen in update if needed.
1332
+ if (context.type->AllResourcesRequiredInSotW()) {
1333
+ for (auto& [authority, authority_state] :
1334
+ xds_client()->authority_state_map_) {
1335
+ // Skip authorities that are not using this xDS channel.
1336
+ if (authority_state.xds_channels.back() != xds_channel()) {
1337
+ continue;
1338
+ }
1339
+ auto seen_authority_it = context.resources_seen.find(authority);
1340
+ // Find this resource type.
1341
+ auto type_it = authority_state.type_map.find(context.type);
1342
+ if (type_it == authority_state.type_map.end()) continue;
1343
+ // Iterate over resource ids.
1344
+ for (auto& [resource_key, resource_state] : type_it->second) {
1345
+ if (seen_authority_it == context.resources_seen.end() ||
1346
+ seen_authority_it->second.find(resource_key) ==
1347
+ seen_authority_it->second.end()) {
1348
+ // If the resource was newly requested but has not yet been
1349
+ // received, we don't want to generate an error for the
1350
+ // watchers, because this ADS response may be in reaction to an
1351
+ // earlier request that did not yet request the new resource, so
1352
+ // its absence from the response does not necessarily indicate
1353
+ // that the resource does not exist. For that case, we rely on
1354
+ // the request timeout instead.
1355
+ if (!resource_state.HasResource()) continue;
1356
+ const bool drop_cached_resource =
1357
+ XdsDataErrorHandlingEnabled()
1358
+ ? xds_channel()->server_.FailOnDataErrors()
1359
+ : !xds_channel()->server_.IgnoreResourceDeletion();
1360
+ resource_state.SetDoesNotExistOnLdsOrCdsDeletion(
1361
+ context.version, context.update_time, drop_cached_resource);
1362
+ xds_client()->NotifyWatchersOnError(resource_state,
1363
+ context.read_delay_handle);
1237
1364
  }
1238
1365
  }
1239
1366
  }
1240
- // If we had valid resources or the update was empty, update the version.
1241
- if (context.num_valid_resources > 0 || context.errors.empty()) {
1242
- xds_channel()->resource_type_version_map_[context.type] =
1243
- std::move(context.version);
1244
- }
1245
- // Send ACK or NACK.
1246
- SendMessageLocked(context.type);
1247
1367
  }
1248
- // Update metrics.
1249
- if (xds_client()->metrics_reporter_ != nullptr) {
1250
- xds_client()->metrics_reporter_->ReportResourceUpdates(
1251
- xds_channel()->server_.server_uri(), context.type_url,
1252
- context.num_valid_resources, context.num_invalid_resources);
1368
+ // If we had valid resources or the update was empty, update the version.
1369
+ if (context.num_valid_resources > 0 || context.errors.empty()) {
1370
+ xds_channel()->resource_type_version_map_[context.type] =
1371
+ std::move(context.version);
1253
1372
  }
1373
+ // Send ACK or NACK.
1374
+ SendMessageLocked(context.type);
1375
+ }
1376
+ // Update metrics.
1377
+ if (xds_client()->metrics_reporter_ != nullptr) {
1378
+ xds_client()->metrics_reporter_->ReportResourceUpdates(
1379
+ xds_channel()->server_uri(), context.type_url,
1380
+ context.num_valid_resources, context.num_invalid_resources);
1254
1381
  }
1255
- xds_client()->work_serializer_.DrainQueue();
1256
1382
  }
1257
1383
 
1258
1384
  void XdsClient::XdsChannel::AdsCall::OnStatusReceived(absl::Status status) {
1259
- {
1260
- MutexLock lock(&xds_client()->mu_);
1261
- GRPC_TRACE_LOG(xds_client, INFO)
1262
- << "[xds_client " << xds_client() << "] xds server "
1263
- << xds_channel()->server_.server_uri()
1264
- << ": ADS call status received (xds_channel=" << xds_channel()
1265
- << ", ads_call=" << this << ", streaming_call=" << streaming_call_.get()
1266
- << "): " << status;
1267
- // Cancel any does-not-exist timers that may be pending.
1268
- for (const auto& p : state_map_) {
1269
- for (const auto& q : p.second.subscribed_resources) {
1270
- for (auto& r : q.second) {
1271
- r.second->MaybeCancelTimer();
1272
- }
1385
+ MutexLock lock(&xds_client()->mu_);
1386
+ GRPC_TRACE_LOG(xds_client, INFO)
1387
+ << "[xds_client " << xds_client() << "] xds server "
1388
+ << xds_channel()->server_uri()
1389
+ << ": ADS call status received (xds_channel=" << xds_channel()
1390
+ << ", ads_call=" << this << ", streaming_call=" << streaming_call_.get()
1391
+ << "): " << status;
1392
+ // Cancel any does-not-exist timers that may be pending.
1393
+ for (const auto& [_, resource_type_state] : state_map_) {
1394
+ for (const auto& [_, resource_map] :
1395
+ resource_type_state.subscribed_resources) {
1396
+ for (auto& [_, resource_timer] : resource_map) {
1397
+ resource_timer->MaybeCancelTimer();
1273
1398
  }
1274
1399
  }
1275
- // Ignore status from a stale call.
1276
- if (IsCurrentCallOnChannel()) {
1277
- // Try to restart the call.
1278
- retryable_call_->OnCallFinishedLocked();
1279
- // If we didn't receive a response on the stream, report the
1280
- // stream failure as a connectivity failure, which will report the
1281
- // error to all watchers of resources on this channel.
1282
- if (!seen_response_) {
1283
- xds_channel()->SetChannelStatusLocked(absl::UnavailableError(
1284
- absl::StrCat("xDS call failed with no responses received; status: ",
1285
- status.ToString())));
1286
- }
1400
+ }
1401
+ // Ignore status from a stale call.
1402
+ if (IsCurrentCallOnChannel()) {
1403
+ // Try to restart the call.
1404
+ retryable_call_->OnCallFinishedLocked();
1405
+ // If we didn't receive a response on the stream, report the
1406
+ // stream failure as a connectivity failure, which will report the
1407
+ // error to all watchers of resources on this channel.
1408
+ if (!seen_response_) {
1409
+ xds_channel()->SetChannelStatusLocked(absl::UnavailableError(
1410
+ absl::StrCat("xDS call failed with no responses received; status: ",
1411
+ status.ToString())));
1287
1412
  }
1288
1413
  }
1289
- xds_client()->work_serializer_.DrainQueue();
1290
1414
  }
1291
1415
 
1292
1416
  bool XdsClient::XdsChannel::AdsCall::IsCurrentCallOnChannel() const {
@@ -1302,13 +1426,10 @@ XdsClient::XdsChannel::AdsCall::ResourceNamesForRequest(
1302
1426
  std::vector<std::string> resource_names;
1303
1427
  auto it = state_map_.find(type);
1304
1428
  if (it != state_map_.end()) {
1305
- for (auto& a : it->second.subscribed_resources) {
1306
- const std::string& authority = a.first;
1307
- for (auto& p : a.second) {
1308
- const XdsResourceKey& resource_key = p.first;
1429
+ for (auto& [authority, authority_state] : it->second.subscribed_resources) {
1430
+ for (auto& [resource_key, resource_timer] : authority_state) {
1309
1431
  resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
1310
1432
  authority, type->type_url(), resource_key));
1311
- OrphanablePtr<ResourceTimer>& resource_timer = p.second;
1312
1433
  resource_timer->MarkSubscriptionSendStarted();
1313
1434
  }
1314
1435
  }
@@ -1329,22 +1450,60 @@ void XdsClient::ResourceState::SetAcked(
1329
1450
  update_time_ = update_time;
1330
1451
  version_ = std::move(version);
1331
1452
  failed_version_.clear();
1332
- failed_details_.clear();
1453
+ failed_status_ = absl::OkStatus();
1333
1454
  }
1334
1455
 
1335
1456
  void XdsClient::ResourceState::SetNacked(const std::string& version,
1336
- const std::string& details,
1337
- Timestamp update_time) {
1457
+ absl::string_view details,
1458
+ Timestamp update_time,
1459
+ bool drop_cached_resource) {
1460
+ if (drop_cached_resource) {
1461
+ resource_.reset();
1462
+ serialized_proto_.clear();
1463
+ }
1338
1464
  client_status_ = ClientResourceStatus::NACKED;
1465
+ failed_status_ =
1466
+ absl::InvalidArgumentError(absl::StrCat("invalid resource: ", details));
1467
+ failed_version_ = version;
1468
+ failed_update_time_ = update_time;
1469
+ }
1470
+
1471
+ void XdsClient::ResourceState::SetReceivedError(const std::string& version,
1472
+ absl::Status status,
1473
+ Timestamp update_time,
1474
+ bool drop_cached_resource) {
1475
+ if (drop_cached_resource) {
1476
+ resource_.reset();
1477
+ serialized_proto_.clear();
1478
+ }
1479
+ client_status_ = ClientResourceStatus::RECEIVED_ERROR;
1480
+ failed_version_ = version;
1481
+ failed_status_ = std::move(status);
1482
+ failed_update_time_ = update_time;
1483
+ }
1484
+
1485
+ void XdsClient::ResourceState::SetDoesNotExistOnLdsOrCdsDeletion(
1486
+ const std::string& version, Timestamp update_time,
1487
+ bool drop_cached_resource) {
1488
+ if (drop_cached_resource) {
1489
+ resource_.reset();
1490
+ serialized_proto_.clear();
1491
+ }
1492
+ client_status_ = ClientResourceStatus::DOES_NOT_EXIST;
1493
+ failed_status_ = absl::NotFoundError("does not exist");
1339
1494
  failed_version_ = version;
1340
- failed_details_ = details;
1341
1495
  failed_update_time_ = update_time;
1342
1496
  }
1343
1497
 
1344
- void XdsClient::ResourceState::SetDoesNotExist() {
1345
- resource_.reset();
1346
- serialized_proto_.clear();
1498
+ void XdsClient::ResourceState::SetDoesNotExistOnTimeout() {
1347
1499
  client_status_ = ClientResourceStatus::DOES_NOT_EXIST;
1500
+ failed_status_ = absl::NotFoundError("does not exist");
1501
+ failed_version_.clear();
1502
+ }
1503
+
1504
+ void XdsClient::ResourceState::SetTimeout(const std::string& details) {
1505
+ client_status_ = ClientResourceStatus::TIMEOUT;
1506
+ failed_status_ = absl::UnavailableError(details);
1348
1507
  failed_version_.clear();
1349
1508
  }
1350
1509
 
@@ -1353,11 +1512,17 @@ absl::string_view XdsClient::ResourceState::CacheStateString() const {
1353
1512
  case ClientResourceStatus::REQUESTED:
1354
1513
  return "requested";
1355
1514
  case ClientResourceStatus::DOES_NOT_EXIST:
1356
- return "does_not_exist";
1515
+ return resource_ != nullptr ? "does_not_exist_but_cached"
1516
+ : "does_not_exist";
1357
1517
  case ClientResourceStatus::ACKED:
1358
1518
  return "acked";
1359
1519
  case ClientResourceStatus::NACKED:
1360
1520
  return resource_ != nullptr ? "nacked_but_cached" : "nacked";
1521
+ case ClientResourceStatus::RECEIVED_ERROR:
1522
+ return resource_ != nullptr ? "received_error_but_cached"
1523
+ : "received_error";
1524
+ case ClientResourceStatus::TIMEOUT:
1525
+ return "timeout";
1361
1526
  }
1362
1527
  Crash("unknown resource state");
1363
1528
  }
@@ -1395,14 +1560,16 @@ void XdsClient::ResourceState::FillGenericXdsConfig(
1395
1560
  google_protobuf_Any_set_value(any_field,
1396
1561
  StdStringToUpbString(serialized_proto_));
1397
1562
  }
1398
- if (client_status_ == ClientResourceStatus::NACKED) {
1563
+ if (!failed_status_.ok()) {
1399
1564
  auto* update_failure_state = envoy_admin_v3_UpdateFailureState_new(arena);
1400
1565
  envoy_admin_v3_UpdateFailureState_set_details(
1401
- update_failure_state, StdStringToUpbString(failed_details_));
1402
- envoy_admin_v3_UpdateFailureState_set_version_info(
1403
- update_failure_state, StdStringToUpbString(failed_version_));
1404
- envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
1405
- update_failure_state, EncodeTimestamp(failed_update_time_, arena));
1566
+ update_failure_state, StdStringToUpbString(failed_status_.message()));
1567
+ if (!failed_version_.empty()) {
1568
+ envoy_admin_v3_UpdateFailureState_set_version_info(
1569
+ update_failure_state, StdStringToUpbString(failed_version_));
1570
+ envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
1571
+ update_failure_state, EncodeTimestamp(failed_update_time_, arena));
1572
+ }
1406
1573
  envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
1407
1574
  entry, update_failure_state);
1408
1575
  }
@@ -1453,7 +1620,12 @@ void XdsClient::Orphaned() {
1453
1620
  MutexLock lock(&mu_);
1454
1621
  shutting_down_ = true;
1455
1622
  // Clear cache and any remaining watchers that may not have been cancelled.
1456
- authority_state_map_.clear();
1623
+ // Note: We move authority_state_map_ out of the way before clearing
1624
+ // it, because clearing the map will trigger calls to
1625
+ // MaybeRemoveUnsubscribedCacheEntriesForTypeLocked(), which would try to
1626
+ // modify the map while we are iterating over it.
1627
+ auto authority_state_map = std::move(authority_state_map_);
1628
+ authority_state_map.clear();
1457
1629
  invalid_watchers_.clear();
1458
1630
  }
1459
1631
 
@@ -1472,10 +1644,11 @@ RefCountedPtr<XdsClient::XdsChannel> XdsClient::GetOrCreateXdsChannelLocked(
1472
1644
  }
1473
1645
 
1474
1646
  bool XdsClient::HasUncachedResources(const AuthorityState& authority_state) {
1475
- for (const auto& type_resource : authority_state.resource_map) {
1476
- for (const auto& key_state : type_resource.second) {
1477
- if (key_state.second.client_status() ==
1478
- ResourceState::ClientResourceStatus::REQUESTED) {
1647
+ for (const auto& [_, resource_map] : authority_state.type_map) {
1648
+ for (const auto& [_, resource_state] : resource_map) {
1649
+ if (resource_state.HasWatchers() &&
1650
+ resource_state.client_status() ==
1651
+ ResourceState::ClientResourceStatus::REQUESTED) {
1479
1652
  return true;
1480
1653
  }
1481
1654
  }
@@ -1495,7 +1668,6 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1495
1668
  }
1496
1669
  NotifyWatchersOnResourceChanged(std::move(status), {watcher},
1497
1670
  ReadDelayHandle::NoWait());
1498
- work_serializer_.DrainQueue();
1499
1671
  };
1500
1672
  auto resource_name = ParseXdsResourceName(name, type);
1501
1673
  if (!resource_name.ok()) {
@@ -1517,90 +1689,67 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1517
1689
  xds_servers = authority->servers();
1518
1690
  }
1519
1691
  if (xds_servers.empty()) xds_servers = bootstrap_->servers();
1520
- {
1521
- MutexLock lock(&mu_);
1522
- MaybeRegisterResourceTypeLocked(type);
1523
- AuthorityState& authority_state =
1524
- authority_state_map_[resource_name->authority];
1525
- auto it_is_new = authority_state.resource_map[type].emplace(
1526
- resource_name->key, ResourceState());
1527
- bool first_watcher_for_resource = it_is_new.second;
1528
- ResourceState& resource_state = it_is_new.first->second;
1529
- resource_state.AddWatcher(watcher);
1530
- bool notified_watcher = false;
1531
- if (first_watcher_for_resource) {
1532
- // We try to add new channels in 2 cases:
1533
- // - This is the first resource for this authority (i.e., the list
1534
- // of channels is empty).
1535
- // - The last channel in the list is failing. That failure may not
1536
- // have previously triggered fallback if there were no uncached
1537
- // resources, but we've just added a new uncached resource,
1538
- // so we need to trigger fallback now.
1539
- //
1540
- // Note that when we add a channel, it might already be failing
1541
- // due to being used in a different authority. So we keep going
1542
- // until either we add one that isn't failing or we've added them all.
1543
- if (authority_state.xds_channels.empty() ||
1544
- !authority_state.xds_channels.back()->status().ok()) {
1545
- for (size_t i = authority_state.xds_channels.size();
1546
- i < xds_servers.size(); ++i) {
1547
- authority_state.xds_channels.emplace_back(
1548
- GetOrCreateXdsChannelLocked(*xds_servers[i], "start watch"));
1549
- if (authority_state.xds_channels.back()->status().ok()) {
1550
- break;
1551
- }
1692
+ MutexLock lock(&mu_);
1693
+ MaybeRegisterResourceTypeLocked(type);
1694
+ AuthorityState& authority_state =
1695
+ authority_state_map_[resource_name->authority];
1696
+ auto [it, created_entry] = authority_state.type_map[type].emplace(
1697
+ resource_name->key, ResourceState());
1698
+ ResourceState& resource_state = it->second;
1699
+ resource_state.AddWatcher(watcher);
1700
+ if (created_entry) {
1701
+ // We try to add new channels in 2 cases:
1702
+ // - This is the first resource for this authority (i.e., the list
1703
+ // of channels is empty).
1704
+ // - The last channel in the list is failing. That failure may not
1705
+ // have previously triggered fallback if there were no uncached
1706
+ // resources, but we've just added a new uncached resource,
1707
+ // so we need to trigger fallback now.
1708
+ //
1709
+ // Note that when we add a channel, it might already be failing
1710
+ // due to being used in a different authority. So we keep going
1711
+ // until either we add one that isn't failing or we've added them all.
1712
+ if (authority_state.xds_channels.empty() ||
1713
+ !authority_state.xds_channels.back()->status().ok()) {
1714
+ for (size_t i = authority_state.xds_channels.size();
1715
+ i < xds_servers.size(); ++i) {
1716
+ authority_state.xds_channels.emplace_back(
1717
+ GetOrCreateXdsChannelLocked(*xds_servers[i], "start watch"));
1718
+ if (authority_state.xds_channels.back()->status().ok()) {
1719
+ break;
1552
1720
  }
1553
1721
  }
1554
- for (const auto& channel : authority_state.xds_channels) {
1555
- channel->SubscribeLocked(type, *resource_name);
1556
- }
1557
- } else {
1558
- // If we already have a cached value for the resource, notify the new
1559
- // watcher immediately.
1560
- if (resource_state.HasResource()) {
1561
- GRPC_TRACE_LOG(xds_client, INFO)
1562
- << "[xds_client " << this << "] returning cached listener data for "
1563
- << name;
1564
- NotifyWatchersOnResourceChanged(resource_state.resource(), {watcher},
1565
- ReadDelayHandle::NoWait());
1566
- notified_watcher = true;
1567
- } else if (resource_state.client_status() ==
1568
- ResourceState::ClientResourceStatus::DOES_NOT_EXIST) {
1569
- GRPC_TRACE_LOG(xds_client, INFO)
1570
- << "[xds_client " << this
1571
- << "] reporting cached does-not-exist for " << name;
1572
- NotifyWatchersOnResourceChanged(absl::NotFoundError("does not exist"),
1573
- {watcher}, ReadDelayHandle::NoWait());
1574
- notified_watcher = true;
1575
- } else if (resource_state.client_status() ==
1576
- ResourceState::ClientResourceStatus::NACKED) {
1577
- GRPC_TRACE_LOG(xds_client, INFO)
1578
- << "[xds_client " << this
1579
- << "] reporting cached validation failure for " << name << ": "
1580
- << resource_state.failed_details();
1581
- NotifyWatchersOnResourceChanged(
1582
- absl::InvalidArgumentError(absl::StrCat(
1583
- "invalid resource: ", resource_state.failed_details())),
1584
- {watcher}, ReadDelayHandle::NoWait());
1585
- notified_watcher = true;
1586
- }
1587
1722
  }
1588
- // If the channel is not connected, report an error to the watcher.
1589
- absl::Status channel_status = authority_state.xds_channels.back()->status();
1590
- if (!channel_status.ok()) {
1723
+ } else {
1724
+ // If we already have a cached value for the resource, notify the new
1725
+ // watcher immediately.
1726
+ if (resource_state.HasResource()) {
1727
+ GRPC_TRACE_LOG(xds_client, INFO)
1728
+ << "[xds_client " << this << "] returning cached data for " << name;
1729
+ NotifyWatchersOnResourceChanged(resource_state.resource(), {watcher},
1730
+ ReadDelayHandle::NoWait());
1731
+ }
1732
+ if (!resource_state.failed_status().ok()) {
1591
1733
  GRPC_TRACE_LOG(xds_client, INFO)
1592
- << "[xds_client " << this << "] returning cached channel error for "
1593
- << name << ": " << channel_status;
1594
- if (notified_watcher) {
1595
- NotifyWatchersOnAmbientError(std::move(channel_status), {watcher},
1596
- ReadDelayHandle::NoWait());
1597
- } else {
1598
- NotifyWatchersOnResourceChanged(std::move(channel_status), {watcher},
1599
- ReadDelayHandle::NoWait());
1600
- }
1734
+ << "[xds_client " << this << "] returning cached error for " << name
1735
+ << ": " << resource_state.failed_status();
1736
+ NotifyWatchersOnError(resource_state, ReadDelayHandle::NoWait(),
1737
+ {watcher});
1601
1738
  }
1602
1739
  }
1603
- work_serializer_.DrainQueue();
1740
+ // Make sure all channels are subscribing to the resource.
1741
+ for (const auto& channel : authority_state.xds_channels) {
1742
+ channel->SubscribeLocked(type, *resource_name);
1743
+ }
1744
+ // If the channel is not connected, report an error to the watcher.
1745
+ absl::Status channel_status = authority_state.xds_channels.back()->status();
1746
+ if (!channel_status.ok()) {
1747
+ GRPC_TRACE_LOG(xds_client, INFO)
1748
+ << "[xds_client " << this << "] returning cached channel error for "
1749
+ << name << ": " << channel_status;
1750
+ NotifyWatchersOnError(resource_state, ReadDelayHandle::NoWait(), {watcher},
1751
+ std::move(channel_status));
1752
+ }
1604
1753
  }
1605
1754
 
1606
1755
  void XdsClient::CancelResourceWatch(const XdsResourceType* type,
@@ -1618,34 +1767,63 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
1618
1767
  if (authority_it == authority_state_map_.end()) return;
1619
1768
  AuthorityState& authority_state = authority_it->second;
1620
1769
  // Find type map.
1621
- auto type_it = authority_state.resource_map.find(type);
1622
- if (type_it == authority_state.resource_map.end()) return;
1623
- auto& type_map = type_it->second;
1770
+ auto type_it = authority_state.type_map.find(type);
1771
+ if (type_it == authority_state.type_map.end()) return;
1772
+ auto& resource_map = type_it->second;
1624
1773
  // Find resource key.
1625
- auto resource_it = type_map.find(resource_name->key);
1626
- if (resource_it == type_map.end()) return;
1774
+ auto resource_it = resource_map.find(resource_name->key);
1775
+ if (resource_it == resource_map.end()) return;
1627
1776
  ResourceState& resource_state = resource_it->second;
1628
1777
  // Remove watcher.
1629
1778
  resource_state.RemoveWatcher(watcher);
1630
- // Clean up empty map entries, if any.
1779
+ // If this was the last watcher, clean up.
1631
1780
  if (!resource_state.HasWatchers()) {
1632
- if (resource_state.ignored_deletion()) {
1633
- LOG(INFO) << "[xds_client " << this
1634
- << "] unsubscribing from a resource for which we "
1635
- << "previously ignored a deletion: type " << type->type_url()
1636
- << " name " << name;
1637
- }
1781
+ // Unsubscribe from this resource on all XdsChannels.
1638
1782
  for (const auto& xds_channel : authority_state.xds_channels) {
1639
1783
  xds_channel->UnsubscribeLocked(type, *resource_name,
1640
1784
  delay_unsubscription);
1641
1785
  }
1642
- type_map.erase(resource_it);
1643
- if (type_map.empty()) {
1644
- authority_state.resource_map.erase(type_it);
1645
- if (authority_state.resource_map.empty()) {
1646
- authority_state.xds_channels.clear();
1786
+ // Note: We wait to remove the cache entry until we actualle send
1787
+ // the unsubscription message on the ADS stream, so that if a watch is
1788
+ // stopped and then started again before we send the next request
1789
+ // for that resource type, we don't lose the cache entry without the
1790
+ // xDS server knowing it needs to re-send it.
1791
+ //
1792
+ // Note: Because the cache cleanup may have been triggered by the
1793
+ // unsubscription, it's no longer safe to access any of the
1794
+ // iterators that we have from above.
1795
+ }
1796
+ }
1797
+
1798
+ void XdsClient::MaybeRemoveUnsubscribedCacheEntriesForTypeLocked(
1799
+ XdsChannel* xds_channel, const XdsResourceType* type) {
1800
+ for (auto authority_it = authority_state_map_.begin();
1801
+ authority_it != authority_state_map_.end();) {
1802
+ AuthorityState& authority_state = authority_it->second;
1803
+ if (authority_state.xds_channels.back() == xds_channel) {
1804
+ // Find type map.
1805
+ auto type_it = authority_state.type_map.find(type);
1806
+ if (type_it != authority_state.type_map.end()) {
1807
+ auto& resource_map = type_it->second;
1808
+ // Remove the cache entry for any resource without watchers.
1809
+ for (auto resource_it = resource_map.begin();
1810
+ resource_it != resource_map.end();) {
1811
+ ResourceState& resource_state = resource_it->second;
1812
+ if (!resource_state.HasWatchers()) {
1813
+ resource_map.erase(resource_it++);
1814
+ } else {
1815
+ ++resource_it;
1816
+ }
1817
+ }
1818
+ // Clean up empty entries in the map.
1819
+ if (resource_map.empty()) authority_state.type_map.erase(type_it);
1647
1820
  }
1648
1821
  }
1822
+ if (authority_state.type_map.empty()) {
1823
+ authority_state_map_.erase(authority_it++);
1824
+ } else {
1825
+ ++authority_it;
1826
+ }
1649
1827
  }
1650
1828
  }
1651
1829
 
@@ -1688,9 +1866,9 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
1688
1866
  }
1689
1867
  // Canonicalize order of query params.
1690
1868
  std::vector<URI::QueryParam> query_params;
1691
- for (const auto& p : uri->query_parameter_map()) {
1869
+ for (const auto& [key, value] : uri->query_parameter_map()) {
1692
1870
  query_params.emplace_back(
1693
- URI::QueryParam{std::string(p.first), std::string(p.second)});
1871
+ URI::QueryParam{std::string(key), std::string(value)});
1694
1872
  }
1695
1873
  return XdsResourceName{
1696
1874
  uri->authority(),
@@ -1713,8 +1891,8 @@ std::string XdsClient::ConstructFullXdsResourceName(
1713
1891
 
1714
1892
  void XdsClient::ResetBackoff() {
1715
1893
  MutexLock lock(&mu_);
1716
- for (auto& p : xds_channel_map_) {
1717
- p.second->ResetBackoff();
1894
+ for (auto& [_, xds_channel] : xds_channel_map_) {
1895
+ xds_channel->ResetBackoff();
1718
1896
  }
1719
1897
  }
1720
1898
 
@@ -1731,12 +1909,12 @@ void XdsClient::NotifyWatchersOnResourceChanged(
1731
1909
  resource,
1732
1910
  WatcherSet watchers, RefCountedPtr<ReadDelayHandle> read_delay_handle) {
1733
1911
  if (!resource.ok()) resource = AppendNodeToStatus(resource.status());
1734
- work_serializer_.Schedule(
1912
+ work_serializer_.Run(
1735
1913
  [watchers = std::move(watchers), resource = std::move(resource),
1736
1914
  read_delay_handle = std::move(read_delay_handle)]()
1737
1915
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1738
- for (const auto& p : watchers) {
1739
- p->OnGenericResourceChanged(resource, read_delay_handle);
1916
+ for (const auto& watcher : watchers) {
1917
+ watcher->OnGenericResourceChanged(resource, read_delay_handle);
1740
1918
  }
1741
1919
  },
1742
1920
  DEBUG_LOCATION);
@@ -1746,17 +1924,32 @@ void XdsClient::NotifyWatchersOnAmbientError(
1746
1924
  absl::Status status, WatcherSet watchers,
1747
1925
  RefCountedPtr<ReadDelayHandle> read_delay_handle) {
1748
1926
  if (!status.ok()) status = AppendNodeToStatus(status);
1749
- work_serializer_.Schedule(
1927
+ work_serializer_.Run(
1750
1928
  [watchers = std::move(watchers), status = std::move(status),
1751
1929
  read_delay_handle = std::move(read_delay_handle)]()
1752
1930
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1753
- for (const auto& p : watchers) {
1754
- p->OnAmbientError(status, read_delay_handle);
1931
+ for (const auto& watcher : watchers) {
1932
+ watcher->OnAmbientError(status, read_delay_handle);
1755
1933
  }
1756
1934
  },
1757
1935
  DEBUG_LOCATION);
1758
1936
  }
1759
1937
 
1938
+ void XdsClient::NotifyWatchersOnError(
1939
+ const ResourceState& resource_state,
1940
+ RefCountedPtr<ReadDelayHandle> read_delay_handle, WatcherSet watchers,
1941
+ absl::Status status) {
1942
+ if (watchers.empty()) watchers = resource_state.watchers();
1943
+ if (status.ok()) status = resource_state.failed_status();
1944
+ if (!resource_state.HasResource()) {
1945
+ NotifyWatchersOnResourceChanged(std::move(status), std::move(watchers),
1946
+ std::move(read_delay_handle));
1947
+ } else {
1948
+ NotifyWatchersOnAmbientError(std::move(status), std::move(watchers),
1949
+ std::move(read_delay_handle));
1950
+ }
1951
+ }
1952
+
1760
1953
  void XdsClient::DumpClientConfig(
1761
1954
  std::set<std::string>* string_pool, upb_Arena* arena,
1762
1955
  envoy_service_status_v3_ClientConfig* client_config) {
@@ -1767,25 +1960,25 @@ void XdsClient::DumpClientConfig(
1767
1960
  PopulateXdsNode(bootstrap_->node(), user_agent_name_, user_agent_version_,
1768
1961
  node, arena);
1769
1962
  // Dump each resource.
1770
- for (const auto& a : authority_state_map_) { // authority
1771
- const std::string& authority = a.first;
1772
- for (const auto& t : a.second.resource_map) { // type
1773
- const XdsResourceType* type = t.first;
1963
+ for (const auto& [authority, authority_state] : authority_state_map_) {
1964
+ for (const auto& [type, resource_map] : authority_state.type_map) {
1774
1965
  auto it =
1775
1966
  string_pool
1776
1967
  ->emplace(absl::StrCat("type.googleapis.com/", type->type_url()))
1777
1968
  .first;
1778
1969
  upb_StringView type_url = StdStringToUpbString(*it);
1779
- for (const auto& r : t.second) { // resource id
1970
+ for (const auto& [resource_key, resource_state] : resource_map) {
1971
+ if (!resource_state.HasWatchers()) continue;
1780
1972
  auto it2 = string_pool
1781
1973
  ->emplace(ConstructFullXdsResourceName(
1782
- authority, type->type_url(), r.first))
1974
+ authority, type->type_url(), resource_key))
1783
1975
  .first;
1784
1976
  upb_StringView resource_name = StdStringToUpbString(*it2);
1785
1977
  envoy_service_status_v3_ClientConfig_GenericXdsConfig* entry =
1786
1978
  envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
1787
1979
  client_config, arena);
1788
- r.second.FillGenericXdsConfig(type_url, resource_name, arena, entry);
1980
+ resource_state.FillGenericXdsConfig(type_url, resource_name, arena,
1981
+ entry);
1789
1982
  }
1790
1983
  }
1791
1984
  }
@@ -1794,19 +1987,21 @@ void XdsClient::DumpClientConfig(
1794
1987
  void XdsClient::ReportResourceCounts(
1795
1988
  absl::FunctionRef<void(const ResourceCountLabels&, uint64_t)> func) {
1796
1989
  ResourceCountLabels labels;
1797
- for (const auto& a : authority_state_map_) { // authority
1798
- labels.xds_authority = a.first;
1799
- for (const auto& t : a.second.resource_map) { // type
1800
- labels.resource_type = t.first->type_url();
1990
+ for (const auto& [authority, authority_state] : authority_state_map_) {
1991
+ labels.xds_authority = authority;
1992
+ for (const auto& [type, resource_map] : authority_state.type_map) {
1993
+ labels.resource_type = type->type_url();
1801
1994
  // Count the number of entries in each state.
1802
1995
  std::map<absl::string_view, uint64_t> counts;
1803
- for (const auto& r : t.second) { // resource id
1804
- ++counts[r.second.CacheStateString()];
1996
+ for (const auto& [_, resource_state] : resource_map) {
1997
+ if (resource_state.HasWatchers()) {
1998
+ ++counts[resource_state.CacheStateString()];
1999
+ }
1805
2000
  }
1806
2001
  // Report the count for each state.
1807
- for (const auto& c : counts) {
1808
- labels.cache_state = c.first;
1809
- func(labels, c.second);
2002
+ for (const auto& [state, count] : counts) {
2003
+ labels.cache_state = state;
2004
+ func(labels, count);
1810
2005
  }
1811
2006
  }
1812
2007
  }
@@ -1814,8 +2009,8 @@ void XdsClient::ReportResourceCounts(
1814
2009
 
1815
2010
  void XdsClient::ReportServerConnections(
1816
2011
  absl::FunctionRef<void(absl::string_view, bool)> func) {
1817
- for (const auto& p : xds_channel_map_) {
1818
- func(p.second->server_uri(), p.second->status().ok());
2012
+ for (const auto& [_, xds_channel] : xds_channel_map_) {
2013
+ func(xds_channel->server_uri(), xds_channel->status().ok());
1819
2014
  }
1820
2015
  }
1821
2016