grpc 1.33.0.pre1 → 1.34.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 (533) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +342 -134
  3. data/include/grpc/grpc.h +1 -2
  4. data/include/grpc/grpc_security.h +149 -172
  5. data/include/grpc/impl/codegen/grpc_types.h +9 -2
  6. data/include/grpc/impl/codegen/port_platform.h +22 -55
  7. data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
  8. data/src/core/ext/filters/client_channel/config_selector.h +2 -3
  9. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
  10. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  12. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  13. data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  21. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
  28. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  29. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  32. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  33. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  34. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
  36. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
  37. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  38. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
  39. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
  41. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  42. data/src/core/ext/filters/client_channel/server_address.h +0 -4
  43. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  44. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  45. data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
  46. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  47. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  48. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  49. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  50. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  51. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  53. data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
  54. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  55. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
  56. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
  58. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
  59. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  61. data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
  62. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  63. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
  64. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  65. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  66. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  67. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  68. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  69. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  70. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  71. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  72. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  73. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  74. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  75. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  76. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  77. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  78. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  79. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  80. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  81. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  82. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  83. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  84. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  85. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  86. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  87. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  92. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  94. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  100. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  101. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  102. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  103. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  104. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  105. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  106. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  107. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  108. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  109. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  110. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  111. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  112. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  113. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  114. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  115. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  116. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  117. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  118. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  119. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  120. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  121. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  122. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  123. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  124. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  125. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  126. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  127. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  128. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  129. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  130. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  131. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  132. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  133. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  134. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  135. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  136. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  137. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  138. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  139. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  140. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  141. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  142. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  143. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  144. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  145. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  146. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  147. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  148. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  149. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  150. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  151. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  152. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  153. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  154. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  155. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  156. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  157. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  158. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  159. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  160. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  161. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  162. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  163. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  164. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  165. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  166. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  167. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  168. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  169. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  170. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  171. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  172. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  173. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  174. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  175. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  176. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  177. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  178. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  179. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  180. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  181. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  182. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  183. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  184. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  185. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  186. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  187. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  188. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  189. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  190. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  191. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  193. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  194. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  195. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  196. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  197. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  198. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  199. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  200. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  201. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  202. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  203. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  204. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  205. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  206. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  207. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  208. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  209. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  210. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  211. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  212. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  213. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  214. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  215. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  216. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  217. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  218. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  219. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  220. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  221. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  222. data/src/core/ext/xds/certificate_provider_store.h +65 -8
  223. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  224. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  225. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
  226. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
  227. data/src/core/ext/xds/xds_api.cc +241 -718
  228. data/src/core/ext/xds/xds_api.h +50 -9
  229. data/src/core/ext/xds/xds_bootstrap.cc +172 -25
  230. data/src/core/ext/xds/xds_bootstrap.h +23 -7
  231. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  232. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  233. data/src/core/ext/xds/xds_client.cc +161 -128
  234. data/src/core/ext/xds/xds_client.h +12 -11
  235. data/src/core/ext/xds/xds_client_stats.cc +41 -4
  236. data/src/core/ext/xds/xds_client_stats.h +2 -2
  237. data/src/core/lib/channel/channel_args.cc +2 -1
  238. data/src/core/lib/channel/channel_trace.cc +4 -2
  239. data/src/core/lib/channel/channelz.h +2 -2
  240. data/src/core/lib/channel/handshaker.h +2 -2
  241. data/src/core/lib/compression/compression.cc +8 -4
  242. data/src/core/lib/compression/compression_internal.cc +10 -5
  243. data/src/core/lib/compression/compression_internal.h +2 -1
  244. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  245. data/src/core/lib/debug/stats_data.cc +1 -0
  246. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  247. data/src/core/lib/gpr/log_linux.cc +17 -3
  248. data/src/core/lib/gpr/log_posix.cc +13 -1
  249. data/src/core/lib/gpr/log_windows.cc +16 -4
  250. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  251. data/src/core/lib/gpr/string.cc +1 -1
  252. data/src/core/lib/gpr/time_precise.cc +3 -2
  253. data/src/core/lib/gpr/tls.h +4 -0
  254. data/src/core/lib/gpr/tls_msvc.h +2 -0
  255. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  256. data/src/core/lib/gpr/useful.h +5 -4
  257. data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
  258. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  259. data/src/core/lib/gprpp/examine_stack.h +46 -0
  260. data/src/core/lib/gprpp/fork.cc +2 -2
  261. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  262. data/src/core/lib/gprpp/orphanable.h +4 -8
  263. data/src/core/lib/gprpp/ref_counted.h +40 -46
  264. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
  265. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  266. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  267. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  268. data/src/core/lib/gprpp/thd.h +2 -2
  269. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  270. data/src/core/lib/http/parser.cc +46 -25
  271. data/src/core/lib/iomgr/error.cc +2 -1
  272. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  273. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  274. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  275. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  276. data/src/core/lib/iomgr/parse_address.cc +84 -6
  277. data/src/core/lib/iomgr/parse_address.h +20 -0
  278. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  279. data/src/core/lib/iomgr/python_util.h +3 -3
  280. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  281. data/src/core/lib/iomgr/tcp_posix.cc +3 -2
  282. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  283. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  284. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  285. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  286. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  287. data/src/core/lib/json/json.h +2 -2
  288. data/src/core/lib/json/json_reader.cc +8 -4
  289. data/src/core/lib/json/json_util.h +167 -0
  290. data/src/core/lib/json/json_writer.cc +2 -1
  291. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  292. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  293. data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
  294. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  295. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  296. data/src/core/lib/security/context/security_context.h +3 -1
  297. data/src/core/lib/security/credentials/credentials.cc +1 -1
  298. data/src/core/lib/security/credentials/credentials.h +3 -3
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  307. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  308. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  309. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  310. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  312. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
  313. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
  314. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  315. data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
  316. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  317. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  318. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  319. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  320. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  321. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  322. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  323. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  324. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  325. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  326. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  327. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  328. data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
  329. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  330. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  331. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  332. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  333. data/src/core/lib/security/util/json_util.h +1 -0
  334. data/src/core/lib/slice/slice.cc +7 -4
  335. data/src/core/lib/slice/slice_buffer.cc +2 -1
  336. data/src/core/lib/slice/slice_intern.cc +2 -2
  337. data/src/core/lib/surface/call.cc +9 -8
  338. data/src/core/lib/surface/completion_queue.cc +7 -6
  339. data/src/core/lib/surface/server.cc +4 -2
  340. data/src/core/lib/surface/server.h +2 -2
  341. data/src/core/lib/surface/validate_metadata.h +3 -0
  342. data/src/core/lib/surface/version.cc +2 -2
  343. data/src/core/lib/transport/authority_override.h +2 -0
  344. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  345. data/src/core/lib/transport/byte_stream.h +3 -3
  346. data/src/core/lib/transport/connectivity_state.h +3 -3
  347. data/src/core/lib/transport/metadata.h +2 -2
  348. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  349. data/src/core/lib/transport/transport.cc +5 -3
  350. data/src/core/lib/transport/transport.h +1 -1
  351. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  352. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
  353. data/src/core/tsi/fake_transport_security.cc +1 -0
  354. data/src/core/tsi/local_transport_security.cc +5 -1
  355. data/src/core/tsi/local_transport_security.h +6 -7
  356. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  357. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  358. data/src/core/tsi/ssl_transport_security.cc +14 -7
  359. data/src/core/tsi/ssl_transport_security.h +3 -0
  360. data/src/core/tsi/transport_security.cc +4 -2
  361. data/src/ruby/ext/grpc/extconf.rb +1 -1
  362. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
  363. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
  364. data/src/ruby/lib/grpc/version.rb +1 -1
  365. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  366. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  367. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  368. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  369. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  370. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  371. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  372. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  373. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  374. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  375. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  377. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  378. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  379. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  380. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  381. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  382. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  383. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  384. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  385. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  386. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  387. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  388. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  389. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  390. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  391. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  392. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  393. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  394. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  395. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  396. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  397. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  398. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  399. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  400. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  401. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  402. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  403. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  404. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  405. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  406. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  409. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  410. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  411. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  412. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  413. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  417. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  419. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  420. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  421. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  423. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  424. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  425. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  426. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  427. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  428. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  429. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  430. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  431. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  432. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  433. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  434. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  435. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  436. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  437. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  438. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  439. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  440. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  441. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  442. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  453. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  455. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  456. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  457. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  458. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  459. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  460. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  461. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  462. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
  463. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  464. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  465. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  466. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  467. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  468. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  469. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  470. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  471. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  472. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  473. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  485. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  486. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  487. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  488. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  489. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  490. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  491. data/third_party/boringssl-with-bazel/err_data.c +340 -336
  492. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
  495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  497. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  498. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  499. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  509. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  511. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
  512. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  513. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  514. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
  515. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  516. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  517. data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
  524. data/third_party/upb/upb/def.c +2169 -0
  525. data/third_party/upb/upb/def.h +330 -0
  526. data/third_party/upb/upb/def.hpp +525 -0
  527. data/third_party/upb/upb/reflection.c +391 -0
  528. data/third_party/upb/upb/reflection.h +168 -0
  529. data/third_party/upb/upb/text_encode.c +398 -0
  530. data/third_party/upb/upb/text_encode.h +35 -0
  531. metadata +227 -37
  532. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
  533. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -53,6 +53,7 @@
