grpc 1.53.2 → 1.54.0

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

Potentially problematic release.


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

Files changed (693) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -66
  3. data/include/grpc/event_engine/event_engine.h +30 -14
  4. data/include/grpc/grpc_security.h +4 -0
  5. data/include/grpc/support/port_platform.h +4 -4
  6. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  9. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  10. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  11. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  12. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  16. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  17. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  19. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  26. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  27. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  28. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  29. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  30. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  31. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  32. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  33. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  34. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  35. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  37. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  38. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  39. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  40. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  41. data/src/core/ext/gcp/metadata_query.cc +142 -0
  42. data/src/core/ext/gcp/metadata_query.h +82 -0
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  44. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -12
  45. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -5
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +116 -58
  47. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  48. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +222 -118
  51. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +113 -295
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -2
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +0 -2
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +277 -451
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -14
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -9
  58. data/src/core/ext/transport/chttp2/transport/internal.h +16 -3
  59. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  60. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  61. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  62. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  63. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  68. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  69. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  72. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  73. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  74. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  75. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  76. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  77. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  78. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  79. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +5 -3
  80. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +24 -0
  81. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  82. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  85. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  86. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  87. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  92. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  94. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  95. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  97. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  98. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  100. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  101. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  102. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  104. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  105. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  106. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  107. data/src/core/ext/xds/xds_client_stats.h +24 -20
  108. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  109. data/src/core/ext/xds/xds_endpoint.h +9 -1
  110. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  111. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  112. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  113. data/src/core/lib/channel/call_finalization.h +1 -1
  114. data/src/core/lib/channel/call_tracer.cc +51 -0
  115. data/src/core/lib/channel/call_tracer.h +101 -38
  116. data/src/core/lib/channel/connected_channel.cc +483 -1050
  117. data/src/core/lib/channel/context.h +8 -1
  118. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  119. data/src/core/lib/channel/promise_based_filter.h +27 -13
  120. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  121. data/src/core/lib/config/config_vars.cc +151 -0
  122. data/src/core/lib/config/config_vars.h +127 -0
  123. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  124. data/src/core/lib/config/load_config.cc +66 -0
  125. data/src/core/lib/config/load_config.h +49 -0
  126. data/src/core/lib/debug/trace.cc +5 -6
  127. data/src/core/lib/debug/trace.h +0 -5
  128. data/src/core/lib/event_engine/event_engine.cc +37 -2
  129. data/src/core/lib/event_engine/handle_containers.h +7 -22
  130. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  131. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  132. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  133. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  134. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  135. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  136. data/src/core/lib/event_engine/posix_engine/posix_engine.h +0 -1
  137. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -32
  138. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +0 -3
  139. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  141. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  142. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  143. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  144. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  145. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  146. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  147. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  148. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  149. data/src/core/lib/experiments/config.cc +3 -10
  150. data/src/core/lib/experiments/experiments.cc +7 -0
  151. data/src/core/lib/experiments/experiments.h +9 -1
  152. data/src/core/lib/gpr/log.cc +15 -28
  153. data/src/core/lib/gprpp/fork.cc +8 -14
  154. data/src/core/lib/gprpp/orphanable.h +4 -3
  155. data/src/core/lib/gprpp/per_cpu.h +9 -3
  156. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  157. data/src/core/lib/gprpp/ref_counted.h +33 -34
  158. data/src/core/lib/gprpp/thd.h +16 -0
  159. data/src/core/lib/gprpp/time.cc +1 -0
  160. data/src/core/lib/gprpp/time.h +4 -4
  161. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  162. data/src/core/lib/iomgr/call_combiner.h +2 -2
  163. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  164. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  165. data/src/core/lib/iomgr/ev_posix.h +0 -3
  166. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  167. data/src/core/lib/iomgr/iomgr.cc +4 -8
  168. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  169. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  170. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  171. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  172. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  173. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  174. data/src/core/lib/iomgr/tcp_server_posix.cc +19 -55
  175. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -12
  176. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  177. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  178. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  179. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  180. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  181. data/src/core/lib/promise/activity.cc +22 -6
  182. data/src/core/lib/promise/activity.h +61 -24
  183. data/src/core/lib/promise/cancel_callback.h +77 -0
  184. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  185. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  186. data/src/core/lib/promise/for_each.h +176 -0
  187. data/src/core/lib/promise/if.h +9 -0
  188. data/src/core/lib/promise/interceptor_list.h +23 -2
  189. data/src/core/lib/promise/latch.h +89 -3
  190. data/src/core/lib/promise/loop.h +13 -9
  191. data/src/core/lib/promise/map.h +7 -0
  192. data/src/core/lib/promise/party.cc +286 -0
  193. data/src/core/lib/promise/party.h +499 -0
  194. data/src/core/lib/promise/pipe.h +197 -57
  195. data/src/core/lib/promise/poll.h +48 -0
  196. data/src/core/lib/promise/promise.h +2 -2
  197. data/src/core/lib/resource_quota/arena.cc +19 -3
  198. data/src/core/lib/resource_quota/arena.h +119 -5
  199. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  202. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  204. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  207. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  208. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  209. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  210. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  211. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  212. data/src/core/lib/slice/slice.cc +1 -1
  213. data/src/core/lib/surface/builtins.cc +2 -0
  214. data/src/core/lib/surface/call.cc +926 -1024
  215. data/src/core/lib/surface/call.h +10 -0
  216. data/src/core/lib/surface/lame_client.cc +1 -0
  217. data/src/core/lib/surface/validate_metadata.cc +42 -43
  218. data/src/core/lib/surface/validate_metadata.h +0 -9
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/batch_builder.cc +179 -0
  221. data/src/core/lib/transport/batch_builder.h +468 -0
  222. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  223. data/src/core/lib/transport/bdp_estimator.h +10 -6
  224. data/src/core/lib/transport/custom_metadata.h +30 -0
  225. data/src/core/lib/transport/metadata_batch.cc +5 -2
  226. data/src/core/lib/transport/metadata_batch.h +17 -113
  227. data/src/core/lib/transport/parsed_metadata.h +6 -16
  228. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  229. data/src/core/lib/transport/transport.cc +30 -2
  230. data/src/core/lib/transport/transport.h +70 -14
  231. data/src/core/lib/transport/transport_impl.h +7 -0
  232. data/src/core/lib/transport/transport_op_string.cc +52 -42
  233. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  234. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  235. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  236. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  237. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  238. data/src/core/tsi/ssl_transport_security.cc +4 -2
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  241. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  242. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  243. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  244. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  245. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  246. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  247. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  248. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  255. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  256. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  257. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  258. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  259. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  260. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  261. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  262. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  263. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  264. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  265. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  266. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  291. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  292. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  293. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  294. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  295. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  298. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  301. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  302. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  303. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  304. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  305. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  306. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  307. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  308. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  309. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  310. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  311. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  312. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  313. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  314. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  318. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  320. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  323. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  324. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  325. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  326. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  327. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  328. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  329. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  330. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  331. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  333. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  334. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  335. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  336. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  337. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  338. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  339. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  340. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  341. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  342. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  344. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  345. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  346. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  347. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  349. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  350. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  351. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  352. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  366. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  367. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  368. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  369. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  370. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  400. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  407. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  449. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  451. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  452. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  453. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  454. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  455. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  456. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  457. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  458. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  459. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  460. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  461. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  463. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  464. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  466. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  467. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  468. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  469. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  470. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  472. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  473. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  474. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  475. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  476. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  477. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  478. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  479. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  480. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  481. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  482. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  483. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  484. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  485. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  486. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  487. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  488. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  535. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  536. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  537. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  538. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  560. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  561. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  562. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  563. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  564. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  565. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  566. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  567. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  568. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  569. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  570. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  571. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  572. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  573. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  574. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  575. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  577. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  578. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  580. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  581. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  582. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  584. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  585. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  586. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  588. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  589. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  590. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  593. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  595. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  596. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  597. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  598. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  600. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  601. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  602. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  604. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  605. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  606. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  607. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  608. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  609. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  610. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  611. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  612. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  613. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  614. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  615. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  616. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  617. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  618. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  619. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  620. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  621. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  622. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  633. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  640. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  644. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  645. metadata +103 -70
  646. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  647. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  648. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -29
  649. data/src/core/lib/gprpp/global_config.h +0 -93
  650. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  651. data/src/core/lib/gprpp/global_config_env.h +0 -133
  652. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  653. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  654. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  655. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  657. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  658. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  659. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  660. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  661. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  663. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  664. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  667. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  668. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  669. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  670. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  671. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  672. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  673. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  674. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  675. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  676. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  677. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  678. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  679. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  680. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  681. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  682. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  683. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  684. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  685. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  686. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  687. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  688. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  689. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  690. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  691. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  692. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  693. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
@@ -61,6 +61,7 @@
61
61
  #include <string.h>
62
62
 
63
63
  #include <algorithm>
64
+ #include <atomic>
64
65
  #include <initializer_list>
65
66
  #include <map>
66
67
  #include <memory>
@@ -389,19 +390,15 @@ class GrpcLb : public LoadBalancingPolicy {
389
390
  // Returns the LB token to use for a drop, or null if the call
390
391
  // should not be dropped.
391
392
  //
392
- // Note: This is called from the picker, so it will be invoked in
393
- // the channel's data plane mutex, NOT the control plane
394
- // work_serializer. It should not be accessed by any other part of the LB
395
- // policy.
393
+ // Note: This is called from the picker, NOT from inside the control
394
+ // plane work_serializer.
396
395
  const char* ShouldDrop();
397
396
 
398
397
  private:
399
398
  std::vector<GrpcLbServer> serverlist_;
400
399
 
401
- // Guarded by the channel's data plane mutex, NOT the control
402
- // plane work_serializer. It should not be accessed by anything but the
403
- // picker via the ShouldDrop() method.
404
- size_t drop_index_ = 0;
400
+ // Accessed from the picker, so needs synchronization.
401
+ std::atomic<size_t> drop_index_{0};
405
402
  };
406
403
 