53
53
 
54
54
  #include "absl/base/config.h"
55
55
  #include "absl/hash/hash.h"
56
+ #include "absl/strings/cord.h"
56
57
  #include "absl/strings/string_view.h"
57
58
 
58
59
  namespace absl {
@@ -72,6 +73,9 @@ struct StringHash {
72
73
  size_t operator()(absl::string_view v) const {
73
74
  return absl::Hash<absl::string_view>{}(v);
74
75
  }
76
+ size_t operator()(const absl::Cord& v) const {
77
+ return absl::Hash<absl::Cord>{}(v);
78
+ }
75
79
  };
76
80
 
77
81
  // Supports heterogeneous lookup for string-like elements.
@@ -82,6 +86,15 @@ struct StringHashEq {
82
86
  bool operator()(absl::string_view lhs, absl::string_view rhs) const {
83
87
  return lhs == rhs;
84
88
  }
89
+ bool operator()(const absl::Cord& lhs, const absl::Cord& rhs) const {
90
+ return lhs == rhs;
91
+ }
92
+ bool operator()(const absl::Cord& lhs, absl::string_view rhs) const {
93
+ return lhs == rhs;
94
+ }
95
+ bool operator()(absl::string_view lhs, const absl::Cord& rhs) const {
96
+ return lhs == rhs;
97
+ }
85
98
  };
86
99
  };
87
100
 
@@ -89,6 +102,8 @@ template <>
89
102
  struct HashEq<std::string> : StringHashEq {};
90
103
  template <>
91
104
  struct HashEq<absl::string_view> : StringHashEq {};
105
+ template <>
106
+ struct HashEq<absl::Cord> : StringHashEq {};
92
107
 
93
108
  // Supports heterogeneous lookup for pointers and smart pointers.
94
109
  template <class T>
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include <cstddef>
19
19
  #include <memory>
20
+ #include <new>
20
21
  #include <type_traits>
21
22
  #include <utility>
22
23
 
@@ -29,15 +30,34 @@ namespace container_internal {
29
30
  // Defines how slots are initialized/destroyed/moved.
30
31
  template <class Policy, class = void>
31
32
  struct hash_policy_traits {
33
+ // The type of the keys stored in the hashtable.
34
+ using key_type = typename Policy::key_type;
35
+
32
36
  private:
33
37
  struct ReturnKey {
34
- // We return `Key` here.
38
+ // When C++17 is available, we can use std::launder to provide mutable
39
+ // access to the key for use in node handle.
40
+ #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
41
+ template <class Key,
42
+ absl::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0>
43
+ static key_type& Impl(Key&& k, int) {
44
+ return *std::launder(
45
+ const_cast<key_type*>(std::addressof(std::forward<Key>(k))));
46
+ }
47
+ #endif
48
+
49
+ template <class Key>
50
+ static Key Impl(Key&& k, char) {
51
+ return std::forward<Key>(k);
52
+ }
53
+
35
54
  // When Key=T&, we forward the lvalue reference.
36
55
  // When Key=T, we return by value to avoid a dangling reference.
37
56
  // eg, for string_hash_map.
38
57
  template <class Key, class... Args>
39
- Key operator()(Key&& k, const Args&...) const {
40
- return std::forward<Key>(k);
58
+ auto operator()(Key&& k, const Args&...) const
59
+ -> decltype(Impl(std::forward<Key>(k), 0)) {
60
+ return Impl(std::forward<Key>(k), 0);
41
61
  }
42
62
  };
43
63
 
@@ -52,9 +72,6 @@ struct hash_policy_traits {
52
72
  // The actual object stored in the hash table.
53
73
  using slot_type = typename Policy::slot_type;
54
74
 
55
- // The type of the keys stored in the hashtable.
56
- using key_type = typename Policy::key_type;
57
-
58
75
  // The argument type for insertions into the hashtable. This is different
59
76
  // from value_type for increased performance. See initializer_list constructor
60
77
  // and insert() member functions for more details.
@@ -156,7 +173,7 @@ struct hash_policy_traits {
156
173
  // Returns the "key" portion of the slot.
157
174
  // Used for node handle manipulation.
158
175
  template <class P = Policy>
159
- static auto key(slot_type* slot)
176
+ static auto mutable_key(slot_type* slot)
160
177
  -> decltype(P::apply(ReturnKey(), element(slot))) {
161
178
  return P::apply(ReturnKey(), element(slot));
162
179
  }
@@ -67,6 +67,7 @@ void HashtablezInfo::PrepareForSampling() {
67
67
  capacity.store(0, std::memory_order_relaxed);
68
68
  size.store(0, std::memory_order_relaxed);
69
69
  num_erases.store(0, std::memory_order_relaxed);
70
+ num_rehashes.store(0, std::memory_order_relaxed);
70
71
  max_probe_length.store(0, std::memory_order_relaxed);
71
72
  total_probe_length.store(0, std::memory_order_relaxed);
72
73
  hashes_bitwise_or.store(0, std::memory_order_relaxed);
@@ -226,7 +227,7 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
226
227
  // SwissTables probe in groups of 16, so scale this to count items probes and
227
228
  // not offset from desired.
228
229
  size_t probe_length = distance_from_desired;
229
- #if SWISSTABLE_HAVE_SSE2
230
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
230
231
  probe_length /= 16;
231
232
  #else
232
233
  probe_length /= 8;
@@ -73,6 +73,7 @@ struct HashtablezInfo {
73
73
  std::atomic<size_t> capacity;
74
74
  std::atomic<size_t> size;
75
75
  std::atomic<size_t> num_erases;
76
+ std::atomic<size_t> num_rehashes;
76
77
  std::atomic<size_t> max_probe_length;
77
78
  std::atomic<size_t> total_probe_length;
78
79
  std::atomic<size_t> hashes_bitwise_or;
@@ -98,13 +99,18 @@ struct HashtablezInfo {
98
99
  };
99
100
 
100
101
  inline void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length) {
101
- #if SWISSTABLE_HAVE_SSE2
102
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
102
103
  total_probe_length /= 16;
103
104
  #else
104
105
  total_probe_length /= 8;
105
106
  #endif
106
107
  info->total_probe_length.store(total_probe_length, std::memory_order_relaxed);
107
108
  info->num_erases.store(0, std::memory_order_relaxed);
109
+ // There is only one concurrent writer, so `load` then `store` is sufficient
110
+ // instead of using `fetch_add`.
111
+ info->num_rehashes.store(
112
+ 1 + info->num_rehashes.load(std::memory_order_relaxed),
113
+ std::memory_order_relaxed);
108
114
  }
109
115
 
110
116
  inline void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
@@ -113,7 +119,8 @@ inline void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
113
119
  info->capacity.store(capacity, std::memory_order_relaxed);
114
120
  if (size == 0) {
115
121
  // This is a clear, reset the total/num_erases too.
116
- RecordRehashSlow(info, 0);
122
+ info->total_probe_length.store(0, std::memory_order_relaxed);
123
+ info->num_erases.store(0, std::memory_order_relaxed);
117
124
  }
118
125
  }
119
126
 
@@ -122,12 +129,21 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
122
129
 
123
130
  inline void RecordEraseSlow(HashtablezInfo* info) {
124
131
  info->size.fetch_sub(1, std::memory_order_relaxed);
125
- info->num_erases.fetch_add(1, std::memory_order_relaxed);
132
+ // There is only one concurrent writer, so `load` then `store` is sufficient
133
+ // instead of using `fetch_add`.
134
+ info->num_erases.store(
135
+ 1 + info->num_erases.load(std::memory_order_relaxed),
136
+ std::memory_order_relaxed);
126
137
  }
127
138
 
128
139
  HashtablezInfo* SampleSlow(int64_t* next_sample);
129
140
  void UnsampleSlow(HashtablezInfo* info);
130
141
 
142
+ #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
143
+ #error ABSL_INTERNAL_HASHTABLEZ_SAMPLE cannot be directly set
144
+ #endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
145
+
146
+ #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
131
147
  class HashtablezInfoHandle {
132
148
  public:
133
149
  explicit HashtablezInfoHandle() : info_(nullptr) {}
@@ -179,19 +195,27 @@ class HashtablezInfoHandle {
179
195
  friend class HashtablezInfoHandlePeer;
180
196
  HashtablezInfo* info_;
181
197
  };
198
+ #else
199
+ // Ensure that when Hashtablez is turned off at compile time, HashtablezInfo can
200
+ // be removed by the linker, in order to reduce the binary size.
201
+ class HashtablezInfoHandle {
202
+ public:
203
+ explicit HashtablezInfoHandle() = default;
204
+ explicit HashtablezInfoHandle(std::nullptr_t) {}
182
205
 
183
- #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
184
- #error ABSL_INTERNAL_HASHTABLEZ_SAMPLE cannot be directly set
185
- #endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
206
+ inline void RecordStorageChanged(size_t /*size*/, size_t /*capacity*/) {}
207
+ inline void RecordRehash(size_t /*total_probe_length*/) {}
208
+ inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {}
209
+ inline void RecordErase() {}
186
210
 
187
- #if (ABSL_PER_THREAD_TLS == 1) && !defined(ABSL_BUILD_DLL) && \
188
- !defined(ABSL_CONSUME_DLL)
189
- #define ABSL_INTERNAL_HASHTABLEZ_SAMPLE
190
- #endif
211
+ friend inline void swap(HashtablezInfoHandle& /*lhs*/,
212
+ HashtablezInfoHandle& /*rhs*/) {}
213
+ };
214
+ #endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
191
215
 
192
216
  #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
193
217
  extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample;
194
- #endif // ABSL_PER_THREAD_TLS
218
+ #endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
195
219
 
196
220
  // Returns an RAII sampling handle that manages registration and unregistation
197
221
  // with the global sampler.
@@ -16,33 +16,34 @@
16
16
  #ifndef ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_
17
17
  #define ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_
18
18
 
19
- #ifndef SWISSTABLE_HAVE_SSE2
19
+ #ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
20
20
  #if defined(__SSE2__) || \
21
21
  (defined(_MSC_VER) && \
22
22
  (defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2)))
23
- #define SWISSTABLE_HAVE_SSE2 1
23
+ #define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 1
24
24
  #else
25
- #define SWISSTABLE_HAVE_SSE2 0
25
+ #define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 0
26
26
  #endif
27
27
  #endif
28
28
 
29
- #ifndef SWISSTABLE_HAVE_SSSE3
29
+ #ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
30
30
  #ifdef __SSSE3__
31
- #define SWISSTABLE_HAVE_SSSE3 1
31
+ #define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 1
32
32
  #else
33
- #define SWISSTABLE_HAVE_SSSE3 0
33
+ #define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 0
34
34
  #endif
35
35
  #endif
36
36
 
37
- #if SWISSTABLE_HAVE_SSSE3 && !SWISSTABLE_HAVE_SSE2
37
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 && \
38
+ !ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
38
39
  #error "Bad configuration!"
39
40
  #endif
40
41
 
41
- #if SWISSTABLE_HAVE_SSE2
42
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
42
43
  #include <emmintrin.h>
43
44
  #endif
44
45
 
45
- #if SWISSTABLE_HAVE_SSSE3
46
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
46
47
  #include <tmmintrin.h>
47
48
  #endif
48
49
 
@@ -163,6 +163,7 @@
163
163
  #include <assert.h>
164
164
  #include <stddef.h>
165
165
  #include <stdint.h>
166
+
166
167
  #include <ostream>
167
168
  #include <string>
168
169
  #include <tuple>
@@ -170,15 +171,16 @@
170
171
  #include <typeinfo>
171
172
  #include <utility>
172
173
 
173
- #ifdef ADDRESS_SANITIZER
174
- #include <sanitizer/asan_interface.h>
175
- #endif
176
-
174
+ #include "absl/base/config.h"
177
175
  #include "absl/meta/type_traits.h"
178
176
  #include "absl/strings/str_cat.h"
179
177
  #include "absl/types/span.h"
180
178
  #include "absl/utility/utility.h"
181
179
 
180
+ #ifdef ABSL_HAVE_ADDRESS_SANITIZER
181
+ #include <sanitizer/asan_interface.h>
182
+ #endif
183
+
182
184
  #if defined(__GXX_RTTI)
183
185
  #define ABSL_INTERNAL_HAS_CXA_DEMANGLE
184
186
  #endif
@@ -614,7 +616,7 @@ class LayoutImpl<std::tuple<Elements...>, absl::index_sequence<SizeSeq...>,
614
616
  void PoisonPadding(const Char* p) const {
615
617
  static_assert(N < NumOffsets, "Index out of bounds");
616
618
  (void)p;
617
- #ifdef ADDRESS_SANITIZER
619
+ #ifdef ABSL_HAVE_ADDRESS_SANITIZER
618
620
  PoisonPadding<Char, N - 1>(p);
619
621
  // The `if` is an optimization. It doesn't affect the observable behaviour.
620
622
  if (ElementAlignment<N - 1>::value % ElementAlignment<N>::value) {
@@ -104,6 +104,7 @@
104
104
 
105
105
  #include "absl/base/internal/bits.h"
106
106
  #include "absl/base/internal/endian.h"
107
+ #include "absl/base/optimization.h"
107
108
  #include "absl/base/port.h"
108
109
  #include "absl/container/internal/common.h"
109
110
  #include "absl/container/internal/compressed_tuple.h"
@@ -121,6 +122,16 @@ namespace absl {
121
122
  ABSL_NAMESPACE_BEGIN
122
123
  namespace container_internal {
123
124
 
125
+ template <typename AllocType>
126
+ void SwapAlloc(AllocType& lhs, AllocType& rhs,
127
+ std::true_type /* propagate_on_container_swap */) {
128
+ using std::swap;
129
+ swap(lhs, rhs);
130
+ }
131
+ template <typename AllocType>
132
+ void SwapAlloc(AllocType& /*lhs*/, AllocType& /*rhs*/,
133
+ std::false_type /* propagate_on_container_swap */) {}
134
+
124
135
  template <size_t Width>
125
136
  class probe_seq {
126
137
  public:
@@ -168,10 +179,14 @@ struct IsDecomposable<
168
179
 
169
180
  // TODO(alkis): Switch to std::is_nothrow_swappable when gcc/clang supports it.
170
181
  template <class T>
171
- constexpr bool IsNoThrowSwappable() {
182
+ constexpr bool IsNoThrowSwappable(std::true_type = {} /* is_swappable */) {
172
183
  using std::swap;
173
184
  return noexcept(swap(std::declval<T&>(), std::declval<T&>()));
174
185
  }
186
+ template <class T>
187
+ constexpr bool IsNoThrowSwappable(std::false_type /* is_swappable */) {
188
+ return false;
189
+ }
175
190
 
176
191
  template <typename T>
177
192
  int TrailingZeros(T x) {
@@ -312,7 +327,7 @@ inline bool IsFull(ctrl_t c) { return c >= 0; }
312
327
  inline bool IsDeleted(ctrl_t c) { return c == kDeleted; }
313
328
  inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; }
314
329
 
315
- #if SWISSTABLE_HAVE_SSE2
330
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
316
331
 
317
332
  // https://github.com/abseil/abseil-cpp/issues/209
318
333
  // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87853
@@ -346,7 +361,7 @@ struct GroupSse2Impl {
346
361
 
347
362
  // Returns a bitmask representing the positions of empty slots.
348
363
  BitMask<uint32_t, kWidth> MatchEmpty() const {
349
- #if SWISSTABLE_HAVE_SSSE3
364
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
350
365
  // This only works because kEmpty is -128.
351
366
  return BitMask<uint32_t, kWidth>(
352
367
  _mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl)));
@@ -372,7 +387,7 @@ struct GroupSse2Impl {
372
387
  void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
373
388
  auto msbs = _mm_set1_epi8(static_cast<char>(-128));
374
389
  auto x126 = _mm_set1_epi8(126);
375
- #if SWISSTABLE_HAVE_SSSE3
390
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
376
391
  auto res = _mm_or_si128(_mm_shuffle_epi8(x126, ctrl), msbs);
377
392
  #else
378
393
  auto zero = _mm_setzero_si128();
@@ -384,7 +399,7 @@ struct GroupSse2Impl {
384
399
 
385
400
  __m128i ctrl;
386
401
  };
387
- #endif // SWISSTABLE_HAVE_SSE2
402
+ #endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
388
403
 
389
404
  struct GroupPortableImpl {
390
405
  static constexpr size_t kWidth = 8;
@@ -438,7 +453,7 @@ struct GroupPortableImpl {
438
453
  uint64_t ctrl;
439
454
  };
440
455
 
441
- #if SWISSTABLE_HAVE_SSE2
456
+ #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
442
457
  using Group = GroupSse2Impl;
443
458
  #else
444
459
  using Group = GroupPortableImpl;
@@ -496,6 +511,18 @@ inline size_t GrowthToLowerboundCapacity(size_t growth) {
496
511
  return growth + static_cast<size_t>((static_cast<int64_t>(growth) - 1) / 7);
497
512
  }
498
513
 
514
+ inline void AssertIsFull(ctrl_t* ctrl) {
515
+ ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) &&
516
+ "Invalid operation on iterator. The element might have "
517
+ "been erased, or the table might have rehashed.");
518
+ }
519
+
520
+ inline void AssertIsValid(ctrl_t* ctrl) {
521
+ ABSL_HARDENING_ASSERT((ctrl == nullptr || IsFull(*ctrl)) &&
522
+ "Invalid operation on iterator. The element might have "
523
+ "been erased, or the table might have rehashed.");
524
+ }
525
+
499
526
  // Policy: a policy defines how to perform different operations on
500
527
  // the slots of the hashtable (see hash_policy_traits.h for the full interface
501
528
  // of policy).
@@ -510,7 +537,8 @@ inline size_t GrowthToLowerboundCapacity(size_t growth) {
510
537
  // if they are equal, false if they are not. If two keys compare equal, then
511
538
  // their hash values as defined by Hash MUST be equal.
512
539
  //
513
- // Allocator: an Allocator [https://devdocs.io/cpp/concept/allocator] with which
540
+ // Allocator: an Allocator
541
+ // [https://en.cppreference.com/w/cpp/named_req/Allocator] with which
514
542
  // the storage of the hashtable will be allocated and the elements will be
515
543
  // constructed and destroyed.
516
544
  template <class Policy, class Hash, class Eq, class Alloc>
@@ -616,7 +644,7 @@ class raw_hash_set {
616
644
 
617
645
  // PRECONDITION: not an end() iterator.
618
646
  reference operator*() const {
619
- assert_is_full();
647
+ AssertIsFull(ctrl_);
620
648
  return PolicyTraits::element(slot_);
621
649
  }
622
650
 
@@ -625,7 +653,7 @@ class raw_hash_set {
625
653
 
626
654
  // PRECONDITION: not an end() iterator.
627
655
  iterator& operator++() {
628
- assert_is_full();
656
+ AssertIsFull(ctrl_);
629
657
  ++ctrl_;
630
658
  ++slot_;
631
659
  skip_empty_or_deleted();
@@ -639,8 +667,8 @@ class raw_hash_set {
639
667
  }
640
668
 
641
669
  friend bool operator==(const iterator& a, const iterator& b) {
642
- a.assert_is_valid();
643
- b.assert_is_valid();
670
+ AssertIsValid(a.ctrl_);
671
+ AssertIsValid(b.ctrl_);
644
672
  return a.ctrl_ == b.ctrl_;
645
673
  }
646
674
  friend bool operator!=(const iterator& a, const iterator& b) {
@@ -648,24 +676,19 @@ class raw_hash_set {
648
676
  }
649
677
 
650
678
  private:
651
- iterator(ctrl_t* ctrl) : ctrl_(ctrl) {} // for end()
652
- iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {}
653
-
654
- void assert_is_full() const { assert(IsFull(*ctrl_)); }
655
- void assert_is_valid() const {
656
- assert(!ctrl_ || IsFull(*ctrl_) || *ctrl_ == kSentinel);
679
+ iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {
680
+ // This assumption helps the compiler know that any non-end iterator is
681
+ // not equal to any end iterator.
682
+ ABSL_INTERNAL_ASSUME(ctrl != nullptr);
657
683
  }
658
684
 
659
685
  void skip_empty_or_deleted() {
660
686
  while (IsEmptyOrDeleted(*ctrl_)) {
661
- // ctrl is not necessarily aligned to Group::kWidth. It is also likely
662
- // to read past the space for ctrl bytes and into slots. This is ok
663
- // because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
664
- // is no way to read outside the combined slot array.
665
687
  uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
666
688
  ctrl_ += shift;
667
689
  slot_ += shift;
668
690
  }
691
+ if (ABSL_PREDICT_FALSE(*ctrl_ == kSentinel)) ctrl_ = nullptr;
669
692
  }
670
693
 
671
694
  ctrl_t* ctrl_ = nullptr;
@@ -907,12 +930,12 @@ class raw_hash_set {
907
930
  it.skip_empty_or_deleted();
908
931
  return it;
909
932
  }
910
- iterator end() { return {ctrl_ + capacity_}; }
933
+ iterator end() { return {}; }
911
934
 
912
935
  const_iterator begin() const {
913
936
  return const_cast<raw_hash_set*>(this)->begin();
914
937
  }
915
- const_iterator end() const { return const_cast<raw_hash_set*>(this)->end(); }
938
+ const_iterator end() const { return {}; }
916
939
  const_iterator cbegin() const { return begin(); }
917
940
  const_iterator cend() const { return end(); }
918
941
 
@@ -1171,7 +1194,7 @@ class raw_hash_set {
1171
1194
  // This overload is necessary because otherwise erase<K>(const K&) would be
1172
1195
  // a better match if non-const iterator is passed as an argument.
1173
1196
  void erase(iterator it) {
1174
- it.assert_is_full();
1197
+ AssertIsFull(it.ctrl_);
1175
1198
  PolicyTraits::destroy(&alloc_ref(), it.slot_);
1176
1199
  erase_meta_only(it);
1177
1200
  }
@@ -1205,7 +1228,7 @@ class raw_hash_set {
1205
1228
  }
1206
1229
 
1207
1230
  node_type extract(const_iterator position) {
1208
- position.inner_.assert_is_full();
1231
+ AssertIsFull(position.inner_.ctrl_);
1209
1232
  auto node =
1210
1233
  CommonAccess::Transfer<node_type>(alloc_ref(), position.inner_.slot_);
1211
1234
  erase_meta_only(position);
@@ -1222,8 +1245,8 @@ class raw_hash_set {
1222
1245
 
1223
1246
  void swap(raw_hash_set& that) noexcept(
1224
1247
  IsNoThrowSwappable<hasher>() && IsNoThrowSwappable<key_equal>() &&
1225
- (!AllocTraits::propagate_on_container_swap::value ||
1226
- IsNoThrowSwappable<allocator_type>())) {
1248
+ IsNoThrowSwappable<allocator_type>(
1249
+ typename AllocTraits::propagate_on_container_swap{})) {
1227
1250
  using std::swap;
1228
1251
  swap(ctrl_, that.ctrl_);
1229
1252
  swap(slots_, that.slots_);
@@ -1233,12 +1256,8 @@ class raw_hash_set {
1233
1256
  swap(hash_ref(), that.hash_ref());
1234
1257
  swap(eq_ref(), that.eq_ref());
1235
1258
  swap(infoz_, that.infoz_);
1236
- if (AllocTraits::propagate_on_container_swap::value) {
1237
- swap(alloc_ref(), that.alloc_ref());
1238
- } else {
1239
- // If the allocators do not compare equal it is officially undefined
1240
- // behavior. We choose to do nothing.
1241
- }
1259
+ SwapAlloc(alloc_ref(), that.alloc_ref(),
1260
+ typename AllocTraits::propagate_on_container_swap{});
1242
1261
  }
1243
1262
 
1244
1263
  void rehash(size_t n) {
@@ -1308,6 +1327,7 @@ class raw_hash_set {
1308
1327
  }
1309
1328
  if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return end();
1310
1329
  seq.next();
1330
+ assert(seq.index() < capacity_ && "full table!");
1311
1331
  }
1312
1332
  }
1313
1333
  template <class K = key_type>
@@ -1659,8 +1679,8 @@ class raw_hash_set {
1659
1679
  #endif
1660
1680
  return {seq.offset(mask.LowestBitSet()), seq.index()};
1661
1681
  }
1662
- assert(seq.index() < capacity_ && "full table!");
1663
1682
  seq.next();
1683
+ assert(seq.index() < capacity_ && "full table!");
1664
1684
  }
1665
1685
  }
1666
1686
 
@@ -1691,6 +1711,7 @@ class raw_hash_set {
1691
1711
  }
1692
1712
  if (ABSL_PREDICT_TRUE(g.MatchEmpty())) break;
1693
1713
  seq.next();
1714
+ assert(seq.index() < capacity_ && "full table!");
1694
1715
  }
1695
1716
  return {prepare_insert(hash), true};
1696
1717
  }