407
404
  class Picker : public SubchannelPicker {
@@ -717,8 +714,8 @@ bool GrpcLb::Serverlist::ContainsAllDropEntries() const {
717
714
 
718
715
  const char* GrpcLb::Serverlist::ShouldDrop() {
719
716
  if (serverlist_.empty()) return nullptr;
720
- GrpcLbServer& server = serverlist_[drop_index_];
721
- drop_index_ = (drop_index_ + 1) % serverlist_.size();
717
+ size_t index = drop_index_.fetch_add(1, std::memory_order_relaxed);
718
+ GrpcLbServer& server = serverlist_[index % serverlist_.size()];
722
719
  return server.drop ? server.load_balance_token : nullptr;
723
720
  }
724
721
 
@@ -1165,13 +1162,15 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1165
1162
  upb::Arena arena;
1166
1163
  if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
1167
1164
  (response.type == response.INITIAL && seen_initial_response_)) {
1168
- char* response_slice_str =
1169
- grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1170
- gpr_log(GPR_ERROR,
1171
- "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1172
- "Ignoring.",
1173
- grpclb_policy(), this, response_slice_str);
1174
- gpr_free(response_slice_str);
1165
+ if (gpr_should_log(GPR_LOG_SEVERITY_ERROR)) {
1166
+ char* response_slice_str =
1167
+ grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1168
+ gpr_log(GPR_ERROR,
1169
+ "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1170
+ "Ignoring.",
1171
+ grpclb_policy(), this, response_slice_str);
1172
+ gpr_free(response_slice_str);
1173
+ }
1175
1174
  } else {
1176
1175
  switch (response.type) {
1177
1176
  case response.INITIAL: {
@@ -1532,7 +1531,7 @@ void GrpcLb::ShutdownLocked() {
1532
1531
  GPR_ASSERT(child_channelz_node != nullptr);
1533
1532
  parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1534
1533
  }
1535
- grpc_channel_destroy(lb_channel_);
1534
+ grpc_channel_destroy_internal(lb_channel_);
1536
1535
  lb_channel_ = nullptr;
1537
1536
  }
1538
1537
  }
@@ -22,7 +22,6 @@
22
22
  #include <stdlib.h>
23
23
 
24
24
  #include <algorithm>
25
- #include <atomic>
26
25
  #include <cmath>
27
26
  #include <memory>
28
27
  #include <string>
@@ -30,7 +29,6 @@
30
29
  #include <vector>
31
30
 
32
31
  #include "absl/base/attributes.h"
33
- #include "absl/base/thread_annotations.h"
34
32
  #include "absl/container/inlined_vector.h"
35
33
  #include "absl/status/status.h"
36
34
  #include "absl/status/statusor.h"
@@ -39,15 +37,14 @@
39
37
  #include "absl/strings/string_view.h"
40
38
  #include "absl/types/optional.h"
41
39
 
42
- #include <grpc/grpc.h>
43
-
44
40
  #define XXH_INLINE_ALL
45
41
  #include "xxhash.h"
46
42
 
43
+ #include <grpc/grpc.h>
47
44
  #include <grpc/impl/connectivity_state.h>
48
45
  #include <grpc/support/log.h>
49
46
 
50
- #include "src/core/ext/filters/client_channel/client_channel.h"
47
+ #include "src/core/ext/filters/client_channel/client_channel_internal.h"
51
48
  #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
52
49
  #include "src/core/lib/address_utils/sockaddr_utils.h"
53
50
  #include "src/core/lib/channel/channel_args.h"
@@ -55,8 +52,8 @@
55
52
  #include "src/core/lib/debug/trace.h"
56
53
  #include "src/core/lib/gprpp/debug_location.h"
57
54
  #include "src/core/lib/gprpp/orphanable.h"
55
+ #include "src/core/lib/gprpp/ref_counted.h"
58
56
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
59
- #include "src/core/lib/gprpp/sync.h"
60
57
  #include "src/core/lib/gprpp/unique_type_name.h"
61
58
  #include "src/core/lib/gprpp/work_serializer.h"
62
59
  #include "src/core/lib/iomgr/closure.h"
@@ -143,8 +140,6 @@ class RingHash : public LoadBalancingPolicy {
143
140
  void ResetBackoffLocked() override;
144
141
 
145
142
  private:
146
- ~RingHash() override;
147
-
148
143
  // Forward declaration.
149
144
  class RingHashSubchannelList;
150
145
 
@@ -165,13 +160,11 @@ class RingHash : public LoadBalancingPolicy {
165
160
 
166
161
  const ServerAddress& address() const { return address_; }
167
162
 
168
- grpc_connectivity_state GetConnectivityState() const {
169
- return connectivity_state_.load(std::memory_order_relaxed);
163
+ grpc_connectivity_state logical_connectivity_state() const {
164
+ return logical_connectivity_state_;
170
165
  }
171
-
172
- absl::Status GetConnectivityStatus() const {
173
- MutexLock lock(&mu_);
174
- return connectivity_status_;
166
+ const absl::Status& logical_connectivity_status() const {
167
+ return logical_connectivity_status_;
175
168
  }
176
169
 
177
170
  private:
@@ -188,20 +181,28 @@ class RingHash : public LoadBalancingPolicy {
188
181
  // subchannel in some cases; for example, once this is set to
189
182
  // TRANSIENT_FAILURE, we do not change it again until we get READY,
190
183
  // so we skip any interim stops in CONNECTING.
191
- // Uses an atomic so that it can be accessed outside of the WorkSerializer.
192
- std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
193
-
194
- mutable Mutex mu_;
195
- absl::Status connectivity_status_ ABSL_GUARDED_BY(&mu_);
184
+ grpc_connectivity_state logical_connectivity_state_ = GRPC_CHANNEL_IDLE;
185
+ absl::Status logical_connectivity_status_;
196
186
  };
197
187
 
198
188
  // A list of subchannels and the ring containing those subchannels.
199
189
  class RingHashSubchannelList
200
190
  : public SubchannelList<RingHashSubchannelList, RingHashSubchannelData> {
201
191
  public:
202
- struct RingEntry {
203
- uint64_t hash;
204
- RingHashSubchannelData* subchannel;
192
+ class Ring : public RefCounted<Ring> {
193
+ public:
194
+ struct RingEntry {
195
+ uint64_t hash;
196
+ size_t subchannel_index;
197
+ };
198
+
199
+ Ring(RingHashLbConfig* config, RingHashSubchannelList* subchannel_list,
200
+ const ChannelArgs& args);
201
+
202
+ const std::vector<RingEntry>& ring() const { return ring_; }
203
+
204
+ private:
205
+ std::vector<RingEntry> ring_;
205
206
  };
206
207
 
207
208
  RingHashSubchannelList(RingHash* policy, ServerAddressList addresses,
@@ -212,7 +213,7 @@ class RingHash : public LoadBalancingPolicy {
212
213
  p->Unref(DEBUG_LOCATION, "subchannel_list");
213
214
  }
214
215
 
215
- const std::vector<RingEntry>& ring() const { return ring_; }
216
+ RefCountedPtr<Ring> ring() { return ring_; }
216
217
 
217
218
  // Updates the counters of subchannels in each state when a
218
219
  // subchannel transitions from old_state to new_state.
@@ -236,7 +237,7 @@ class RingHash : public LoadBalancingPolicy {
236
237
  size_t num_connecting_ = 0;
237
238
  size_t num_transient_failure_ = 0;
238
239
 
239
- std::vector<RingEntry> ring_;
240
+ RefCountedPtr<Ring> ring_;
240
241
 
241
242
  // The index of the subchannel currently doing an internally
242
243
  // triggered connection attempt, if any.
@@ -251,24 +252,31 @@ class RingHash : public LoadBalancingPolicy {
251
252
 
252
253
  class Picker : public SubchannelPicker {
253
254
  public:
254
- explicit Picker(RefCountedPtr<RingHashSubchannelList> subchannel_list)
255
- : subchannel_list_(std::move(subchannel_list)) {}
256
-
257
- ~Picker() override {
258
- // Hop into WorkSerializer to unref the subchannel list, since that may
259
- // trigger the unreffing of the underlying subchannels.
260
- MakeOrphanable<WorkSerializerRunner>(std::move(subchannel_list_));
255
+ Picker(RefCountedPtr<RingHash> ring_hash_lb,
256
+ RingHashSubchannelList* subchannel_list)
257
+ : ring_hash_lb_(std::move(ring_hash_lb)),
258
+ ring_(subchannel_list->ring()) {
259
+ subchannels_.reserve(subchannel_list->num_subchannels());
260
+ for (size_t i = 0; i < subchannel_list->num_subchannels(); ++i) {
261
+ RingHashSubchannelData* subchannel_data =
262
+ subchannel_list->subchannel(i);
263
+ subchannels_.emplace_back(
264
+ SubchannelInfo{subchannel_data->subchannel()->Ref(),
265
+ subchannel_data->logical_connectivity_state(),
266
+ subchannel_data->logical_connectivity_status()});
267
+ }
261
268
  }
262
269
 
263
270
  PickResult Pick(PickArgs args) override;
264
271
 
265
272
  private:
266
- // An interface for running a callback in the control plane WorkSerializer.
267
- class WorkSerializerRunner : public Orphanable {
273
+ // A fire-and-forget class that schedules subchannel connection attempts
274
+ // on the control plane WorkSerializer.
275
+ class SubchannelConnectionAttempter : public Orphanable {
268
276
  public:
269
- explicit WorkSerializerRunner(
270
- RefCountedPtr<RingHashSubchannelList> subchannel_list)
271
- : subchannel_list_(std::move(subchannel_list)) {
277
+ explicit SubchannelConnectionAttempter(
278
+ RefCountedPtr<RingHash> ring_hash_lb)
279
+ : ring_hash_lb_(std::move(ring_hash_lb)) {
272
280
  GRPC_CLOSURE_INIT(&closure_, RunInExecCtx, this, nullptr);
273
281
  }
274
282
 
@@ -278,56 +286,43 @@ class RingHash : public LoadBalancingPolicy {
278
286
  ExecCtx::Run(DEBUG_LOCATION, &closure_, absl::OkStatus());
279
287
  }
280
288
 
281
- // Will be invoked inside of the WorkSerializer.
282
- virtual void Run() {}
283
-
284
- protected:
285
- RingHash* ring_hash_lb() const {
286
- return static_cast<RingHash*>(subchannel_list_->policy());
289
+ void AddSubchannel(RefCountedPtr<SubchannelInterface> subchannel) {
290
+ subchannels_.push_back(std::move(subchannel));
287
291
  }
288
292
 
289
293
  private:
290
294
  static void RunInExecCtx(void* arg, grpc_error_handle /*error*/) {
291
- auto* self = static_cast<WorkSerializerRunner*>(arg);
292
- self->ring_hash_lb()->work_serializer()->Run(
295
+ auto* self = static_cast<SubchannelConnectionAttempter*>(arg);
296
+ self->ring_hash_lb_->work_serializer()->Run(
293
297
  [self]() {
294
- self->Run();
298
+ if (!self->ring_hash_lb_->shutdown_) {
299
+ for (auto& subchannel : self->subchannels_) {
300
+ subchannel->RequestConnection();
301
+ }
302
+ }
295
303
  delete self;
296
304
  },
297
305
  DEBUG_LOCATION);
298
306
  }
299
307
 
300
- RefCountedPtr<RingHashSubchannelList> subchannel_list_;
308
+ RefCountedPtr<RingHash> ring_hash_lb_;
301
309
  grpc_closure closure_;
310
+ std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
302
311
  };
303
312
 
304
- // A fire-and-forget class that schedules subchannel connection attempts
305
- // on the control plane WorkSerializer.
306
- class SubchannelConnectionAttempter : public WorkSerializerRunner {
307
- public:
308
- explicit SubchannelConnectionAttempter(
309
- RefCountedPtr<RingHashSubchannelList> subchannel_list)
310
- : WorkSerializerRunner(std::move(subchannel_list)) {}
311
-
312
- void AddSubchannel(RefCountedPtr<SubchannelInterface> subchannel) {
313
- subchannels_.push_back(std::move(subchannel));
314
- }
315
-
316
- void Run() override {
317
- if (!ring_hash_lb()->shutdown_) {
318
- for (auto& subchannel : subchannels_) {
319
- subchannel->RequestConnection();
320
- }
321
- }
322
- }
323
-
324
- private:
325
- std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
313
+ struct SubchannelInfo {
314
+ RefCountedPtr<SubchannelInterface> subchannel;
315
+ grpc_connectivity_state state;
316
+ absl::Status status;
326
317
  };
327
318
 
328
- RefCountedPtr<RingHashSubchannelList> subchannel_list_;
319
+ RefCountedPtr<RingHash> ring_hash_lb_;
320
+ RefCountedPtr<RingHashSubchannelList::Ring> ring_;
321
+ std::vector<SubchannelInfo> subchannels_;
329
322
  };
330
323
 
324
+ ~RingHash() override;
325
+
331
326
  void ShutdownLocked() override;
332
327
 
333
328
  // Current config from resolver.
@@ -345,15 +340,14 @@ class RingHash : public LoadBalancingPolicy {
345
340
  //
346
341
 
347
342
  RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
348
- auto* call_state = static_cast<ClientChannel::LoadBalancedCall::LbCallState*>(
349
- args.call_state);
343
+ auto* call_state = static_cast<ClientChannelLbCallState*>(args.call_state);
350
344
  auto hash = call_state->GetCallAttribute(RequestHashAttributeName());
351
345
  uint64_t h;
352
346
  if (!absl::SimpleAtoi(hash, &h)) {
353
347
  return PickResult::Fail(
354
348
  absl::InternalError("ring hash value is not a number"));
355
349
  }
356
- const auto& ring = subchannel_list_->ring();
350
+ const auto& ring = ring_->ring();
357
351
  // Ported from https://github.com/RJ/ketama/blob/master/libketama/ketama.c
358
352
  // (ketama_get_server) NOTE: The algorithm depends on using signed integers
359
353
  // for lowp, highp, and first_index. Do not change them!
@@ -386,27 +380,25 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
386
380
  [&](RefCountedPtr<SubchannelInterface> subchannel) {
387
381
  if (subchannel_connection_attempter == nullptr) {
388
382
  subchannel_connection_attempter =
389
- MakeOrphanable<SubchannelConnectionAttempter>(
390
- subchannel_list_->Ref(DEBUG_LOCATION,
391
- "SubchannelConnectionAttempter"));
383
+ MakeOrphanable<SubchannelConnectionAttempter>(ring_hash_lb_->Ref(
384
+ DEBUG_LOCATION, "SubchannelConnectionAttempter"));
392
385
  }
393
386
  subchannel_connection_attempter->AddSubchannel(std::move(subchannel));
394
387
  };
395
- switch (ring[first_index].subchannel->GetConnectivityState()) {
388
+ SubchannelInfo& first_subchannel =
389
+ subchannels_[ring[first_index].subchannel_index];
390
+ switch (first_subchannel.state) {
396
391
  case GRPC_CHANNEL_READY:
397
- return PickResult::Complete(
398
- ring[first_index].subchannel->subchannel()->Ref());
392
+ return PickResult::Complete(first_subchannel.subchannel);
399
393
  case GRPC_CHANNEL_IDLE:
400
- ScheduleSubchannelConnectionAttempt(
401
- ring[first_index].subchannel->subchannel()->Ref());
394
+ ScheduleSubchannelConnectionAttempt(first_subchannel.subchannel);
402
395
  ABSL_FALLTHROUGH_INTENDED;
403
396
  case GRPC_CHANNEL_CONNECTING:
404
397
  return PickResult::Queue();
405
398
  default: // GRPC_CHANNEL_TRANSIENT_FAILURE
406
399
  break;
407
400
  }
408
- ScheduleSubchannelConnectionAttempt(
409
- ring[first_index].subchannel->subchannel()->Ref());
401
+ ScheduleSubchannelConnectionAttempt(first_subchannel.subchannel);
410
402
  // Loop through remaining subchannels to find one in READY.
411
403
  // On the way, we make sure the right set of connection attempts
412
404
  // will happen.
@@ -414,19 +406,17 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
414
406
  bool found_first_non_failed = false;
415
407
  for (size_t i = 1; i < ring.size(); ++i) {
416
408
  const auto& entry = ring[(first_index + i) % ring.size()];
417
- if (entry.subchannel == ring[first_index].subchannel) {
409
+ if (entry.subchannel_index == ring[first_index].subchannel_index) {
418
410
  continue;
419
411
  }
420
- grpc_connectivity_state connectivity_state =
421
- entry.subchannel->GetConnectivityState();
422
- if (connectivity_state == GRPC_CHANNEL_READY) {
423
- return PickResult::Complete(entry.subchannel->subchannel()->Ref());
412
+ SubchannelInfo& subchannel_info = subchannels_[entry.subchannel_index];
413
+ if (subchannel_info.state == GRPC_CHANNEL_READY) {
414
+ return PickResult::Complete(subchannel_info.subchannel);
424
415
  }
425
416
  if (!found_second_subchannel) {
426
- switch (connectivity_state) {
417
+ switch (subchannel_info.state) {
427
418
  case GRPC_CHANNEL_IDLE:
428
- ScheduleSubchannelConnectionAttempt(
429
- entry.subchannel->subchannel()->Ref());
419
+ ScheduleSubchannelConnectionAttempt(subchannel_info.subchannel);
430
420
  ABSL_FALLTHROUGH_INTENDED;
431
421
  case GRPC_CHANNEL_CONNECTING:
432
422
  return PickResult::Queue();
@@ -436,13 +426,11 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
436
426
  found_second_subchannel = true;
437
427
  }
438
428
  if (!found_first_non_failed) {
439
- if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
440
- ScheduleSubchannelConnectionAttempt(
441
- entry.subchannel->subchannel()->Ref());
429
+ if (subchannel_info.state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
430
+ ScheduleSubchannelConnectionAttempt(subchannel_info.subchannel);
442
431
  } else {
443
- if (connectivity_state == GRPC_CHANNEL_IDLE) {
444
- ScheduleSubchannelConnectionAttempt(
445
- entry.subchannel->subchannel()->Ref());
432
+ if (subchannel_info.state == GRPC_CHANNEL_IDLE) {
433
+ ScheduleSubchannelConnectionAttempt(subchannel_info.subchannel);
446
434
  }
447
435
  found_first_non_failed = true;
448
436
  }
@@ -450,27 +438,16 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
450
438
  }
451
439
  return PickResult::Fail(absl::UnavailableError(absl::StrCat(
452
440
  "ring hash cannot find a connected subchannel; first failure: ",
453
- ring[first_index].subchannel->GetConnectivityStatus().ToString())));
441
+ first_subchannel.status.ToString())));
454
442
  }
455
443
 
456
444
  //
457
- // RingHash::RingHashSubchannelList
445
+ // RingHash::RingHashSubchannelList::Ring
458
446
  //
459
447
 
460
- RingHash::RingHashSubchannelList::RingHashSubchannelList(
461
- RingHash* policy, ServerAddressList addresses, const ChannelArgs& args)
462
- : SubchannelList(policy,
463
- (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)
464
- ? "RingHashSubchannelList"
465
- : nullptr),
466
- std::move(addresses), policy->channel_control_helper(),
467
- args),
468
- num_idle_(num_subchannels()) {
469
- // Need to maintain a ref to the LB policy as long as we maintain
470
- // any references to subchannels, since the subchannels'
471
- // pollset_sets will include the LB policy's pollset_set.
472
- policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
473
- // Construct the ring.
448
+ RingHash::RingHashSubchannelList::Ring::Ring(
449
+ RingHashLbConfig* config, RingHashSubchannelList* subchannel_list,
450
+ const ChannelArgs& args) {
474
451
  // Store the weights while finding the sum.
475
452
  struct AddressWeight {
476
453
  std::string address;
@@ -481,9 +458,9 @@ RingHash::RingHashSubchannelList::RingHashSubchannelList(
481
458
  };
482
459
  std::vector<AddressWeight> address_weights;
483
460
  size_t sum = 0;
484
- address_weights.reserve(num_subchannels());
485
- for (size_t i = 0; i < num_subchannels(); ++i) {
486
- RingHashSubchannelData* sd = subchannel(i);
461
+ address_weights.reserve(subchannel_list->num_subchannels());
462
+ for (size_t i = 0; i < subchannel_list->num_subchannels(); ++i) {
463
+ RingHashSubchannelData* sd = subchannel_list->subchannel(i);
487
464
  const ServerAddressWeightAttribute* weight_attribute = static_cast<
488
465
  const ServerAddressWeightAttribute*>(sd->address().GetAttribute(
489
466
  ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
@@ -517,10 +494,8 @@ RingHash::RingHashSubchannelList::RingHashSubchannelList(
517
494
  // to fit.
518
495
  const size_t ring_size_cap = args.GetInt(GRPC_ARG_RING_HASH_LB_RING_SIZE_CAP)
519
496
  .value_or(kRingSizeCapDefault);
520
- const size_t min_ring_size =
521
- std::min(policy->config_->min_ring_size(), ring_size_cap);
522
- const size_t max_ring_size =
523
- std::min(policy->config_->max_ring_size(), ring_size_cap);
497
+ const size_t min_ring_size = std::min(config->min_ring_size(), ring_size_cap);
498
+ const size_t max_ring_size = std::min(config->max_ring_size(), ring_size_cap);
524
499
  const double scale = std::min(
525
500
  std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
526
501
  static_cast<double>(max_ring_size));
@@ -537,7 +512,7 @@ RingHash::RingHashSubchannelList::RingHashSubchannelList(
537
512
  double target_hashes = 0.0;
538
513
  uint64_t min_hashes_per_host = ring_size;
539
514
  uint64_t max_hashes_per_host = 0;
540
- for (size_t i = 0; i < num_subchannels(); ++i) {
515
+ for (size_t i = 0; i < subchannel_list->num_subchannels(); ++i) {
541
516
  const std::string& address_string = address_weights[i].address;
542
517
  hash_key_buffer.assign(address_string.begin(), address_string.end());
543
518
  hash_key_buffer.emplace_back('_');
@@ -550,7 +525,7 @@ RingHash::RingHashSubchannelList::RingHashSubchannelList(
550
525
  absl::string_view hash_key(hash_key_buffer.data(),
551
526
  hash_key_buffer.size());
552
527
  const uint64_t hash = XXH64(hash_key.data(), hash_key.size(), 0);
553
- ring_.push_back({hash, subchannel(i)});
528
+ ring_.push_back({hash, i});
554
529
  ++count;
555
530
  ++current_hashes;
556
531
  hash_key_buffer.erase(offset_start, hash_key_buffer.end());
@@ -561,14 +536,34 @@ RingHash::RingHashSubchannelList::RingHashSubchannelList(
561
536
  std::max(static_cast<uint64_t>(i), max_hashes_per_host);
562
537
  }
563
538
  std::sort(ring_.begin(), ring_.end(),
564
- [](const RingHashSubchannelList::RingEntry& lhs,
565
- const RingHashSubchannelList::RingEntry& rhs) -> bool {
539
+ [](const RingEntry& lhs, const RingEntry& rhs) -> bool {
566
540
  return lhs.hash < rhs.hash;
567
541
  });
542
+ }
543
+
544
+ //
545
+ // RingHash::RingHashSubchannelList
546
+ //
547
+
548
+ RingHash::RingHashSubchannelList::RingHashSubchannelList(
549
+ RingHash* policy, ServerAddressList addresses, const ChannelArgs& args)
550
+ : SubchannelList(policy,
551
+ (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)
552
+ ? "RingHashSubchannelList"
553
+ : nullptr),
554
+ std::move(addresses), policy->channel_control_helper(),
555
+ args),
556
+ num_idle_(num_subchannels()) {
557
+ // Need to maintain a ref to the LB policy as long as we maintain
558
+ // any references to subchannels, since the subchannels'
559
+ // pollset_sets will include the LB policy's pollset_set.
560
+ policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
561
+ // Construct the ring.
562
+ ring_ = MakeRefCounted<Ring>(policy->config_.get(), this, args);
568
563
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
569
564
  gpr_log(GPR_INFO,
570
565
  "[RH %p] created subchannel list %p with %" PRIuPTR " ring entries",
571
- policy, this, ring_.size());
566
+ policy, this, ring_->ring().size());
572
567
  }
573
568
  }
574
569
 
@@ -660,7 +655,7 @@ void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
660
655
  // Note that we use our own picker regardless of connectivity state.
661
656
  p->channel_control_helper()->UpdateState(
662
657
  state, status,
663
- MakeRefCounted<Picker>(Ref(DEBUG_LOCATION, "RingHashPicker")));
658
+ MakeRefCounted<Picker>(p->Ref(DEBUG_LOCATION, "RingHashPicker"), this));
664
659
  // While the ring_hash policy is reporting TRANSIENT_FAILURE, it will
665
660
  // not be getting any pick requests from the priority policy.
666
661
  // However, because the ring_hash policy does not attempt to
@@ -707,7 +702,6 @@ void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
707
702
  absl::optional<grpc_connectivity_state> old_state,
708
703
  grpc_connectivity_state new_state) {
709
704
  RingHash* p = static_cast<RingHash*>(subchannel_list()->policy());
710
- grpc_connectivity_state last_connectivity_state = GetConnectivityState();
711
705
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
712
706
  gpr_log(
713
707
  GPR_INFO,
@@ -715,7 +709,7 @@ void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
715
709
  "(index %" PRIuPTR " of %" PRIuPTR "): prev_state=%s new_state=%s",
716
710
  p, subchannel(), subchannel_list(), Index(),
717
711
  subchannel_list()->num_subchannels(),
718
- ConnectivityStateName(last_connectivity_state),
712
+ ConnectivityStateName(logical_connectivity_state_),
719
713
  ConnectivityStateName(new_state));
720
714
  }
721
715
  GPR_ASSERT(subchannel() != nullptr);
@@ -735,34 +729,23 @@ void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
735
729
  const bool connection_attempt_complete = new_state != GRPC_CHANNEL_CONNECTING;
736
730
  // Decide what state to report for the purposes of aggregation and
737
731
  // picker behavior.
738
- // If the last recorded state was TRANSIENT_FAILURE, ignore the update
739
- // unless the new state is READY.
740
- bool update_status = true;
741
- absl::Status status = connectivity_status();
742
- if (last_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE &&
743
- new_state != GRPC_CHANNEL_READY &&
744
- new_state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
745
- new_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
746
- {
747
- MutexLock lock(&mu_);
748
- status = connectivity_status_;
749
- }
750
- update_status = false;
751
- }
752
- // Update state counters used for aggregation.
753
- subchannel_list()->UpdateStateCountersLocked(last_connectivity_state,
754
- new_state);
755
- // Update status seen by picker if needed.
756
- if (update_status) {
757
- MutexLock lock(&mu_);
758
- connectivity_status_ = connectivity_status();
732
+ // If the last recorded state was TRANSIENT_FAILURE, ignore the change
733
+ // unless the new state is READY (or TF again, in which case we need
734
+ // to update the status).
735
+ if (logical_connectivity_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE ||
736
+ new_state == GRPC_CHANNEL_READY ||
737
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
738
+ // Update state counters used for aggregation.
739
+ subchannel_list()->UpdateStateCountersLocked(logical_connectivity_state_,
740
+ new_state);
741
+ // Update logical state.
742
+ logical_connectivity_state_ = new_state;
743
+ logical_connectivity_status_ = connectivity_status();
759
744
  }
760
- // Update last seen state, also used by picker.
761
- connectivity_state_.store(new_state, std::memory_order_relaxed);
762
745
  // Update the RH policy's connectivity state, creating new picker and new
763
746
  // ring.
764
747
  subchannel_list()->UpdateRingHashConnectivityStateLocked(
765
- Index(), connection_attempt_complete, status);
748
+ Index(), connection_attempt_complete, logical_connectivity_status_);
766
749
  }
767
750
 
768
751
  //
@@ -116,7 +116,7 @@ constexpr absl::string_view kRls = "rls_experimental";
116
116
  const char kGrpc[] = "grpc";
117
117
  const char* kRlsRequestPath = "/grpc.lookup.v1.RouteLookupService/RouteLookup";
118
118
  const char* kFakeTargetFieldValue = "fake_target_field_value";
119
- const char* kRlsHeaderKey = "x-google-rls-data";
119
+ const char* kRlsHeaderKey = "X-Google-RLS-Data";
120
120
 
121
121
  const Duration kDefaultLookupServiceTimeout = Duration::Seconds(10);
122
122
  const Duration kMaxMaxAge = Duration::Minutes(5);
@@ -365,7 +365,6 @@ class RlsLb : public LoadBalancingPolicy {
365
365
  class Picker : public LoadBalancingPolicy::SubchannelPicker {
366
366
  public:
367
367
  explicit Picker(RefCountedPtr<RlsLb> lb_policy);
368
- ~Picker() override;
369
368
 
370
369
  PickResult Pick(PickArgs args) override;
371
370
 
@@ -1008,19 +1007,6 @@ RlsLb::Picker::Picker(RefCountedPtr<RlsLb> lb_policy)
1008
1007
  }
1009
1008
  }
1010
1009
 
1011
- RlsLb::Picker::~Picker() {
1012
- // It's not safe to unref the default child policy in the picker,
1013
- // since that needs to be done in the WorkSerializer.
1014
- if (default_child_policy_ != nullptr) {
1015
- auto* default_child_policy = default_child_policy_.release();
1016
- lb_policy_->work_serializer()->Run(
1017
- [default_child_policy]() {
1018
- default_child_policy->Unref(DEBUG_LOCATION, "Picker");
1019
- },
1020
- DEBUG_LOCATION);
1021
- }
1022
- }
1023
-
1024
1010
  LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
1025
1011
  // Construct key for request.
1026
1012
  RequestKey key = {BuildKeyMap(config_->key_builder_map(), args.path,
@@ -1645,7 +1631,7 @@ void RlsLb::RlsChannel::Orphan() {
1645
1631
  client_channel->RemoveConnectivityWatcher(watcher_);
1646
1632
  watcher_ = nullptr;
1647
1633
  }
1648
- grpc_channel_destroy(channel_);
1634
+ grpc_channel_destroy_internal(channel_);
1649
1635
  }
1650
1636
  Unref(DEBUG_LOCATION, "Orphan");
1651
1637
  }