grpc 1.42.0 → 1.49.1

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 (1877) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +622 -358
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +114 -43
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  6. data/include/grpc/event_engine/memory_allocator.h +27 -26
  7. data/include/grpc/event_engine/memory_request.h +57 -0
  8. data/include/grpc/event_engine/port.h +1 -1
  9. data/include/grpc/event_engine/slice.h +286 -0
  10. data/include/grpc/event_engine/slice_buffer.h +118 -0
  11. data/include/grpc/grpc.h +43 -17
  12. data/include/grpc/grpc_posix.h +20 -19
  13. data/include/grpc/grpc_security.h +323 -195
  14. data/include/grpc/grpc_security_constants.h +1 -14
  15. data/include/grpc/impl/codegen/compression_types.h +2 -3
  16. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  17. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  18. data/include/grpc/impl/codegen/grpc_types.h +24 -25
  19. data/include/grpc/impl/codegen/port_platform.h +107 -44
  20. data/include/grpc/impl/codegen/slice.h +5 -2
  21. data/include/grpc/slice.h +0 -11
  22. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  23. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  24. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +141 -0
  25. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  26. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +7 -5
  27. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  28. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  29. data/src/core/ext/filters/client_channel/backup_poller.cc +20 -14
  30. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  31. data/src/core/ext/filters/client_channel/channel_connectivity.cc +48 -26
  32. data/src/core/ext/filters/client_channel/client_channel.cc +574 -496
  33. data/src/core/ext/filters/client_channel/client_channel.h +100 -54
  34. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  35. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  36. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  37. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  38. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -25
  39. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  40. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  41. data/src/core/ext/filters/client_channel/connector.h +12 -7
  42. data/src/core/ext/filters/client_channel/dynamic_filters.cc +24 -12
  43. data/src/core/ext/filters/client_channel/dynamic_filters.h +14 -4
  44. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  45. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  46. data/src/core/ext/filters/client_channel/health/health_check_client.cc +140 -583
  47. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  48. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -126
  49. data/src/core/ext/filters/client_channel/http_proxy.h +23 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
  51. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  52. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -11
  54. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +10 -5
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +15 -12
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +285 -225
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +16 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  65. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1142 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +78 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +206 -190
  70. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +420 -292
  71. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +419 -272
  72. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +11 -5
  73. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +302 -236
  74. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +269 -241
  75. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +142 -124
  76. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +210 -164
  77. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +231 -205
  78. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
  79. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +252 -167
  80. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +103 -86
  81. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +534 -548
  82. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  83. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  84. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -15
  85. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +20 -16
  86. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +12 -6
  87. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +38 -28
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -325
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -23
  91. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -56
  92. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +332 -329
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  95. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  96. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  97. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +126 -255
  98. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +39 -49
  99. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  100. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +167 -85
  101. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +212 -0
  102. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +112 -0
  103. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +58 -61
  104. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +598 -472
  105. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  106. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +52 -54
  107. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -17
  108. data/src/core/ext/filters/client_channel/retry_filter.cc +322 -208
  109. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  110. data/src/core/ext/filters/client_channel/retry_service_config.cc +52 -44
  111. data/src/core/ext/filters/client_channel/retry_service_config.h +31 -19
  112. data/src/core/ext/filters/client_channel/retry_throttle.cc +10 -31
  113. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
  114. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  115. data/src/core/ext/filters/client_channel/subchannel.cc +250 -298
  116. data/src/core/ext/filters/client_channel/subchannel.h +91 -47
  117. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  118. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  120. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +472 -0
  121. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +35 -25
  123. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +171 -402
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +31 -3
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +30 -24
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +29 -10
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +107 -551
  129. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  130. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  131. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  132. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  133. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +101 -320
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  135. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +59 -133
  136. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  138. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  139. data/src/core/ext/filters/message_size/message_size_filter.cc +78 -76
  140. data/src/core/ext/filters/message_size/message_size_filter.h +25 -8
  141. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  142. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  143. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +621 -0
  144. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +85 -0
  145. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  146. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  147. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +161 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  149. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +256 -98
  150. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  151. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +346 -166
  152. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  153. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  154. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  155. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  156. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +646 -888
  157. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  158. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  159. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  160. data/src/core/ext/transport/chttp2/transport/flow_control.cc +215 -266
  161. data/src/core/ext/transport/chttp2/transport/flow_control.h +183 -291
  162. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  163. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -212
  164. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  165. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  167. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +9 -4
  168. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  169. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -2
  170. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  171. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -42
  172. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  173. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  174. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  176. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +389 -249
  177. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  178. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -1
  179. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  180. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +106 -170
  181. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  182. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -37
  183. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -46
  184. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  185. data/src/core/ext/transport/chttp2/transport/internal.h +48 -155
  186. data/src/core/ext/transport/chttp2/transport/parsing.cc +87 -51
  187. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  188. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  189. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  190. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  191. data/src/core/ext/transport/chttp2/transport/writing.cc +135 -157
  192. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  193. data/src/core/ext/transport/inproc/inproc_transport.cc +161 -227
  194. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  195. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  196. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  197. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  198. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  199. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  200. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  201. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  202. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  207. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  208. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  217. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  218. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  219. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  220. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  221. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  222. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  223. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  224. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  225. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  226. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  227. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  228. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  229. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  230. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  231. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  233. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  234. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  235. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  236. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  237. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  238. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  239. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  240. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  241. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  267. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  268. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  269. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  270. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  271. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  272. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  273. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  274. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  275. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  276. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  277. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  278. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  279. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  283. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  284. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  285. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  286. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  287. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  288. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  289. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  290. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  291. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  292. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  293. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  294. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  295. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  296. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  297. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  298. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  299. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  300. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  301. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  302. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  303. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  304. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  305. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  321. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  322. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  323. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  324. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  325. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  326. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  327. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  329. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  333. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  334. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  337. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  338. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  339. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  340. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  341. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  342. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  343. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  347. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  348. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  349. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  350. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  351. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  352. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  353. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  354. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  355. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  356. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  357. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  358. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  359. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  360. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  361. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  362. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  363. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  364. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  365. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  377. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  378. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  379. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  380. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  381. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  382. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  383. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  384. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  385. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  386. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  387. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  388. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  389. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  390. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  391. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  395. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  396. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  397. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  398. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  399. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  400. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  401. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  402. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  403. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  404. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  405. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  406. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  407. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  408. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  409. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  410. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  411. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  412. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  413. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  414. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  415. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  416. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  417. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  418. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  419. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  420. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  421. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  422. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  423. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  424. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  425. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  426. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  427. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  428. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  429. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  430. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  431. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  432. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  433. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  434. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  435. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  436. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  437. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  438. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  439. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  440. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  441. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  442. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  443. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  444. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  445. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  447. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  448. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  449. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  450. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  451. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  452. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  453. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  454. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  455. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  456. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  457. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  458. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  460. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  461. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  463. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  464. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  465. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  466. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  467. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  468. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  469. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  471. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  472. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  473. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  474. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  475. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  476. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  477. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  478. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  479. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  480. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  481. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  482. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  483. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  487. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  488. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  489. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  490. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  491. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  511. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  515. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  517. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  519. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  527. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  561. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  567. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  577. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  581. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  583. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  591. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  640. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  642. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  644. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  648. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  668. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  670. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  689. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  690. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  692. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  693. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  694. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  695. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  696. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  697. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  698. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  699. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  700. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  701. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  702. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  703. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  704. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  705. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  706. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  707. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  708. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  709. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  710. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  711. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  712. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  713. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  714. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  715. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  716. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  717. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  718. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  724. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  725. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  729. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  730. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  736. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  737. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  758. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  759. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  760. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  761. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  762. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  763. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  764. data/src/core/ext/xds/certificate_provider_registry.cc +9 -9
  765. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  766. data/src/core/ext/xds/certificate_provider_store.cc +12 -0
  767. data/src/core/ext/xds/certificate_provider_store.h +19 -1
  768. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +13 -4
  769. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +10 -2
  770. data/src/core/ext/xds/upb_utils.h +45 -0
  771. data/src/core/ext/xds/xds_api.cc +331 -3601
  772. data/src/core/ext/xds/xds_api.h +75 -630
  773. data/src/core/ext/xds/xds_bootstrap.cc +279 -180
  774. data/src/core/ext/xds/xds_bootstrap.h +64 -28
  775. data/src/core/ext/xds/xds_certificate_provider.cc +17 -3
  776. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  777. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -20
  778. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  779. data/src/core/ext/xds/xds_client.cc +1185 -2050
  780. data/src/core/ext/xds/xds_client.h +143 -189
  781. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  782. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  783. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  784. data/src/core/ext/xds/xds_client_stats.h +9 -7
  785. data/src/core/ext/xds/xds_cluster.cc +543 -0
  786. data/src/core/ext/xds/xds_cluster.h +120 -0
  787. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +147 -0
  788. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +73 -0
  789. data/src/core/ext/xds/xds_common_types.cc +426 -0
  790. data/src/core/ext/xds/xds_common_types.h +102 -0
  791. data/src/core/ext/xds/xds_endpoint.cc +381 -0
  792. data/src/core/ext/xds/xds_endpoint.h +143 -0
  793. data/src/core/ext/xds/xds_http_fault_filter.cc +21 -26
  794. data/src/core/ext/xds/xds_http_fault_filter.h +8 -6
  795. data/src/core/ext/xds/xds_http_filters.cc +18 -5
  796. data/src/core/ext/xds/xds_http_filters.h +9 -9
  797. data/src/core/ext/xds/xds_http_rbac_filter.cc +560 -0
  798. data/src/core/ext/xds/xds_http_rbac_filter.h +61 -0
  799. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  800. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  801. data/src/core/ext/xds/xds_listener.cc +1097 -0
  802. data/src/core/ext/xds/xds_listener.h +229 -0
  803. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  804. data/src/core/ext/xds/xds_resource_type.h +109 -0
  805. data/src/core/ext/xds/xds_resource_type_impl.h +91 -0
  806. data/src/core/ext/xds/xds_route_config.cc +1153 -0
  807. data/src/core/ext/xds/xds_route_config.h +241 -0
  808. data/src/core/ext/xds/xds_routing.cc +263 -0
  809. data/src/core/ext/xds/xds_routing.h +104 -0
  810. data/src/core/ext/xds/xds_server_config_fetcher.cc +1138 -324
  811. data/src/core/ext/xds/xds_transport.h +86 -0
  812. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  813. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  814. data/src/core/lib/address_utils/parse_address.cc +27 -8
  815. data/src/core/lib/address_utils/parse_address.h +11 -2
  816. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  817. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  818. data/src/core/lib/avl/avl.h +476 -88
  819. data/src/core/lib/backoff/backoff.cc +10 -39
  820. data/src/core/lib/backoff/backoff.h +12 -12
  821. data/src/core/lib/channel/call_finalization.h +90 -0
  822. data/src/core/lib/channel/call_tracer.h +16 -7
  823. data/src/core/lib/channel/channel_args.cc +274 -48
  824. data/src/core/lib/channel/channel_args.h +298 -12
  825. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  826. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  827. data/src/core/lib/channel/channel_fwd.h +26 -0
  828. data/src/core/lib/channel/channel_stack.cc +54 -10
  829. data/src/core/lib/channel/channel_stack.h +83 -14
  830. data/src/core/lib/channel/channel_stack_builder.cc +19 -278
  831. data/src/core/lib/channel/channel_stack_builder.h +104 -150
  832. data/src/core/lib/channel/channel_stack_builder_impl.cc +95 -0
  833. data/src/core/lib/channel/channel_stack_builder_impl.h +46 -0
  834. data/src/core/lib/channel/channel_trace.cc +11 -19
  835. data/src/core/lib/channel/channel_trace.h +6 -3
  836. data/src/core/lib/channel/channelz.cc +36 -49
  837. data/src/core/lib/channel/channelz.h +24 -7
  838. data/src/core/lib/channel/channelz_registry.cc +11 -19
  839. data/src/core/lib/channel/channelz_registry.h +10 -9
  840. data/src/core/lib/channel/connected_channel.cc +26 -30
  841. data/src/core/lib/channel/connected_channel.h +4 -1
  842. data/src/core/lib/channel/context.h +11 -0
  843. data/src/core/lib/channel/promise_based_filter.cc +1263 -0
  844. data/src/core/lib/channel/promise_based_filter.h +571 -0
  845. data/src/core/lib/channel/status_util.cc +2 -0
  846. data/src/core/lib/channel/status_util.h +0 -3
  847. data/src/core/lib/compression/compression.cc +26 -113
  848. data/src/core/lib/compression/compression_internal.cc +170 -204
  849. data/src/core/lib/compression/compression_internal.h +68 -72
  850. data/src/core/lib/compression/message_compress.cc +14 -12
  851. data/src/core/lib/compression/message_compress.h +4 -5
  852. data/src/core/lib/config/core_configuration.cc +14 -3
  853. data/src/core/lib/config/core_configuration.h +100 -36
  854. data/src/core/lib/debug/stats.cc +15 -18
  855. data/src/core/lib/debug/stats.h +13 -4
  856. data/src/core/lib/debug/stats_data.cc +4 -7
  857. data/src/core/lib/debug/stats_data.h +18 -25
  858. data/src/core/lib/debug/trace.h +15 -14
  859. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +6 -3
  860. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +6 -5
  861. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  862. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.cc → event_engine/default_event_engine.h} +13 -17
  863. data/src/core/lib/event_engine/default_event_engine_factory.cc +50 -0
  864. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.h → event_engine/default_event_engine_factory.h} +8 -10
  865. data/src/core/lib/event_engine/executor/executor.h +38 -0
  866. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  867. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/executor/threaded_executor.h} +18 -25
  868. data/src/core/lib/event_engine/forkable.cc +101 -0
  869. data/src/core/lib/event_engine/forkable.h +61 -0
  870. data/src/core/lib/event_engine/handle_containers.h +67 -0
  871. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  872. data/src/core/lib/event_engine/poller.h +54 -0
  873. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  874. data/src/core/lib/event_engine/posix_engine/posix_engine.h +121 -0
  875. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  876. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  877. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  878. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  879. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  880. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  881. data/src/core/lib/event_engine/promise.h +78 -0
  882. data/src/core/lib/event_engine/{event_engine.cc → resolved_address.cc} +3 -12
  883. data/src/core/lib/event_engine/slice.cc +102 -0
  884. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  885. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  886. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  887. data/src/core/lib/event_engine/thread_pool.h +81 -0
  888. data/src/core/lib/event_engine/trace.cc +18 -0
  889. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  890. data/src/core/lib/event_engine/utils.cc +49 -0
  891. data/src/core/lib/event_engine/utils.h +40 -0
  892. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  893. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  894. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  895. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  896. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  897. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  898. data/src/core/lib/gpr/log.cc +5 -0
  899. data/src/core/lib/gpr/sync_posix.cc +1 -0
  900. data/src/core/lib/gpr/time.cc +13 -10
  901. data/src/core/lib/gpr/time_posix.cc +6 -9
  902. data/src/core/lib/gpr/time_windows.cc +10 -7
  903. data/src/core/lib/gpr/tls.h +10 -5
  904. data/src/core/lib/gpr/useful.h +47 -0
  905. data/src/core/lib/gprpp/bitset.h +27 -14
  906. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  907. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  908. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  909. data/src/core/lib/gprpp/debug_location.h +41 -7
  910. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  911. data/src/core/lib/gprpp/examine_stack.h +0 -1
  912. data/src/core/lib/gprpp/fork.cc +3 -6
  913. data/src/core/lib/gprpp/global_config.h +2 -4
  914. data/src/core/lib/gprpp/global_config_env.cc +10 -9
  915. data/src/core/lib/gprpp/global_config_env.h +5 -3
  916. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  917. data/src/core/lib/gprpp/host_port.cc +2 -0
  918. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  919. data/src/core/lib/gprpp/match.h +2 -0
  920. data/src/core/lib/gprpp/memory.h +1 -5
  921. data/src/core/lib/gprpp/no_destruct.h +94 -0
  922. data/src/core/lib/gprpp/orphanable.h +2 -5
  923. data/src/core/lib/gprpp/ref_counted.h +4 -4
  924. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -6
  925. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  926. data/src/core/lib/gprpp/stat.h +0 -2
  927. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  928. data/src/core/lib/gprpp/status_helper.cc +75 -48
  929. data/src/core/lib/gprpp/status_helper.h +10 -19
  930. data/src/core/lib/gprpp/sync.h +3 -1
  931. data/src/core/lib/gprpp/table.h +33 -1
  932. data/src/core/lib/gprpp/thd.h +2 -5
  933. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  934. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  935. data/src/core/lib/gprpp/time.cc +214 -0
  936. data/src/core/lib/gprpp/time.h +301 -0
  937. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  938. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  939. data/src/core/lib/gprpp/time_util.cc +4 -0
  940. data/src/core/lib/gprpp/time_util.h +1 -1
  941. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  942. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  943. data/src/core/lib/gprpp/work_serializer.h +86 -0
  944. data/src/core/lib/http/format_request.cc +62 -29
  945. data/src/core/lib/http/format_request.h +10 -7
  946. data/src/core/lib/http/httpcli.cc +316 -243
  947. data/src/core/lib/http/httpcli.h +233 -90
  948. data/src/core/lib/http/httpcli_security_connector.cc +80 -80
  949. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  950. data/src/core/lib/http/parser.cc +85 -15
  951. data/src/core/lib/http/parser.h +18 -2
  952. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  953. data/src/core/lib/iomgr/buffer_list.h +18 -18
  954. data/src/core/lib/iomgr/call_combiner.cc +10 -26
  955. data/src/core/lib/iomgr/closure.h +20 -9
  956. data/src/core/lib/iomgr/combiner.cc +9 -7
  957. data/src/core/lib/iomgr/endpoint.cc +4 -4
  958. data/src/core/lib/iomgr/endpoint.h +7 -6
  959. data/src/core/lib/iomgr/endpoint_cfstream.cc +16 -30
  960. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  961. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  962. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  963. data/src/core/lib/iomgr/error.cc +7 -775
  964. data/src/core/lib/iomgr/error.h +6 -149
  965. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  966. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  967. data/src/core/lib/iomgr/ev_epoll1_linux.cc +65 -25
  968. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  969. data/src/core/lib/iomgr/ev_poll_posix.cc +101 -68
  970. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  971. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  972. data/src/core/lib/iomgr/ev_posix.h +6 -4
  973. data/src/core/lib/iomgr/exec_ctx.cc +14 -98
  974. data/src/core/lib/iomgr/exec_ctx.h +19 -36
  975. data/src/core/lib/iomgr/executor.cc +16 -20
  976. data/src/core/lib/iomgr/executor.h +1 -4
  977. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  978. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  979. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  980. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  981. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  982. data/src/core/lib/iomgr/iomgr.cc +7 -1
  983. data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
  984. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  985. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -2
  986. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  987. data/src/core/lib/iomgr/load_file.cc +1 -1
  988. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  989. data/src/core/lib/iomgr/polling_entity.h +6 -0
  990. data/src/core/lib/iomgr/pollset.cc +1 -1
  991. data/src/core/lib/iomgr/pollset.h +4 -4
  992. data/src/core/lib/iomgr/pollset_set.h +1 -2
  993. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  994. data/src/core/lib/iomgr/port.h +29 -12
  995. data/src/core/lib/iomgr/resolve_address.cc +12 -23
  996. data/src/core/lib/iomgr/resolve_address.h +79 -46
  997. data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
  998. data/src/core/lib/iomgr/resolve_address_posix.cc +109 -65
  999. data/src/core/lib/iomgr/resolve_address_posix.h +64 -0
  1000. data/src/core/lib/iomgr/resolve_address_windows.cc +122 -76
  1001. data/src/core/lib/iomgr/resolve_address_windows.h +64 -0
  1002. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/resolved_address.h} +21 -10
  1003. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1004. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1005. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1006. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1007. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -19
  1008. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1009. data/src/core/lib/iomgr/tcp_client.cc +12 -9
  1010. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1011. data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -19
  1012. data/src/core/lib/iomgr/tcp_client_posix.cc +161 -52
  1013. data/src/core/lib/iomgr/tcp_client_posix.h +4 -5
  1014. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -26
  1015. data/src/core/lib/iomgr/tcp_posix.cc +307 -97
  1016. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  1017. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  1018. data/src/core/lib/iomgr/tcp_server.h +6 -8
  1019. data/src/core/lib/iomgr/tcp_server_posix.cc +72 -53
  1020. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  1021. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +42 -38
  1022. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -6
  1023. data/src/core/lib/iomgr/tcp_server_windows.cc +25 -24
  1024. data/src/core/lib/iomgr/tcp_windows.cc +31 -26
  1025. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  1026. data/src/core/lib/iomgr/timer.cc +2 -2
  1027. data/src/core/lib/iomgr/timer.h +11 -6
  1028. data/src/core/lib/iomgr/timer_generic.cc +100 -83
  1029. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  1030. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  1031. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1032. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1033. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  1034. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1035. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1036. data/src/core/lib/json/json.h +20 -24
  1037. data/src/core/lib/json/json_args.h +34 -0
  1038. data/src/core/lib/json/json_object_loader.cc +233 -0
  1039. data/src/core/lib/json/json_object_loader.h +618 -0
  1040. data/src/core/lib/json/json_reader.cc +155 -75
  1041. data/src/core/lib/json/json_util.cc +11 -32
  1042. data/src/core/lib/json/json_util.h +15 -6
  1043. data/src/core/lib/json/json_writer.cc +6 -1
  1044. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +7 -45
  1045. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +105 -95
  1046. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1047. data/src/core/lib/load_balancing/lb_policy_registry.cc +167 -0
  1048. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +31 -26
  1049. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -47
  1050. data/src/core/lib/matchers/matchers.cc +7 -4
  1051. data/src/core/lib/matchers/matchers.h +2 -0
  1052. data/src/core/lib/promise/activity.cc +120 -0
  1053. data/src/core/lib/promise/activity.h +582 -0
  1054. data/src/core/lib/promise/arena_promise.h +201 -0
  1055. data/src/core/lib/promise/call_push_pull.h +148 -0
  1056. data/src/core/lib/promise/context.h +85 -0
  1057. data/src/core/lib/promise/detail/basic_seq.h +516 -0
  1058. data/src/core/lib/promise/detail/promise_factory.h +187 -0
  1059. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1060. data/src/core/lib/promise/detail/status.h +50 -0
  1061. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1062. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1063. data/src/core/lib/promise/latch.h +103 -0
  1064. data/src/core/lib/promise/loop.h +136 -0
  1065. data/src/core/lib/promise/map.h +87 -0
  1066. data/src/core/lib/promise/poll.h +66 -0
  1067. data/src/core/lib/promise/promise.h +96 -0
  1068. data/src/core/lib/promise/race.h +83 -0
  1069. data/src/core/lib/promise/seq.h +108 -0
  1070. data/src/core/lib/promise/sleep.cc +77 -0
  1071. data/src/core/lib/promise/sleep.h +79 -0
  1072. data/src/core/lib/promise/try_seq.h +177 -0
  1073. data/src/core/lib/{iomgr/ev_epollex_linux.h → resolver/resolver.cc} +15 -8
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +45 -53
  1075. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +36 -34
  1076. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1077. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1078. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +28 -18
  1079. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +19 -16
  1080. data/src/core/lib/resource_quota/api.cc +96 -0
  1081. data/src/core/lib/resource_quota/api.h +43 -0
  1082. data/src/core/lib/{gprpp → resource_quota}/arena.cc +37 -20
  1083. data/src/core/lib/{gprpp → resource_quota}/arena.h +49 -17
  1084. data/src/core/lib/resource_quota/memory_quota.cc +618 -0
  1085. data/src/core/lib/resource_quota/memory_quota.h +543 -0
  1086. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  1087. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1088. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/resource_quota/resource_quota.cc} +13 -11
  1089. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1090. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1091. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1092. data/src/core/lib/{iomgr/event_engine/pollset.h → resource_quota/trace.cc} +3 -9
  1093. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
  1094. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1095. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1096. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1097. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1098. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +66 -0
  1099. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1100. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +120 -0
  1101. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1102. data/src/core/lib/security/authorization/matchers.cc +238 -0
  1103. data/src/core/lib/security/authorization/matchers.h +218 -0
  1104. data/src/core/lib/security/authorization/rbac_policy.cc +446 -0
  1105. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1106. data/src/core/lib/security/context/security_context.cc +9 -4
  1107. data/src/core/lib/security/context/security_context.h +23 -4
  1108. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1109. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1110. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1111. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1112. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1113. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1114. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1115. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1116. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1117. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1118. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1119. data/src/core/lib/security/credentials/credentials.h +106 -99
  1120. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +173 -52
  1121. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1122. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  1123. data/src/core/lib/security/credentials/external/external_account_credentials.cc +108 -64
  1124. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1125. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -9
  1126. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1127. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +58 -23
  1128. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1129. data/src/core/lib/security/credentials/fake/fake_credentials.cc +42 -43
  1130. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1131. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  1132. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +91 -56
  1133. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1134. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -30
  1135. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1136. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1137. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1138. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -11
  1139. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1140. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1141. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1142. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +90 -56
  1143. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -3
  1144. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1145. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1146. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +201 -202
  1147. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1148. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +103 -156
  1149. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1150. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1151. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  1153. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  1154. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +50 -22
  1155. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -12
  1156. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1157. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1158. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1159. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1160. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1161. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1162. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  1163. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1164. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1165. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1166. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +41 -35
  1167. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1168. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +50 -55
  1169. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1170. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +21 -22
  1171. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +32 -21
  1172. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1173. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +28 -21
  1174. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  1175. data/src/core/lib/security/security_connector/local/local_security_connector.cc +45 -29
  1176. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1177. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1178. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1179. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +32 -22
  1180. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1181. data/src/core/lib/security/security_connector/ssl_utils.cc +50 -34
  1182. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1183. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1184. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +387 -220
  1185. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1186. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1187. data/src/core/lib/security/transport/client_auth_filter.cc +111 -368
  1188. data/src/core/lib/security/transport/secure_endpoint.cc +267 -137
  1189. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1190. data/src/core/lib/security/transport/security_handshaker.cc +81 -50
  1191. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1192. data/src/core/lib/security/transport/server_auth_filter.cc +70 -41
  1193. data/src/core/lib/security/util/json_util.cc +3 -2
  1194. data/src/core/lib/security/util/json_util.h +0 -2
  1195. data/src/core/lib/service_config/service_config.h +89 -0
  1196. data/src/core/{ext → lib}/service_config/service_config_call_data.h +11 -7
  1197. data/src/core/lib/service_config/service_config_impl.cc +238 -0
  1198. data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +33 -32
  1199. data/src/core/lib/service_config/service_config_parser.cc +98 -0
  1200. data/src/core/lib/service_config/service_config_parser.h +101 -0
  1201. data/src/core/lib/slice/b64.cc +1 -1
  1202. data/src/core/lib/slice/b64.h +2 -0
  1203. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1204. data/src/core/lib/slice/percent_encoding.h +4 -16
  1205. data/src/core/lib/slice/slice.cc +88 -184
  1206. data/src/core/lib/slice/slice.h +389 -0
  1207. data/src/core/lib/slice/slice_api.cc +1 -1
  1208. data/src/core/lib/slice/slice_buffer.cc +83 -23
  1209. data/src/core/lib/slice/slice_buffer.h +137 -0
  1210. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_buffer_api.cc} +11 -12
  1211. data/src/core/lib/slice/slice_internal.h +16 -34
  1212. data/src/core/lib/slice/slice_refcount.cc +18 -0
  1213. data/src/core/lib/slice/slice_refcount.h +7 -83
  1214. data/src/core/lib/slice/slice_refcount_base.h +20 -133
  1215. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1216. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1217. data/src/core/lib/surface/builtins.cc +11 -6
  1218. data/src/core/lib/surface/byte_buffer.cc +7 -1
  1219. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  1220. data/src/core/lib/surface/call.cc +1159 -1289
  1221. data/src/core/lib/surface/call.h +26 -22
  1222. data/src/core/lib/surface/call_details.cc +4 -4
  1223. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1224. data/src/core/lib/surface/call_test_only.h +4 -1
  1225. data/src/core/lib/surface/channel.cc +218 -312
  1226. data/src/core/lib/surface/channel.h +102 -74
  1227. data/src/core/lib/surface/channel_init.cc +2 -3
  1228. data/src/core/lib/surface/channel_init.h +4 -6
  1229. data/src/core/lib/surface/channel_ping.cc +8 -2
  1230. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  1231. data/src/core/lib/surface/channel_stack_type.h +0 -2
  1232. data/src/core/lib/surface/completion_queue.cc +41 -33
  1233. data/src/core/lib/surface/completion_queue.h +7 -5
  1234. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  1235. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1236. data/src/core/lib/surface/event_string.cc +1 -7
  1237. data/src/core/lib/surface/event_string.h +1 -1
  1238. data/src/core/lib/surface/init.cc +68 -33
  1239. data/src/core/lib/surface/init.h +0 -10
  1240. data/src/core/lib/surface/lame_client.cc +63 -103
  1241. data/src/core/lib/surface/lame_client.h +41 -3
  1242. data/src/core/lib/surface/metadata_array.cc +2 -0
  1243. data/src/core/lib/surface/server.cc +121 -146
  1244. data/src/core/lib/surface/server.h +60 -29
  1245. data/src/core/lib/surface/validate_metadata.cc +7 -20
  1246. data/src/core/lib/surface/validate_metadata.h +3 -0
  1247. data/src/core/lib/surface/version.cc +2 -2
  1248. data/src/core/lib/transport/bdp_estimator.cc +13 -12
  1249. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1250. data/src/core/lib/transport/connectivity_state.cc +5 -4
  1251. data/src/core/lib/transport/connectivity_state.h +3 -4
  1252. data/src/core/lib/transport/error_utils.cc +17 -43
  1253. data/src/core/lib/transport/error_utils.h +7 -2
  1254. data/src/core/lib/{channel → transport}/handshaker.cc +20 -17
  1255. data/src/core/lib/{channel → transport}/handshaker.h +16 -10
  1256. data/src/core/lib/{channel → transport}/handshaker_factory.h +10 -12
  1257. data/src/core/lib/{channel → transport}/handshaker_registry.cc +7 -2
  1258. data/src/core/lib/{channel → transport}/handshaker_registry.h +7 -8
  1259. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +62 -53
  1260. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  1261. data/src/core/lib/transport/metadata_batch.cc +267 -69
  1262. data/src/core/lib/transport/metadata_batch.h +1088 -835
  1263. data/src/core/lib/transport/parsed_metadata.cc +39 -0
  1264. data/src/core/lib/transport/parsed_metadata.h +237 -93
  1265. data/src/core/lib/transport/pid_controller.cc +4 -4
  1266. data/src/core/lib/transport/status_conversion.cc +4 -2
  1267. data/src/core/lib/transport/status_conversion.h +3 -3
  1268. data/src/core/lib/transport/tcp_connect_handshaker.cc +247 -0
  1269. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1270. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1271. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1272. data/src/core/lib/transport/transport.cc +25 -47
  1273. data/src/core/lib/transport/transport.h +151 -27
  1274. data/src/core/lib/transport/transport_fwd.h +20 -0
  1275. data/src/core/lib/transport/transport_impl.h +25 -0
  1276. data/src/core/lib/transport/transport_op_string.cc +21 -64
  1277. data/src/core/lib/uri/uri_parser.cc +248 -66
  1278. data/src/core/lib/uri/uri_parser.h +39 -25
  1279. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -92
  1280. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1281. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +67 -43
  1282. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1283. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1284. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +36 -21
  1285. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1286. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1287. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1288. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1289. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1290. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  1291. data/src/core/tsi/fake_transport_security.cc +66 -31
  1292. data/src/core/tsi/fake_transport_security.h +6 -0
  1293. data/src/core/tsi/local_transport_security.cc +24 -28
  1294. data/src/core/tsi/local_transport_security.h +1 -4
  1295. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1296. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1297. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1298. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  1299. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1300. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  1301. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1302. data/src/core/tsi/ssl_transport_security.h +47 -8
  1303. data/src/core/tsi/transport_security.cc +18 -6
  1304. data/src/core/tsi/transport_security.h +2 -1
  1305. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1306. data/src/core/tsi/transport_security_grpc.h +5 -2
  1307. data/src/core/tsi/transport_security_interface.h +19 -5
  1308. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1309. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1310. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1311. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1312. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1313. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1314. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -34
  1315. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -52
  1316. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1317. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1318. data/src/ruby/lib/grpc/errors.rb +1 -1
  1319. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1320. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1321. data/src/ruby/lib/grpc/version.rb +1 -1
  1322. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1323. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1324. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1325. data/src/ruby/pb/test/client.rb +769 -0
  1326. data/src/ruby/pb/test/server.rb +252 -0
  1327. data/src/ruby/pb/test/xds_client.rb +415 -0
  1328. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1329. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1330. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1331. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1332. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1333. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1334. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1335. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1336. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1337. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1338. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1339. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1340. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1341. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1342. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1343. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1344. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1345. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1346. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1347. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1348. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1349. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1352. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1353. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1354. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1355. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1356. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1357. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1358. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1359. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1360. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1361. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1362. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1363. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1364. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1365. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1366. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1367. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1368. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1369. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1370. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1371. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1372. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1373. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1374. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1375. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1376. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1377. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1381. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1382. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1383. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1384. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1385. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1386. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1387. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1388. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1389. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1390. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1391. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1392. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1393. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1394. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1395. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1396. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1397. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1398. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1399. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1400. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1401. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1402. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1403. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1404. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1405. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1406. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1407. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1408. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1409. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1410. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1411. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1412. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1413. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1415. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1416. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1417. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1418. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1419. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1420. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1421. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1422. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1423. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1424. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1425. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1426. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1427. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1428. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1429. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1430. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1431. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1432. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1433. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1434. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1435. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1436. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1437. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1438. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1439. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1440. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1441. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1442. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1443. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1444. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1445. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1446. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1447. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1448. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1449. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1450. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1451. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1452. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1453. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1454. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1455. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1456. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1457. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1458. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1459. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1460. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1461. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1462. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1463. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1464. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1465. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1466. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1467. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1468. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1469. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1470. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1471. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1472. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1473. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1474. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1475. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1476. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1477. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1478. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1479. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1480. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1481. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1482. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1483. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1484. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1485. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1486. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1487. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1488. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1489. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1490. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1491. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1492. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1493. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1494. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1495. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1496. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1497. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1498. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1499. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1500. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1501. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1502. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1503. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1504. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1505. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1506. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1507. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1508. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1509. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1510. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1511. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1512. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1513. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1514. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1515. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1516. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1517. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1518. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1519. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1520. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1521. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1522. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1523. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1524. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1525. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1526. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1527. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1528. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1529. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1530. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1531. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1532. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1533. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1534. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1535. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1536. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1537. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1538. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1539. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1540. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1541. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1542. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1543. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1544. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1545. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1546. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1547. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1548. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1549. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1550. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1551. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1552. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1553. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1554. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1555. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1556. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1557. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1558. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1559. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1560. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1561. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1562. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1563. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1564. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1565. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1569. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1570. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1574. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1575. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1576. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1578. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1579. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1580. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1581. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1582. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1600. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1601. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1602. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1603. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1604. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1605. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1606. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1607. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1608. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1610. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1611. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1612. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1613. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1614. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1615. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1616. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1617. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1618. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1619. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1620. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1621. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1622. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1623. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1624. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1625. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1626. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1627. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1628. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1629. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1630. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1631. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1632. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1633. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1634. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1635. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1636. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1637. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1638. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1639. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1640. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1641. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1642. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1643. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1644. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1645. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1646. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1647. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1648. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1649. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1650. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1651. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1652. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1653. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1654. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1655. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1656. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1657. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1658. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1659. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1660. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1661. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1662. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1663. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1664. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1665. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1666. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1667. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1668. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1669. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1670. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1671. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1672. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1673. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1674. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1675. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1676. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1677. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1678. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1679. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1680. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1681. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1682. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1683. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1684. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1685. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1686. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1687. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1688. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1689. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1690. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1691. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1692. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1693. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1694. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1695. data/third_party/upb/upb/arena.c +277 -0
  1696. data/third_party/upb/upb/arena.h +225 -0
  1697. data/third_party/upb/upb/array.c +114 -0
  1698. data/third_party/upb/upb/array.h +83 -0
  1699. data/third_party/upb/upb/collections.h +36 -0
  1700. data/third_party/upb/upb/decode.c +832 -382
  1701. data/third_party/upb/upb/decode.h +44 -17
  1702. data/third_party/upb/upb/decode_fast.c +304 -302
  1703. data/third_party/upb/upb/decode_fast.h +18 -18
  1704. data/third_party/upb/upb/def.c +2083 -982
  1705. data/third_party/upb/upb/def.h +339 -260
  1706. data/third_party/upb/upb/def.hpp +144 -171
  1707. data/third_party/upb/upb/encode.c +287 -185
  1708. data/third_party/upb/upb/encode.h +24 -16
  1709. data/third_party/upb/upb/extension_registry.c +93 -0
  1710. data/third_party/upb/upb/extension_registry.h +84 -0
  1711. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +76 -58
  1712. data/third_party/upb/upb/internal/table.h +385 -0
  1713. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +23 -13
  1714. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1715. data/third_party/upb/upb/json_decode.c +1512 -0
  1716. data/third_party/upb/upb/json_decode.h +47 -0
  1717. data/third_party/upb/upb/json_encode.c +780 -0
  1718. data/third_party/upb/upb/json_encode.h +65 -0
  1719. data/third_party/upb/upb/map.c +108 -0
  1720. data/third_party/upb/upb/map.h +117 -0
  1721. data/third_party/upb/upb/message_value.h +66 -0
  1722. data/third_party/upb/upb/mini_table.c +1147 -0
  1723. data/third_party/upb/upb/mini_table.h +189 -0
  1724. data/third_party/upb/upb/mini_table.hpp +112 -0
  1725. data/third_party/upb/upb/msg.c +132 -161
  1726. data/third_party/upb/upb/msg.h +18 -55
  1727. data/third_party/upb/upb/msg_internal.h +404 -254
  1728. data/third_party/upb/upb/port_def.inc +10 -1
  1729. data/third_party/upb/upb/port_undef.inc +2 -0
  1730. data/third_party/upb/upb/reflection.c +203 -280
  1731. data/third_party/upb/upb/reflection.h +40 -126
  1732. data/third_party/upb/upb/reflection.hpp +6 -6
  1733. data/third_party/upb/upb/status.c +86 -0
  1734. data/third_party/upb/upb/status.h +66 -0
  1735. data/third_party/upb/upb/table.c +233 -149
  1736. data/third_party/upb/upb/table_internal.h +9 -324
  1737. data/third_party/upb/upb/text_encode.c +116 -92
  1738. data/third_party/upb/upb/text_encode.h +10 -10
  1739. data/third_party/upb/upb/upb.c +34 -273
  1740. data/third_party/upb/upb/upb.h +79 -262
  1741. data/third_party/upb/upb/upb.hpp +31 -28
  1742. data/third_party/xxhash/xxhash.h +607 -352
  1743. data/third_party/zlib/crc32.c +966 -292
  1744. data/third_party/zlib/crc32.h +9441 -436
  1745. data/third_party/zlib/deflate.c +78 -30
  1746. data/third_party/zlib/deflate.h +12 -15
  1747. data/third_party/zlib/gzguts.h +3 -2
  1748. data/third_party/zlib/gzlib.c +5 -3
  1749. data/third_party/zlib/gzread.c +5 -7
  1750. data/third_party/zlib/gzwrite.c +25 -13
  1751. data/third_party/zlib/infback.c +2 -1
  1752. data/third_party/zlib/inffast.c +14 -14
  1753. data/third_party/zlib/inflate.c +39 -8
  1754. data/third_party/zlib/inflate.h +3 -2
  1755. data/third_party/zlib/inftrees.c +3 -3
  1756. data/third_party/zlib/trees.c +27 -48
  1757. data/third_party/zlib/zlib.h +123 -100
  1758. data/third_party/zlib/zutil.c +2 -2
  1759. data/third_party/zlib/zutil.h +12 -9
  1760. metadata +637 -270
  1761. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1762. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1763. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1764. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1765. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1766. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1767. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1768. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1769. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1770. data/src/core/ext/service_config/service_config.cc +0 -227
  1771. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1772. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1773. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1774. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1775. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1776. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1777. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1778. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1779. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1780. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1781. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1782. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1783. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1784. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1785. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1786. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1787. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1788. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1789. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1790. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1791. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1792. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1793. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1794. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1795. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1796. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1797. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1798. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1799. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1800. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1801. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1802. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1803. data/src/core/lib/avl/avl.cc +0 -306
  1804. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1805. data/src/core/lib/compression/compression_args.cc +0 -138
  1806. data/src/core/lib/compression/compression_args.h +0 -56
  1807. data/src/core/lib/compression/stream_compression.cc +0 -81
  1808. data/src/core/lib/compression/stream_compression.h +0 -117
  1809. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1810. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1811. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1812. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1813. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1814. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1815. data/src/core/lib/iomgr/error_internal.h +0 -66
  1816. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1817. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1818. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1819. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1820. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1821. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1822. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1823. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1824. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1825. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1826. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1827. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1828. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1829. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1830. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1831. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1832. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1833. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1834. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1835. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1836. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1837. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1838. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1839. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1840. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1841. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1842. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1843. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1844. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1845. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  1846. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  1847. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1848. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1849. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1850. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  1851. data/src/core/lib/iomgr/work_serializer.h +0 -81
  1852. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  1853. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  1854. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1855. data/src/core/lib/slice/slice_intern.cc +0 -367
  1856. data/src/core/lib/slice/slice_split.cc +0 -100
  1857. data/src/core/lib/slice/slice_split.h +0 -40
  1858. data/src/core/lib/slice/slice_utils.h +0 -200
  1859. data/src/core/lib/slice/static_slice.cc +0 -529
  1860. data/src/core/lib/slice/static_slice.h +0 -331
  1861. data/src/core/lib/surface/init_secure.cc +0 -103
  1862. data/src/core/lib/transport/byte_stream.cc +0 -158
  1863. data/src/core/lib/transport/byte_stream.h +0 -166
  1864. data/src/core/lib/transport/metadata.cc +0 -714
  1865. data/src/core/lib/transport/metadata.h +0 -449
  1866. data/src/core/lib/transport/static_metadata.cc +0 -1117
  1867. data/src/core/lib/transport/static_metadata.h +0 -340
  1868. data/src/core/lib/transport/status_metadata.cc +0 -63
  1869. data/src/core/lib/transport/status_metadata.h +0 -48
  1870. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  1871. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1872. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1873. data/third_party/cares/cares/ares_getopt.c +0 -122
  1874. data/third_party/cares/cares/ares_getopt.h +0 -53
  1875. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1876. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1877. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
@@ -53,40 +53,121 @@
53
53
  //
54
54
  // IMPLEMENTATION DETAILS
55
55
  //
56
- // The table stores elements inline in a slot array. In addition to the slot
57
- // array the table maintains some control state per slot. The extra state is one
58
- // byte per slot and stores empty or deleted marks, or alternatively 7 bits from
59
- // the hash of an occupied slot. The table is split into logical groups of
60
- // slots, like so:
56
+ // # Table Layout
57
+ //
58
+ // A raw_hash_set's backing array consists of control bytes followed by slots
59
+ // that may or may not contain objects.
60
+ //
61
+ // The layout of the backing array, for `capacity` slots, is thus, as a
62
+ // pseudo-struct:
63
+ //
64
+ // struct BackingArray {
65
+ // // Control bytes for the "real" slots.
66
+ // ctrl_t ctrl[capacity];
67
+ // // Always `ctrl_t::kSentinel`. This is used by iterators to find when to
68
+ // // stop and serves no other purpose.
69
+ // ctrl_t sentinel;
70
+ // // A copy of the first `kWidth - 1` elements of `ctrl`. This is used so
71
+ // // that if a probe sequence picks a value near the end of `ctrl`,
72
+ // // `Group` will have valid control bytes to look at.
73
+ // ctrl_t clones[kWidth - 1];
74
+ // // The actual slot data.
75
+ // slot_type slots[capacity];
76
+ // };
77
+ //
78
+ // The length of this array is computed by `AllocSize()` below.
79
+ //
80
+ // Control bytes (`ctrl_t`) are bytes (collected into groups of a
81
+ // platform-specific size) that define the state of the corresponding slot in
82
+ // the slot array. Group manipulation is tightly optimized to be as efficient
83
+ // as possible: SSE and friends on x86, clever bit operations on other arches.
61
84
  //
62
85
  // Group 1 Group 2 Group 3
63
86
  // +---------------+---------------+---------------+
64
87
  // | | | | | | | | | | | | | | | | | | | | | | | | |
65
88
  // +---------------+---------------+---------------+
66
89
  //
67
- // On lookup the hash is split into two parts:
68
- // - H2: 7 bits (those stored in the control bytes)
69
- // - H1: the rest of the bits
70
- // The groups are probed using H1. For each group the slots are matched to H2 in
71
- // parallel. Because H2 is 7 bits (128 states) and the number of slots per group
72
- // is low (8 or 16) in almost all cases a match in H2 is also a lookup hit.
90
+ // Each control byte is either a special value for empty slots, deleted slots
91
+ // (sometimes called *tombstones*), and a special end-of-table marker used by
92
+ // iterators, or, if occupied, seven bits (H2) from the hash of the value in the
93
+ // corresponding slot.
94
+ //
95
+ // Storing control bytes in a separate array also has beneficial cache effects,
96
+ // since more logical slots will fit into a cache line.
97
+ //
98
+ // # Hashing
99
+ //
100
+ // We compute two separate hashes, `H1` and `H2`, from the hash of an object.
101
+ // `H1(hash(x))` is an index into `slots`, and essentially the starting point
102
+ // for the probe sequence. `H2(hash(x))` is a 7-bit value used to filter out
103
+ // objects that cannot possibly be the one we are looking for.
104
+ //
105
+ // # Table operations.
106
+ //
107
+ // The key operations are `insert`, `find`, and `erase`.
108
+ //
109
+ // Since `insert` and `erase` are implemented in terms of `find`, we describe
110
+ // `find` first. To `find` a value `x`, we compute `hash(x)`. From
111
+ // `H1(hash(x))` and the capacity, we construct a `probe_seq` that visits every
112
+ // group of slots in some interesting order.
73
113
  //
74
- // On insert, once the right group is found (as in lookup), its slots are
75
- // filled in order.
114
+ // We now walk through these indices. At each index, we select the entire group
115
+ // starting with that index and extract potential candidates: occupied slots
116
+ // with a control byte equal to `H2(hash(x))`. If we find an empty slot in the
117
+ // group, we stop and return an error. Each candidate slot `y` is compared with
118
+ // `x`; if `x == y`, we are done and return `&y`; otherwise we contine to the
119
+ // next probe index. Tombstones effectively behave like full slots that never
120
+ // match the value we're looking for.
76
121
  //
77
- // On erase a slot is cleared. In case the group did not have any empty slots
78
- // before the erase, the erased slot is marked as deleted.
122
+ // The `H2` bits ensure when we compare a slot to an object with `==`, we are
123
+ // likely to have actually found the object. That is, the chance is low that
124
+ // `==` is called and returns `false`. Thus, when we search for an object, we
125
+ // are unlikely to call `==` many times. This likelyhood can be analyzed as
126
+ // follows (assuming that H2 is a random enough hash function).
79
127
  //
80
- // Groups without empty slots (but maybe with deleted slots) extend the probe
81
- // sequence. The probing algorithm is quadratic. Given N the number of groups,
82
- // the probing function for the i'th probe is:
128
+ // Let's assume that there are `k` "wrong" objects that must be examined in a
129
+ // probe sequence. For example, when doing a `find` on an object that is in the
130
+ // table, `k` is the number of objects between the start of the probe sequence
131
+ // and the final found object (not including the final found object). The
132
+ // expected number of objects with an H2 match is then `k/128`. Measurements
133
+ // and analysis indicate that even at high load factors, `k` is less than 32,
134
+ // meaning that the number of "false positive" comparisons we must perform is
135
+ // less than 1/8 per `find`.
136
+
137
+ // `insert` is implemented in terms of `unchecked_insert`, which inserts a
138
+ // value presumed to not be in the table (violating this requirement will cause
139
+ // the table to behave erratically). Given `x` and its hash `hash(x)`, to insert
140
+ // it, we construct a `probe_seq` once again, and use it to find the first
141
+ // group with an unoccupied (empty *or* deleted) slot. We place `x` into the
142
+ // first such slot in the group and mark it as full with `x`'s H2.
83
143
  //
84
- // P(0) = H1 % N
144
+ // To `insert`, we compose `unchecked_insert` with `find`. We compute `h(x)` and
145
+ // perform a `find` to see if it's already present; if it is, we're done. If
146
+ // it's not, we may decide the table is getting overcrowded (i.e. the load
147
+ // factor is greater than 7/8 for big tables; `is_small()` tables use a max load
148
+ // factor of 1); in this case, we allocate a bigger array, `unchecked_insert`
149
+ // each element of the table into the new array (we know that no insertion here
150
+ // will insert an already-present value), and discard the old backing array. At
151
+ // this point, we may `unchecked_insert` the value `x`.
85
152
  //
86
- // P(i) = (P(i - 1) + i) % N
153
+ // Below, `unchecked_insert` is partly implemented by `prepare_insert`, which
154
+ // presents a viable, initialized slot pointee to the caller.
87
155
  //
88
- // This probing function guarantees that after N probes, all the groups of the
89
- // table will be probed exactly once.
156
+ // `erase` is implemented in terms of `erase_at`, which takes an index to a
157
+ // slot. Given an offset, we simply create a tombstone and destroy its contents.
158
+ // If we can prove that the slot would not appear in a probe sequence, we can
159
+ // make the slot as empty, instead. We can prove this by observing that if a
160
+ // group has any empty slots, it has never been full (assuming we never create
161
+ // an empty slot in a group with no empties, which this heuristic guarantees we
162
+ // never do) and find would stop at this group anyways (since it does not probe
163
+ // beyond groups with empties).
164
+ //
165
+ // `erase` is `erase_at` composed with `find`: if we
166
+ // have a value `x`, we can perform a `find`, and then `erase_at` the resulting
167
+ // slot.
168
+ //
169
+ // To iterate, we simply traverse the array, skipping empty and deleted slots
170
+ // and stopping when we hit a `kSentinel`.
90
171
 
91
172
  #ifndef ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
92
173
  #define ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
@@ -102,7 +183,9 @@
102
183
  #include <type_traits>
103
184
  #include <utility>
104
185
 
186
+ #include "absl/base/config.h"
105
187
  #include "absl/base/internal/endian.h"
188
+ #include "absl/base/internal/prefetch.h"
106
189
  #include "absl/base/optimization.h"
107
190
  #include "absl/base/port.h"
108
191
  #include "absl/container/internal/common.h"
@@ -111,13 +194,27 @@
111
194
  #include "absl/container/internal/hash_policy_traits.h"
112
195
  #include "absl/container/internal/hashtable_debug_hooks.h"
113
196
  #include "absl/container/internal/hashtablez_sampler.h"
114
- #include "absl/container/internal/have_sse.h"
115
- #include "absl/container/internal/layout.h"
116
197
  #include "absl/memory/memory.h"
117
198
  #include "absl/meta/type_traits.h"
118
199
  #include "absl/numeric/bits.h"
119
200
  #include "absl/utility/utility.h"
120
201
 
202
+ #ifdef ABSL_INTERNAL_HAVE_SSE2
203
+ #include <emmintrin.h>
204
+ #endif
205
+
206
+ #ifdef ABSL_INTERNAL_HAVE_SSSE3
207
+ #include <tmmintrin.h>
208
+ #endif
209
+
210
+ #ifdef _MSC_VER
211
+ #include <intrin.h>
212
+ #endif
213
+
214
+ #ifdef ABSL_INTERNAL_HAVE_ARM_NEON
215
+ #include <arm_neon.h>
216
+ #endif
217
+
121
218
  namespace absl {
122
219
  ABSL_NAMESPACE_BEGIN
123
220
  namespace container_internal {
@@ -132,14 +229,40 @@ template <typename AllocType>
132
229
  void SwapAlloc(AllocType& /*lhs*/, AllocType& /*rhs*/,
133
230
  std::false_type /* propagate_on_container_swap */) {}
134
231
 
232
+ // The state for a probe sequence.
233
+ //
234
+ // Currently, the sequence is a triangular progression of the form
235
+ //
236
+ // p(i) := Width * (i^2 + i)/2 + hash (mod mask + 1)
237
+ //
238
+ // The use of `Width` ensures that each probe step does not overlap groups;
239
+ // the sequence effectively outputs the addresses of *groups* (although not
240
+ // necessarily aligned to any boundary). The `Group` machinery allows us
241
+ // to check an entire group with minimal branching.
242
+ //
243
+ // Wrapping around at `mask + 1` is important, but not for the obvious reason.
244
+ // As described above, the first few entries of the control byte array
245
+ // are mirrored at the end of the array, which `Group` will find and use
246
+ // for selecting candidates. However, when those candidates' slots are
247
+ // actually inspected, there are no corresponding slots for the cloned bytes,
248
+ // so we need to make sure we've treated those offsets as "wrapping around".
249
+ //
250
+ // It turns out that this probe sequence visits every group exactly once if the
251
+ // number of groups is a power of two, since (i^2+i)/2 is a bijection in
252
+ // Z/(2^m). See https://en.wikipedia.org/wiki/Quadratic_probing
135
253
  template <size_t Width>
136
254
  class probe_seq {
137
255
  public:
256
+ // Creates a new probe sequence using `hash` as the initial value of the
257
+ // sequence and `mask` (usually the capacity of the table) as the mask to
258
+ // apply to each value in the progression.
138
259
  probe_seq(size_t hash, size_t mask) {
139
260
  assert(((mask + 1) & mask) == 0 && "not a mask");
140
261
  mask_ = mask;
141
262
  offset_ = hash & mask_;
142
263
  }
264
+
265
+ // The offset within the table, i.e., the value `p(i)` above.
143
266
  size_t offset() const { return offset_; }
144
267
  size_t offset(size_t i) const { return (offset_ + i) & mask_; }
145
268
 
@@ -148,7 +271,7 @@ class probe_seq {
148
271
  offset_ += index_;
149
272
  offset_ &= mask_;
150
273
  }
151
- // 0-based probe index. The i-th probe in the probe sequence.
274
+ // 0-based probe index, a multiple of `Width`.
152
275
  size_t index() const { return index_; }
153
276
 
154
277
  private:
@@ -172,9 +295,9 @@ struct IsDecomposable : std::false_type {};
172
295
 
173
296
  template <class Policy, class Hash, class Eq, class... Ts>
174
297
  struct IsDecomposable<
175
- absl::void_t<decltype(
176
- Policy::apply(RequireUsableKey<typename Policy::key_type, Hash, Eq>(),
177
- std::declval<Ts>()...))>,
298
+ absl::void_t<decltype(Policy::apply(
299
+ RequireUsableKey<typename Policy::key_type, Hash, Eq>(),
300
+ std::declval<Ts>()...))>,
178
301
  Policy, Hash, Eq, Ts...> : std::true_type {};
179
302
 
180
303
  // TODO(alkis): Switch to std::is_nothrow_swappable when gcc/clang supports it.
@@ -190,57 +313,84 @@ constexpr bool IsNoThrowSwappable(std::false_type /* is_swappable */) {
190
313
 
191
314
  template <typename T>
192
315
  uint32_t TrailingZeros(T x) {
193
- ABSL_INTERNAL_ASSUME(x != 0);
194
- return countr_zero(x);
316
+ ABSL_ASSUME(x != 0);
317
+ return static_cast<uint32_t>(countr_zero(x));
195
318
  }
196
319
 
197
- // An abstraction over a bitmask. It provides an easy way to iterate through the
198
- // indexes of the set bits of a bitmask. When Shift=0 (platforms with SSE),
199
- // this is a true bitmask. On non-SSE, platforms the arithematic used to
200
- // emulate the SSE behavior works in bytes (Shift=3) and leaves each bytes as
201
- // either 0x00 or 0x80.
320
+ // An abstract bitmask, such as that emitted by a SIMD instruction.
202
321
  //
203
- // For example:
204
- // for (int i : BitMask<uint32_t, 16>(0x5)) -> yields 0, 2
205
- // for (int i : BitMask<uint64_t, 8, 3>(0x0000000080800000)) -> yields 2, 3
322
+ // Specifically, this type implements a simple bitset whose representation is
323
+ // controlled by `SignificantBits` and `Shift`. `SignificantBits` is the number
324
+ // of abstract bits in the bitset, while `Shift` is the log-base-two of the
325
+ // width of an abstract bit in the representation.
326
+ // This mask provides operations for any number of real bits set in an abstract
327
+ // bit. To add iteration on top of that, implementation must guarantee no more
328
+ // than one real bit is set in an abstract bit.
206
329
  template <class T, int SignificantBits, int Shift = 0>
207
- class BitMask {
208
- static_assert(std::is_unsigned<T>::value, "");
209
- static_assert(Shift == 0 || Shift == 3, "");
210
-
330
+ class NonIterableBitMask {
211
331
  public:
212
- // These are useful for unit tests (gunit).
213
- using value_type = int;
214
- using iterator = BitMask;
215
- using const_iterator = BitMask;
332
+ explicit NonIterableBitMask(T mask) : mask_(mask) {}
216
333
 
217
- explicit BitMask(T mask) : mask_(mask) {}
218
- BitMask& operator++() {
219
- mask_ &= (mask_ - 1);
220
- return *this;
221
- }
222
- explicit operator bool() const { return mask_ != 0; }
223
- int operator*() const { return LowestBitSet(); }
334
+ explicit operator bool() const { return this->mask_ != 0; }
335
+
336
+ // Returns the index of the lowest *abstract* bit set in `self`.
224
337
  uint32_t LowestBitSet() const {
225
338
  return container_internal::TrailingZeros(mask_) >> Shift;
226
339
  }
340
+
341
+ // Returns the index of the highest *abstract* bit set in `self`.
227
342
  uint32_t HighestBitSet() const {
228
343
  return static_cast<uint32_t>((bit_width(mask_) - 1) >> Shift);
229
344
  }
230
345
 
231
- BitMask begin() const { return *this; }
232
- BitMask end() const { return BitMask(0); }
233
-
346
+ // Return the number of trailing zero *abstract* bits.
234
347
  uint32_t TrailingZeros() const {
235
348
  return container_internal::TrailingZeros(mask_) >> Shift;
236
349
  }
237
350
 
351
+ // Return the number of leading zero *abstract* bits.
238
352
  uint32_t LeadingZeros() const {
239
353
  constexpr int total_significant_bits = SignificantBits << Shift;
240
354
  constexpr int extra_bits = sizeof(T) * 8 - total_significant_bits;
241
- return countl_zero(mask_ << extra_bits) >> Shift;
355
+ return static_cast<uint32_t>(countl_zero(mask_ << extra_bits)) >> Shift;
242
356
  }
243
357
 
358
+ T mask_;
359
+ };
360
+
361
+ // Mask that can be iterable
362
+ //
363
+ // For example, when `SignificantBits` is 16 and `Shift` is zero, this is just
364
+ // an ordinary 16-bit bitset occupying the low 16 bits of `mask`. When
365
+ // `SignificantBits` is 8 and `Shift` is 3, abstract bits are represented as
366
+ // the bytes `0x00` and `0x80`, and it occupies all 64 bits of the bitmask.
367
+ //
368
+ // For example:
369
+ // for (int i : BitMask<uint32_t, 16>(0b101)) -> yields 0, 2
370
+ // for (int i : BitMask<uint64_t, 8, 3>(0x0000000080800000)) -> yields 2, 3
371
+ template <class T, int SignificantBits, int Shift = 0>
372
+ class BitMask : public NonIterableBitMask<T, SignificantBits, Shift> {
373
+ using Base = NonIterableBitMask<T, SignificantBits, Shift>;
374
+ static_assert(std::is_unsigned<T>::value, "");
375
+ static_assert(Shift == 0 || Shift == 3, "");
376
+
377
+ public:
378
+ explicit BitMask(T mask) : Base(mask) {}
379
+ // BitMask is an iterator over the indices of its abstract bits.
380
+ using value_type = int;
381
+ using iterator = BitMask;
382
+ using const_iterator = BitMask;
383
+
384
+ BitMask& operator++() {
385
+ this->mask_ &= (this->mask_ - 1);
386
+ return *this;
387
+ }
388
+
389
+ uint32_t operator*() const { return Base::LowestBitSet(); }
390
+
391
+ BitMask begin() const { return *this; }
392
+ BitMask end() const { return BitMask(0); }
393
+
244
394
  private:
245
395
  friend bool operator==(const BitMask& a, const BitMask& b) {
246
396
  return a.mask_ == b.mask_;
@@ -248,75 +398,127 @@ class BitMask {
248
398
  friend bool operator!=(const BitMask& a, const BitMask& b) {
249
399
  return a.mask_ != b.mask_;
250
400
  }
251
-
252
- T mask_;
253
401
  };
254
402
 
255
- using ctrl_t = signed char;
256
403
  using h2_t = uint8_t;
257
404
 
258
405
  // The values here are selected for maximum performance. See the static asserts
259
406
  // below for details.
260
- enum Ctrl : ctrl_t {
407
+
408
+ // A `ctrl_t` is a single control byte, which can have one of four
409
+ // states: empty, deleted, full (which has an associated seven-bit h2_t value)
410
+ // and the sentinel. They have the following bit patterns:
411
+ //
412
+ // empty: 1 0 0 0 0 0 0 0
413
+ // deleted: 1 1 1 1 1 1 1 0
414
+ // full: 0 h h h h h h h // h represents the hash bits.
415
+ // sentinel: 1 1 1 1 1 1 1 1
416
+ //
417
+ // These values are specifically tuned for SSE-flavored SIMD.
418
+ // The static_asserts below detail the source of these choices.
419
+ //
420
+ // We use an enum class so that when strict aliasing is enabled, the compiler
421
+ // knows ctrl_t doesn't alias other types.
422
+ enum class ctrl_t : int8_t {
261
423
  kEmpty = -128, // 0b10000000
262
424
  kDeleted = -2, // 0b11111110
263
425
  kSentinel = -1, // 0b11111111
264
426
  };
265
427
  static_assert(
266
- kEmpty & kDeleted & kSentinel & 0x80,
428
+ (static_cast<int8_t>(ctrl_t::kEmpty) &
429
+ static_cast<int8_t>(ctrl_t::kDeleted) &
430
+ static_cast<int8_t>(ctrl_t::kSentinel) & 0x80) != 0,
267
431
  "Special markers need to have the MSB to make checking for them efficient");
268
- static_assert(kEmpty < kSentinel && kDeleted < kSentinel,
269
- "kEmpty and kDeleted must be smaller than kSentinel to make the "
270
- "SIMD test of IsEmptyOrDeleted() efficient");
271
- static_assert(kSentinel == -1,
272
- "kSentinel must be -1 to elide loading it from memory into SIMD "
273
- "registers (pcmpeqd xmm, xmm)");
274
- static_assert(kEmpty == -128,
275
- "kEmpty must be -128 to make the SIMD check for its "
432
+ static_assert(
433
+ ctrl_t::kEmpty < ctrl_t::kSentinel && ctrl_t::kDeleted < ctrl_t::kSentinel,
434
+ "ctrl_t::kEmpty and ctrl_t::kDeleted must be smaller than "
435
+ "ctrl_t::kSentinel to make the SIMD test of IsEmptyOrDeleted() efficient");
436
+ static_assert(
437
+ ctrl_t::kSentinel == static_cast<ctrl_t>(-1),
438
+ "ctrl_t::kSentinel must be -1 to elide loading it from memory into SIMD "
439
+ "registers (pcmpeqd xmm, xmm)");
440
+ static_assert(ctrl_t::kEmpty == static_cast<ctrl_t>(-128),
441
+ "ctrl_t::kEmpty must be -128 to make the SIMD check for its "
276
442
  "existence efficient (psignb xmm, xmm)");
277
- static_assert(~kEmpty & ~kDeleted & kSentinel & 0x7F,
278
- "kEmpty and kDeleted must share an unset bit that is not shared "
279
- "by kSentinel to make the scalar test for MatchEmptyOrDeleted() "
280
- "efficient");
281
- static_assert(kDeleted == -2,
282
- "kDeleted must be -2 to make the implementation of "
443
+ static_assert(
444
+ (~static_cast<int8_t>(ctrl_t::kEmpty) &
445
+ ~static_cast<int8_t>(ctrl_t::kDeleted) &
446
+ static_cast<int8_t>(ctrl_t::kSentinel) & 0x7F) != 0,
447
+ "ctrl_t::kEmpty and ctrl_t::kDeleted must share an unset bit that is not "
448
+ "shared by ctrl_t::kSentinel to make the scalar test for "
449
+ "MaskEmptyOrDeleted() efficient");
450
+ static_assert(ctrl_t::kDeleted == static_cast<ctrl_t>(-2),
451
+ "ctrl_t::kDeleted must be -2 to make the implementation of "
283
452
  "ConvertSpecialToEmptyAndFullToDeleted efficient");
284
453
 
285
- // A single block of empty control bytes for tables without any slots allocated.
286
- // This enables removing a branch in the hot path of find().
454
+ ABSL_DLL extern const ctrl_t kEmptyGroup[16];
455
+
456
+ // Returns a pointer to a control byte group that can be used by empty tables.
287
457
  inline ctrl_t* EmptyGroup() {
288
- alignas(16) static constexpr ctrl_t empty_group[] = {
289
- kSentinel, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty,
290
- kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty};
291
- return const_cast<ctrl_t*>(empty_group);
458
+ // Const must be cast away here; no uses of this function will actually write
459
+ // to it, because it is only used for empty tables.
460
+ return const_cast<ctrl_t*>(kEmptyGroup);
292
461
  }
293
462
 
294
463
  // Mixes a randomly generated per-process seed with `hash` and `ctrl` to
295
464
  // randomize insertion order within groups.
296
- bool ShouldInsertBackwards(size_t hash, ctrl_t* ctrl);
465
+ bool ShouldInsertBackwards(size_t hash, const ctrl_t* ctrl);
297
466
 
298
- // Returns a hash seed.
467
+ // Returns a per-table, hash salt, which changes on resize. This gets mixed into
468
+ // H1 to randomize iteration order per-table.
299
469
  //
300
470
  // The seed consists of the ctrl_ pointer, which adds enough entropy to ensure
301
471
  // non-determinism of iteration order in most cases.
302
- inline size_t HashSeed(const ctrl_t* ctrl) {
472
+ inline size_t PerTableSalt(const ctrl_t* ctrl) {
303
473
  // The low bits of the pointer have little or no entropy because of
304
474
  // alignment. We shift the pointer to try to use higher entropy bits. A
305
475
  // good number seems to be 12 bits, because that aligns with page size.
306
476
  return reinterpret_cast<uintptr_t>(ctrl) >> 12;
307
477
  }
308
-
478
+ // Extracts the H1 portion of a hash: 57 bits mixed with a per-table salt.
309
479
  inline size_t H1(size_t hash, const ctrl_t* ctrl) {
310
- return (hash >> 7) ^ HashSeed(ctrl);
480
+ return (hash >> 7) ^ PerTableSalt(ctrl);
311
481
  }
312
- inline ctrl_t H2(size_t hash) { return hash & 0x7F; }
313
482
 
314
- inline bool IsEmpty(ctrl_t c) { return c == kEmpty; }
315
- inline bool IsFull(ctrl_t c) { return c >= 0; }
316
- inline bool IsDeleted(ctrl_t c) { return c == kDeleted; }
317
- inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; }
483
+ // Extracts the H2 portion of a hash: the 7 bits not used for H1.
484
+ //
485
+ // These are used as an occupied control byte.
486
+ inline h2_t H2(size_t hash) { return hash & 0x7F; }
318
487
 
319
- #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
488
+ // Helpers for checking the state of a control byte.
489
+ inline bool IsEmpty(ctrl_t c) { return c == ctrl_t::kEmpty; }
490
+ inline bool IsFull(ctrl_t c) { return c >= static_cast<ctrl_t>(0); }
491
+ inline bool IsDeleted(ctrl_t c) { return c == ctrl_t::kDeleted; }
492
+ inline bool IsEmptyOrDeleted(ctrl_t c) { return c < ctrl_t::kSentinel; }
493
+
494
+ #ifdef ABSL_INTERNAL_HAVE_SSE2
495
+ // Quick reference guide for intrinsics used below:
496
+ //
497
+ // * __m128i: An XMM (128-bit) word.
498
+ //
499
+ // * _mm_setzero_si128: Returns a zero vector.
500
+ // * _mm_set1_epi8: Returns a vector with the same i8 in each lane.
501
+ //
502
+ // * _mm_subs_epi8: Saturating-subtracts two i8 vectors.
503
+ // * _mm_and_si128: Ands two i128s together.
504
+ // * _mm_or_si128: Ors two i128s together.
505
+ // * _mm_andnot_si128: And-nots two i128s together.
506
+ //
507
+ // * _mm_cmpeq_epi8: Component-wise compares two i8 vectors for equality,
508
+ // filling each lane with 0x00 or 0xff.
509
+ // * _mm_cmpgt_epi8: Same as above, but using > rather than ==.
510
+ //
511
+ // * _mm_loadu_si128: Performs an unaligned load of an i128.
512
+ // * _mm_storeu_si128: Performs an unaligned store of an i128.
513
+ //
514
+ // * _mm_sign_epi8: Retains, negates, or zeroes each i8 lane of the first
515
+ // argument if the corresponding lane of the second
516
+ // argument is positive, negative, or zero, respectively.
517
+ // * _mm_movemask_epi8: Selects the sign bit out of each i8 lane and produces a
518
+ // bitmask consisting of those bits.
519
+ // * _mm_shuffle_epi8: Selects i8s from the first argument, using the low
520
+ // four bits of each i8 lane in the second argument as
521
+ // indices.
320
522
 
321
523
  // https://github.com/abseil/abseil-cpp/issues/209
322
524
  // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87853
@@ -345,30 +547,32 @@ struct GroupSse2Impl {
345
547
  BitMask<uint32_t, kWidth> Match(h2_t hash) const {
346
548
  auto match = _mm_set1_epi8(hash);
347
549
  return BitMask<uint32_t, kWidth>(
348
- _mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl)));
550
+ static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
349
551
  }
350
552
 
351
553
  // Returns a bitmask representing the positions of empty slots.
352
- BitMask<uint32_t, kWidth> MatchEmpty() const {
353
- #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
354
- // This only works because kEmpty is -128.
355
- return BitMask<uint32_t, kWidth>(
356
- _mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl)));
554
+ NonIterableBitMask<uint32_t, kWidth> MaskEmpty() const {
555
+ #ifdef ABSL_INTERNAL_HAVE_SSSE3
556
+ // This only works because ctrl_t::kEmpty is -128.
557
+ return NonIterableBitMask<uint32_t, kWidth>(
558
+ static_cast<uint32_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
357
559
  #else
358
- return Match(static_cast<h2_t>(kEmpty));
560
+ auto match = _mm_set1_epi8(static_cast<h2_t>(ctrl_t::kEmpty));
561
+ return NonIterableBitMask<uint32_t, kWidth>(
562
+ static_cast<uint32_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
359
563
  #endif
360
564
  }
361
565
 
362
566
  // Returns a bitmask representing the positions of empty or deleted slots.
363
- BitMask<uint32_t, kWidth> MatchEmptyOrDeleted() const {
364
- auto special = _mm_set1_epi8(kSentinel);
365
- return BitMask<uint32_t, kWidth>(
366
- _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl)));
567
+ NonIterableBitMask<uint32_t, kWidth> MaskEmptyOrDeleted() const {
568
+ auto special = _mm_set1_epi8(static_cast<uint8_t>(ctrl_t::kSentinel));
569
+ return NonIterableBitMask<uint32_t, kWidth>(static_cast<uint32_t>(
570
+ _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
367
571
  }
368
572
 
369
573
  // Returns the number of trailing empty or deleted elements in the group.
370
574
  uint32_t CountLeadingEmptyOrDeleted() const {
371
- auto special = _mm_set1_epi8(kSentinel);
575
+ auto special = _mm_set1_epi8(static_cast<uint8_t>(ctrl_t::kSentinel));
372
576
  return TrailingZeros(static_cast<uint32_t>(
373
577
  _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl)) + 1));
374
578
  }
@@ -376,7 +580,7 @@ struct GroupSse2Impl {
376
580
  void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
377
581
  auto msbs = _mm_set1_epi8(static_cast<char>(-128));
378
582
  auto x126 = _mm_set1_epi8(126);
379
- #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
583
+ #ifdef ABSL_INTERNAL_HAVE_SSSE3
380
584
  auto res = _mm_or_si128(_mm_shuffle_epi8(x126, ctrl), msbs);
381
585
  #else
382
586
  auto zero = _mm_setzero_si128();
@@ -390,6 +594,63 @@ struct GroupSse2Impl {
390
594
  };
391
595
  #endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
392
596
 
597
+ #if defined(ABSL_INTERNAL_HAVE_ARM_NEON) && defined(ABSL_IS_LITTLE_ENDIAN)
598
+ struct GroupAArch64Impl {
599
+ static constexpr size_t kWidth = 8;
600
+
601
+ explicit GroupAArch64Impl(const ctrl_t* pos) {
602
+ ctrl = vld1_u8(reinterpret_cast<const uint8_t*>(pos));
603
+ }
604
+
605
+ BitMask<uint64_t, kWidth, 3> Match(h2_t hash) const {
606
+ uint8x8_t dup = vdup_n_u8(hash);
607
+ auto mask = vceq_u8(ctrl, dup);
608
+ constexpr uint64_t msbs = 0x8080808080808080ULL;
609
+ return BitMask<uint64_t, kWidth, 3>(
610
+ vget_lane_u64(vreinterpret_u64_u8(mask), 0) & msbs);
611
+ }
612
+
613
+ NonIterableBitMask<uint64_t, kWidth, 3> MaskEmpty() const {
614
+ uint64_t mask =
615
+ vget_lane_u64(vreinterpret_u64_u8(
616
+ vceq_s8(vdup_n_s8(static_cast<h2_t>(ctrl_t::kEmpty)),
617
+ vreinterpret_s8_u8(ctrl))),
618
+ 0);
619
+ return NonIterableBitMask<uint64_t, kWidth, 3>(mask);
620
+ }
621
+
622
+ NonIterableBitMask<uint64_t, kWidth, 3> MaskEmptyOrDeleted() const {
623
+ uint64_t mask =
624
+ vget_lane_u64(vreinterpret_u64_u8(vcgt_s8(
625
+ vdup_n_s8(static_cast<int8_t>(ctrl_t::kSentinel)),
626
+ vreinterpret_s8_u8(ctrl))),
627
+ 0);
628
+ return NonIterableBitMask<uint64_t, kWidth, 3>(mask);
629
+ }
630
+
631
+ uint32_t CountLeadingEmptyOrDeleted() const {
632
+ uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(ctrl), 0);
633
+ // ctrl | ~(ctrl >> 7) will have the lowest bit set to zero for kEmpty and
634
+ // kDeleted. We lower all other bits and count number of trailing zeros.
635
+ // Clang and GCC optimize countr_zero to rbit+clz without any check for 0,
636
+ // so we should be fine.
637
+ constexpr uint64_t bits = 0x0101010101010101ULL;
638
+ return countr_zero((mask | ~(mask >> 7)) & bits) >> 3;
639
+ }
640
+
641
+ void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
642
+ uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(ctrl), 0);
643
+ constexpr uint64_t msbs = 0x8080808080808080ULL;
644
+ constexpr uint64_t lsbs = 0x0101010101010101ULL;
645
+ auto x = mask & msbs;
646
+ auto res = (~x + (x >> 7)) & ~lsbs;
647
+ little_endian::Store64(dst, res);
648
+ }
649
+
650
+ uint8x8_t ctrl;
651
+ };
652
+ #endif // ABSL_INTERNAL_HAVE_ARM_NEON && ABSL_IS_LITTLE_ENDIAN
653
+
393
654
  struct GroupPortableImpl {
394
655
  static constexpr size_t kWidth = 8;
395
656
 
@@ -403,7 +664,7 @@ struct GroupPortableImpl {
403
664
  //
404
665
  // Caveat: there are false positives but:
405
666
  // - they only occur if there is a real match
406
- // - they never occur on kEmpty, kDeleted, kSentinel
667
+ // - they never occur on ctrl_t::kEmpty, ctrl_t::kDeleted, ctrl_t::kSentinel
407
668
  // - they will be handled gracefully by subsequent checks in code
408
669
  //
409
670
  // Example:
@@ -416,19 +677,23 @@ struct GroupPortableImpl {
416
677
  return BitMask<uint64_t, kWidth, 3>((x - lsbs) & ~x & msbs);
417
678
  }
418
679
 
419
- BitMask<uint64_t, kWidth, 3> MatchEmpty() const {
680
+ NonIterableBitMask<uint64_t, kWidth, 3> MaskEmpty() const {
420
681
  constexpr uint64_t msbs = 0x8080808080808080ULL;
421
- return BitMask<uint64_t, kWidth, 3>((ctrl & (~ctrl << 6)) & msbs);
682
+ return NonIterableBitMask<uint64_t, kWidth, 3>((ctrl & (~ctrl << 6)) &
683
+ msbs);
422
684
  }
423
685
 
424
- BitMask<uint64_t, kWidth, 3> MatchEmptyOrDeleted() const {
686
+ NonIterableBitMask<uint64_t, kWidth, 3> MaskEmptyOrDeleted() const {
425
687
  constexpr uint64_t msbs = 0x8080808080808080ULL;
426
- return BitMask<uint64_t, kWidth, 3>((ctrl & (~ctrl << 7)) & msbs);
688
+ return NonIterableBitMask<uint64_t, kWidth, 3>((ctrl & (~ctrl << 7)) &
689
+ msbs);
427
690
  }
428
691
 
429
692
  uint32_t CountLeadingEmptyOrDeleted() const {
430
- constexpr uint64_t gaps = 0x00FEFEFEFEFEFEFEULL;
431
- return (TrailingZeros(((~ctrl & (ctrl >> 7)) | gaps) + 1) + 7) >> 3;
693
+ // ctrl | ~(ctrl >> 7) will have the lowest bit set to zero for kEmpty and
694
+ // kDeleted. We lower all other bits and count number of trailing zeros.
695
+ constexpr uint64_t bits = 0x0101010101010101ULL;
696
+ return countr_zero((ctrl | ~(ctrl >> 7)) & bits) >> 3;
432
697
  }
433
698
 
434
699
  void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
@@ -442,28 +707,40 @@ struct GroupPortableImpl {
442
707
  uint64_t ctrl;
443
708
  };
444
709
 
445
- #if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
710
+ #ifdef ABSL_INTERNAL_HAVE_SSE2
446
711
  using Group = GroupSse2Impl;
712
+ #elif defined(ABSL_INTERNAL_HAVE_ARM_NEON) && defined(ABSL_IS_LITTLE_ENDIAN)
713
+ using Group = GroupAArch64Impl;
447
714
  #else
448
715
  using Group = GroupPortableImpl;
449
716
  #endif
450
717
 
718
+ // Returns he number of "cloned control bytes".
719
+ //
720
+ // This is the number of control bytes that are present both at the beginning
721
+ // of the control byte array and at the end, such that we can create a
722
+ // `Group::kWidth`-width probe window starting from any control byte.
723
+ constexpr size_t NumClonedBytes() { return Group::kWidth - 1; }
724
+
451
725
  template <class Policy, class Hash, class Eq, class Alloc>
452
726
  class raw_hash_set;
453
727
 
728
+ // Returns whether `n` is a valid capacity (i.e., number of slots).
729
+ //
730
+ // A valid capacity is a non-zero integer `2^m - 1`.
454
731
  inline bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; }
455
732
 
733
+ // Applies the following mapping to every byte in the control array:
734
+ // * kDeleted -> kEmpty
735
+ // * kEmpty -> kEmpty
736
+ // * _ -> kDeleted
456
737
  // PRECONDITION:
457
738
  // IsValidCapacity(capacity)
458
- // ctrl[capacity] == kSentinel
459
- // ctrl[i] != kSentinel for all i < capacity
460
- // Applies mapping for every byte in ctrl:
461
- // DELETED -> EMPTY
462
- // EMPTY -> EMPTY
463
- // FULL -> DELETED
739
+ // ctrl[capacity] == ctrl_t::kSentinel
740
+ // ctrl[i] != ctrl_t::kSentinel for all i < capacity
464
741
  void ConvertDeletedToEmptyAndFullToDeleted(ctrl_t* ctrl, size_t capacity);
465
742
 
466
- // Rounds up the capacity to the next power of 2 minus 1, with a minimum of 1.
743
+ // Converts `n` into the next valid capacity, per `IsValidCapacity`.
467
744
  inline size_t NormalizeCapacity(size_t n) {
468
745
  return n ? ~size_t{} >> countl_zero(n) : 1;
469
746
  }
@@ -476,8 +753,8 @@ inline size_t NormalizeCapacity(size_t n) {
476
753
  // never need to probe (the whole table fits in one group) so we don't need a
477
754
  // load factor less than 1.
478
755
 
479
- // Given `capacity` of the table, returns the size (i.e. number of full slots)
480
- // at which we should grow the capacity.
756
+ // Given `capacity`, applies the load factor; i.e., it returns the maximum
757
+ // number of values we should put into the table before a resizing rehash.
481
758
  inline size_t CapacityToGrowth(size_t capacity) {
482
759
  assert(IsValidCapacity(capacity));
483
760
  // `capacity*7/8`
@@ -487,8 +764,12 @@ inline size_t CapacityToGrowth(size_t capacity) {
487
764
  }
488
765
  return capacity - capacity / 8;
489
766
  }
490
- // From desired "growth" to a lowerbound of the necessary capacity.
491
- // Might not be a valid one and requires NormalizeCapacity().
767
+
768
+ // Given `growth`, "unapplies" the load factor to find how large the capacity
769
+ // should be to stay within the load factor.
770
+ //
771
+ // This might not be a valid capacity and `NormalizeCapacity()` should be
772
+ // called on this.
492
773
  inline size_t GrowthToLowerboundCapacity(size_t growth) {
493
774
  // `growth*8/7`
494
775
  if (Group::kWidth == 8 && growth == 7) {
@@ -498,16 +779,31 @@ inline size_t GrowthToLowerboundCapacity(size_t growth) {
498
779
  return growth + static_cast<size_t>((static_cast<int64_t>(growth) - 1) / 7);
499
780
  }
500
781
 
501
- inline void AssertIsFull(ctrl_t* ctrl) {
502
- ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) &&
503
- "Invalid operation on iterator. The element might have "
504
- "been erased, or the table might have rehashed.");
782
+ template <class InputIter>
783
+ size_t SelectBucketCountForIterRange(InputIter first, InputIter last,
784
+ size_t bucket_count) {
785
+ if (bucket_count != 0) {
786
+ return bucket_count;
787
+ }
788
+ using InputIterCategory =
789
+ typename std::iterator_traits<InputIter>::iterator_category;
790
+ if (std::is_base_of<std::random_access_iterator_tag,
791
+ InputIterCategory>::value) {
792
+ return GrowthToLowerboundCapacity(
793
+ static_cast<size_t>(std::distance(first, last)));
794
+ }
795
+ return 0;
505
796
  }
506
797
 
798
+ #define ABSL_INTERNAL_ASSERT_IS_FULL(ctrl, msg) \
799
+ ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) && msg)
800
+
507
801
  inline void AssertIsValid(ctrl_t* ctrl) {
508
- ABSL_HARDENING_ASSERT((ctrl == nullptr || IsFull(*ctrl)) &&
509
- "Invalid operation on iterator. The element might have "
510
- "been erased, or the table might have rehashed.");
802
+ ABSL_HARDENING_ASSERT(
803
+ (ctrl == nullptr || IsFull(*ctrl)) &&
804
+ "Invalid operation on iterator. The element might have "
805
+ "been erased, the table might have rehashed, or this may "
806
+ "be an end() iterator.");
511
807
  }
512
808
 
513
809
  struct FindInfo {
@@ -515,42 +811,40 @@ struct FindInfo {
515
811
  size_t probe_length;
516
812
  };
517
813
 
518
- // The representation of the object has two modes:
519
- // - small: For capacities < kWidth-1
520
- // - large: For the rest.
814
+ // Whether a table is "small". A small table fits entirely into a probing
815
+ // group, i.e., has a capacity < `Group::kWidth`.
521
816
  //
522
- // Differences:
523
- // - In small mode we are able to use the whole capacity. The extra control
524
- // bytes give us at least one "empty" control byte to stop the iteration.
525
- // This is important to make 1 a valid capacity.
817
+ // In small mode we are able to use the whole capacity. The extra control
818
+ // bytes give us at least one "empty" control byte to stop the iteration.
819
+ // This is important to make 1 a valid capacity.
526
820
  //
527
- // - In small mode only the first `capacity()` control bytes after the
528
- // sentinel are valid. The rest contain dummy kEmpty values that do not
529
- // represent a real slot. This is important to take into account on
530
- // find_first_non_full(), where we never try ShouldInsertBackwards() for
531
- // small tables.
821
+ // In small mode only the first `capacity` control bytes after the sentinel
822
+ // are valid. The rest contain dummy ctrl_t::kEmpty values that do not
823
+ // represent a real slot. This is important to take into account on
824
+ // `find_first_non_full()`, where we never try
825
+ // `ShouldInsertBackwards()` for small tables.
532
826
  inline bool is_small(size_t capacity) { return capacity < Group::kWidth - 1; }
533
827
 
534
- inline probe_seq<Group::kWidth> probe(ctrl_t* ctrl, size_t hash,
828
+ // Begins a probing operation on `ctrl`, using `hash`.
829
+ inline probe_seq<Group::kWidth> probe(const ctrl_t* ctrl, size_t hash,
535
830
  size_t capacity) {
536
831
  return probe_seq<Group::kWidth>(H1(hash, ctrl), capacity);
537
832
  }
538
833
 
539
- // Probes the raw_hash_set with the probe sequence for hash and returns the
540
- // pointer to the first empty or deleted slot.
541
- // NOTE: this function must work with tables having both kEmpty and kDelete
542
- // in one group. Such tables appears during drop_deletes_without_resize.
834
+ // Probes an array of control bits using a probe sequence derived from `hash`,
835
+ // and returns the offset corresponding to the first deleted or empty slot.
836
+ //
837
+ // Behavior when the entire table is full is undefined.
543
838
  //
544
- // This function is very useful when insertions happen and:
545
- // - the input is already a set
546
- // - there are enough slots
547
- // - the element with the hash is not in the table
548
- inline FindInfo find_first_non_full(ctrl_t* ctrl, size_t hash,
839
+ // NOTE: this function must work with tables having both empty and deleted
840
+ // slots in the same group. Such tables appear during `erase()`.
841
+ template <typename = void>
842
+ inline FindInfo find_first_non_full(const ctrl_t* ctrl, size_t hash,
549
843
  size_t capacity) {
550
844
  auto seq = probe(ctrl, hash, capacity);
551
845
  while (true) {
552
846
  Group g{ctrl + seq.offset()};
553
- auto mask = g.MatchEmptyOrDeleted();
847
+ auto mask = g.MaskEmptyOrDeleted();
554
848
  if (mask) {
555
849
  #if !defined(NDEBUG)
556
850
  // We want to add entropy even when ASLR is not enabled.
@@ -564,10 +858,66 @@ inline FindInfo find_first_non_full(ctrl_t* ctrl, size_t hash,
564
858
  return {seq.offset(mask.LowestBitSet()), seq.index()};
565
859
  }
566
860
  seq.next();
567
- assert(seq.index() < capacity && "full table!");
861
+ assert(seq.index() <= capacity && "full table!");
862
+ }
863
+ }
864
+
865
+ // Extern template for inline function keep possibility of inlining.
866
+ // When compiler decided to not inline, no symbols will be added to the
867
+ // corresponding translation unit.
868
+ extern template FindInfo find_first_non_full(const ctrl_t*, size_t, size_t);
869
+
870
+ // Sets `ctrl` to `{kEmpty, kSentinel, ..., kEmpty}`, marking the entire
871
+ // array as marked as empty.
872
+ inline void ResetCtrl(size_t capacity, ctrl_t* ctrl, const void* slot,
873
+ size_t slot_size) {
874
+ std::memset(ctrl, static_cast<int8_t>(ctrl_t::kEmpty),
875
+ capacity + 1 + NumClonedBytes());
876
+ ctrl[capacity] = ctrl_t::kSentinel;
877
+ SanitizerPoisonMemoryRegion(slot, slot_size * capacity);
878
+ }
879
+
880
+ // Sets `ctrl[i]` to `h`.
881
+ //
882
+ // Unlike setting it directly, this function will perform bounds checks and
883
+ // mirror the value to the cloned tail if necessary.
884
+ inline void SetCtrl(size_t i, ctrl_t h, size_t capacity, ctrl_t* ctrl,
885
+ const void* slot, size_t slot_size) {
886
+ assert(i < capacity);
887
+
888
+ auto* slot_i = static_cast<const char*>(slot) + i * slot_size;
889
+ if (IsFull(h)) {
890
+ SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
891
+ } else {
892
+ SanitizerPoisonMemoryRegion(slot_i, slot_size);
568
893
  }
894
+
895
+ ctrl[i] = h;
896
+ ctrl[((i - NumClonedBytes()) & capacity) + (NumClonedBytes() & capacity)] = h;
569
897
  }
570
898
 
899
+ // Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
900
+ inline void SetCtrl(size_t i, h2_t h, size_t capacity, ctrl_t* ctrl,
901
+ const void* slot, size_t slot_size) {
902
+ SetCtrl(i, static_cast<ctrl_t>(h), capacity, ctrl, slot, slot_size);
903
+ }
904
+
905
+ // Given the capacity of a table, computes the offset (from the start of the
906
+ // backing allocation) at which the slots begin.
907
+ inline size_t SlotOffset(size_t capacity, size_t slot_align) {
908
+ assert(IsValidCapacity(capacity));
909
+ const size_t num_control_bytes = capacity + 1 + NumClonedBytes();
910
+ return (num_control_bytes + slot_align - 1) & (~slot_align + 1);
911
+ }
912
+
913
+ // Given the capacity of a table, computes the total size of the backing
914
+ // array.
915
+ inline size_t AllocSize(size_t capacity, size_t slot_size, size_t slot_align) {
916
+ return SlotOffset(capacity, slot_align) + capacity * slot_size;
917
+ }
918
+
919
+ // A SwissTable.
920
+ //
571
921
  // Policy: a policy defines how to perform different operations on
572
922
  // the slots of the hashtable (see hash_policy_traits.h for the full interface
573
923
  // of policy).
@@ -624,13 +974,6 @@ class raw_hash_set {
624
974
  auto KeyTypeCanBeHashed(const Hash& h, const key_type& k) -> decltype(h(k));
625
975
  auto KeyTypeCanBeEq(const Eq& eq, const key_type& k) -> decltype(eq(k, k));
626
976
 
627
- using Layout = absl::container_internal::Layout<ctrl_t, slot_type>;
628
-
629
- static Layout MakeLayout(size_t capacity) {
630
- assert(IsValidCapacity(capacity));
631
- return Layout(capacity + Group::kWidth + 1, capacity);
632
- }
633
-
634
977
  using AllocTraits = absl::allocator_traits<allocator_type>;
635
978
  using SlotAlloc = typename absl::allocator_traits<
636
979
  allocator_type>::template rebind_alloc<slot_type>;
@@ -689,16 +1032,22 @@ class raw_hash_set {
689
1032
 
690
1033
  // PRECONDITION: not an end() iterator.
691
1034
  reference operator*() const {
692
- AssertIsFull(ctrl_);
1035
+ ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
1036
+ "operator*() called on invalid iterator.");
693
1037
  return PolicyTraits::element(slot_);
694
1038
  }
695
1039
 
696
1040
  // PRECONDITION: not an end() iterator.
697
- pointer operator->() const { return &operator*(); }
1041
+ pointer operator->() const {
1042
+ ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
1043
+ "operator-> called on invalid iterator.");
1044
+ return &operator*();
1045
+ }
698
1046
 
699
1047
  // PRECONDITION: not an end() iterator.
700
1048
  iterator& operator++() {
701
- AssertIsFull(ctrl_);
1049
+ ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
1050
+ "operator++ called on invalid iterator.");
702
1051
  ++ctrl_;
703
1052
  ++slot_;
704
1053
  skip_empty_or_deleted();
@@ -724,16 +1073,20 @@ class raw_hash_set {
724
1073
  iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {
725
1074
  // This assumption helps the compiler know that any non-end iterator is
726
1075
  // not equal to any end iterator.
727
- ABSL_INTERNAL_ASSUME(ctrl != nullptr);
1076
+ ABSL_ASSUME(ctrl != nullptr);
728
1077
  }
729
1078
 
1079
+ // Fixes up `ctrl_` to point to a full by advancing it and `slot_` until
1080
+ // they reach one.
1081
+ //
1082
+ // If a sentinel is reached, we null both of them out instead.
730
1083
  void skip_empty_or_deleted() {
731
1084
  while (IsEmptyOrDeleted(*ctrl_)) {
732
1085
  uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
733
1086
  ctrl_ += shift;
734
1087
  slot_ += shift;
735
1088
  }
736
- if (ABSL_PREDICT_FALSE(*ctrl_ == kSentinel)) ctrl_ = nullptr;
1089
+ if (ABSL_PREDICT_FALSE(*ctrl_ == ctrl_t::kSentinel)) ctrl_ = nullptr;
737
1090
  }
738
1091
 
739
1092
  ctrl_t* ctrl_ = nullptr;
@@ -814,7 +1167,8 @@ class raw_hash_set {
814
1167
  raw_hash_set(InputIter first, InputIter last, size_t bucket_count = 0,
815
1168
  const hasher& hash = hasher(), const key_equal& eq = key_equal(),
816
1169
  const allocator_type& alloc = allocator_type())
817
- : raw_hash_set(bucket_count, hash, eq, alloc) {
1170
+ : raw_hash_set(SelectBucketCountForIterRange(first, last, bucket_count),
1171
+ hash, eq, alloc) {
818
1172
  insert(first, last);
819
1173
  }
820
1174
 
@@ -902,7 +1256,8 @@ class raw_hash_set {
902
1256
  for (const auto& v : that) {
903
1257
  const size_t hash = PolicyTraits::apply(HashElement{hash_ref()}, v);
904
1258
  auto target = find_first_non_full(ctrl_, hash, capacity_);
905
- set_ctrl(target.offset, H2(hash));
1259
+ SetCtrl(target.offset, H2(hash), capacity_, ctrl_, slots_,
1260
+ sizeof(slot_type));
906
1261
  emplace_at(target.offset, v);
907
1262
  infoz().RecordInsert(hash, target.probe_length);
908
1263
  }
@@ -998,6 +1353,8 @@ class raw_hash_set {
998
1353
  // past that we simply deallocate the array.
999
1354
  if (capacity_ > 127) {
1000
1355
  destroy_slots();
1356
+
1357
+ infoz().RecordClearedReservation();
1001
1358
  } else if (capacity_) {
1002
1359
  for (size_t i = 0; i != capacity_; ++i) {
1003
1360
  if (IsFull(ctrl_[i])) {
@@ -1005,7 +1362,7 @@ class raw_hash_set {
1005
1362
  }
1006
1363
  }
1007
1364
  size_ = 0;
1008
- reset_ctrl();
1365
+ ResetCtrl(capacity_, ctrl_, slots_, sizeof(slot_type));
1009
1366
  reset_growth_left();
1010
1367
  }
1011
1368
  assert(empty());
@@ -1019,8 +1376,7 @@ class raw_hash_set {
1019
1376
  // m.insert(std::make_pair("abc", 42));
1020
1377
  // TODO(cheshire): A type alias T2 is introduced as a workaround for the nvcc
1021
1378
  // bug.
1022
- template <class T, RequiresInsertable<T> = 0,
1023
- class T2 = T,
1379
+ template <class T, RequiresInsertable<T> = 0, class T2 = T,
1024
1380
  typename std::enable_if<IsDecomposable<T2>::value, int>::type = 0,
1025
1381
  T* = nullptr>
1026
1382
  std::pair<iterator, bool> insert(T&& value) {
@@ -1240,7 +1596,8 @@ class raw_hash_set {
1240
1596
  // This overload is necessary because otherwise erase<K>(const K&) would be
1241
1597
  // a better match if non-const iterator is passed as an argument.
1242
1598
  void erase(iterator it) {
1243
- AssertIsFull(it.ctrl_);
1599
+ ABSL_INTERNAL_ASSERT_IS_FULL(it.ctrl_,
1600
+ "erase() called on invalid iterator.");
1244
1601
  PolicyTraits::destroy(&alloc_ref(), it.slot_);
1245
1602
  erase_meta_only(it);
1246
1603
  }
@@ -1274,7 +1631,8 @@ class raw_hash_set {
1274
1631
  }
1275
1632
 
1276
1633
  node_type extract(const_iterator position) {
1277
- AssertIsFull(position.inner_.ctrl_);
1634
+ ABSL_INTERNAL_ASSERT_IS_FULL(position.inner_.ctrl_,
1635
+ "extract() called on invalid iterator.");
1278
1636
  auto node =
1279
1637
  CommonAccess::Transfer<node_type>(alloc_ref(), position.inner_.slot_);
1280
1638
  erase_meta_only(position);
@@ -1311,21 +1669,31 @@ class raw_hash_set {
1311
1669
  if (n == 0 && size_ == 0) {
1312
1670
  destroy_slots();
1313
1671
  infoz().RecordStorageChanged(0, 0);
1672
+ infoz().RecordClearedReservation();
1314
1673
  return;
1315
1674
  }
1675
+
1316
1676
  // bitor is a faster way of doing `max` here. We will round up to the next
1317
1677
  // power-of-2-minus-1, so bitor is good enough.
1318
1678
  auto m = NormalizeCapacity(n | GrowthToLowerboundCapacity(size()));
1319
1679
  // n == 0 unconditionally rehashes as per the standard.
1320
1680
  if (n == 0 || m > capacity_) {
1321
1681
  resize(m);
1682
+
1683
+ // This is after resize, to ensure that we have completed the allocation
1684
+ // and have potentially sampled the hashtable.
1685
+ infoz().RecordReservation(n);
1322
1686
  }
1323
1687
  }
1324
1688
 
1325
1689
  void reserve(size_t n) {
1326
- size_t m = GrowthToLowerboundCapacity(n);
1327
- if (m > capacity_) {
1690
+ if (n > size() + growth_left()) {
1691
+ size_t m = GrowthToLowerboundCapacity(n);
1328
1692
  resize(NormalizeCapacity(m));
1693
+
1694
+ // This is after resize, to ensure that we have completed the allocation
1695
+ // and have potentially sampled the hashtable.
1696
+ infoz().RecordReservation(n);
1329
1697
  }
1330
1698
  }
1331
1699
 
@@ -1351,11 +1719,13 @@ class raw_hash_set {
1351
1719
  template <class K = key_type>
1352
1720
  void prefetch(const key_arg<K>& key) const {
1353
1721
  (void)key;
1354
- #if defined(__GNUC__)
1722
+ // Avoid probing if we won't be able to prefetch the addresses received.
1723
+ #ifdef ABSL_INTERNAL_HAVE_PREFETCH
1724
+ prefetch_heap_block();
1355
1725
  auto seq = probe(ctrl_, hash_ref()(key), capacity_);
1356
- __builtin_prefetch(static_cast<const void*>(ctrl_ + seq.offset()));
1357
- __builtin_prefetch(static_cast<const void*>(slots_ + seq.offset()));
1358
- #endif // __GNUC__
1726
+ base_internal::PrefetchT0(ctrl_ + seq.offset());
1727
+ base_internal::PrefetchT0(slots_ + seq.offset());
1728
+ #endif // ABSL_INTERNAL_HAVE_PREFETCH
1359
1729
  }
1360
1730
 
1361
1731
  // The API of find() has two extensions.
@@ -1370,19 +1740,20 @@ class raw_hash_set {
1370
1740
  auto seq = probe(ctrl_, hash, capacity_);
1371
1741
  while (true) {
1372
1742
  Group g{ctrl_ + seq.offset()};
1373
- for (int i : g.Match(H2(hash))) {
1743
+ for (uint32_t i : g.Match(H2(hash))) {
1374
1744
  if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
1375
1745
  EqualElement<K>{key, eq_ref()},
1376
1746
  PolicyTraits::element(slots_ + seq.offset(i)))))
1377
1747
  return iterator_at(seq.offset(i));
1378
1748
  }
1379
- if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return end();
1749
+ if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
1380
1750
  seq.next();
1381
- assert(seq.index() < capacity_ && "full table!");
1751
+ assert(seq.index() <= capacity_ && "full table!");
1382
1752
  }
1383
1753
  }
1384
1754
  template <class K = key_type>
1385
1755
  iterator find(const key_arg<K>& key) {
1756
+ prefetch_heap_block();
1386
1757
  return find(key, hash_ref()(key));
1387
1758
  }
1388
1759
 
@@ -1392,6 +1763,7 @@ class raw_hash_set {
1392
1763
  }
1393
1764
  template <class K = key_type>
1394
1765
  const_iterator find(const key_arg<K>& key) const {
1766
+ prefetch_heap_block();
1395
1767
  return find(key, hash_ref()(key));
1396
1768
  }
1397
1769
 
@@ -1441,6 +1813,14 @@ class raw_hash_set {
1441
1813
  return !(a == b);
1442
1814
  }
1443
1815
 
1816
+ template <typename H>
1817
+ friend typename std::enable_if<H::template is_hashable<value_type>::value,
1818
+ H>::type
1819
+ AbslHashValue(H h, const raw_hash_set& s) {
1820
+ return H::combine(H::combine_unordered(std::move(h), s.begin(), s.end()),
1821
+ s.size());
1822
+ }
1823
+
1444
1824
  friend void swap(raw_hash_set& a,
1445
1825
  raw_hash_set& b) noexcept(noexcept(a.swap(b))) {
1446
1826
  a.swap(b);
@@ -1506,17 +1886,17 @@ class raw_hash_set {
1506
1886
  slot_type&& slot;
1507
1887
  };
1508
1888
 
1509
- // "erases" the object from the container, except that it doesn't actually
1510
- // destroy the object. It only updates all the metadata of the class.
1511
- // This can be used in conjunction with Policy::transfer to move the object to
1512
- // another place.
1889
+ // Erases, but does not destroy, the value pointed to by `it`.
1890
+ //
1891
+ // This merely updates the pertinent control byte. This can be used in
1892
+ // conjunction with Policy::transfer to move the object to another place.
1513
1893
  void erase_meta_only(const_iterator it) {
1514
1894
  assert(IsFull(*it.inner_.ctrl_) && "erasing a dangling iterator");
1515
1895
  --size_;
1516
- const size_t index = it.inner_.ctrl_ - ctrl_;
1896
+ const size_t index = static_cast<size_t>(it.inner_.ctrl_ - ctrl_);
1517
1897
  const size_t index_before = (index - Group::kWidth) & capacity_;
1518
- const auto empty_after = Group(it.inner_.ctrl_).MatchEmpty();
1519
- const auto empty_before = Group(ctrl_ + index_before).MatchEmpty();
1898
+ const auto empty_after = Group(it.inner_.ctrl_).MaskEmpty();
1899
+ const auto empty_before = Group(ctrl_ + index_before).MaskEmpty();
1520
1900
 
1521
1901
  // We count how many consecutive non empties we have to the right and to the
1522
1902
  // left of `it`. If the sum is >= kWidth then there is at least one probe
@@ -1526,11 +1906,17 @@ class raw_hash_set {
1526
1906
  static_cast<size_t>(empty_after.TrailingZeros() +
1527
1907
  empty_before.LeadingZeros()) < Group::kWidth;
1528
1908
 
1529
- set_ctrl(index, was_never_full ? kEmpty : kDeleted);
1909
+ SetCtrl(index, was_never_full ? ctrl_t::kEmpty : ctrl_t::kDeleted,
1910
+ capacity_, ctrl_, slots_, sizeof(slot_type));
1530
1911
  growth_left() += was_never_full;
1531
1912
  infoz().RecordErase();
1532
1913
  }
1533
1914
 
1915
+ // Allocates a backing array for `self` and initializes its control bytes.
1916
+ // This reads `capacity_` and updates all other fields based on the result of
1917
+ // the allocation.
1918
+ //
1919
+ // This does not free the currently held array; `capacity_` must be nonzero.
1534
1920
  void initialize_slots() {
1535
1921
  assert(capacity_);
1536
1922
  // Folks with custom allocators often make unwarranted assumptions about the
@@ -1545,19 +1931,24 @@ class raw_hash_set {
1545
1931
  // bound more carefully.
1546
1932
  if (std::is_same<SlotAlloc, std::allocator<slot_type>>::value &&
1547
1933
  slots_ == nullptr) {
1548
- infoz() = Sample();
1934
+ infoz() = Sample(sizeof(slot_type));
1549
1935
  }
1550
1936
 
1551
- auto layout = MakeLayout(capacity_);
1552
- char* mem = static_cast<char*>(
1553
- Allocate<Layout::Alignment()>(&alloc_ref(), layout.AllocSize()));
1554
- ctrl_ = reinterpret_cast<ctrl_t*>(layout.template Pointer<0>(mem));
1555
- slots_ = layout.template Pointer<1>(mem);
1556
- reset_ctrl();
1937
+ char* mem = static_cast<char*>(Allocate<alignof(slot_type)>(
1938
+ &alloc_ref(),
1939
+ AllocSize(capacity_, sizeof(slot_type), alignof(slot_type))));
1940
+ ctrl_ = reinterpret_cast<ctrl_t*>(mem);
1941
+ slots_ = reinterpret_cast<slot_type*>(
1942
+ mem + SlotOffset(capacity_, alignof(slot_type)));
1943
+ ResetCtrl(capacity_, ctrl_, slots_, sizeof(slot_type));
1557
1944
  reset_growth_left();
1558
1945
  infoz().RecordStorageChanged(size_, capacity_);
1559
1946
  }
1560
1947
 
1948
+ // Destroys all slots in the backing array, frees the backing array, and
1949
+ // clears all top-level book-keeping data.
1950
+ //
1951
+ // This essentially implements `map = raw_hash_set();`.
1561
1952
  void destroy_slots() {
1562
1953
  if (!capacity_) return;
1563
1954
  for (size_t i = 0; i != capacity_; ++i) {
@@ -1565,10 +1956,12 @@ class raw_hash_set {
1565
1956
  PolicyTraits::destroy(&alloc_ref(), slots_ + i);
1566
1957
  }
1567
1958
  }
1568
- auto layout = MakeLayout(capacity_);
1959
+
1569
1960
  // Unpoison before returning the memory to the allocator.
1570
1961
  SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
1571
- Deallocate<Layout::Alignment()>(&alloc_ref(), ctrl_, layout.AllocSize());
1962
+ Deallocate<alignof(slot_type)>(
1963
+ &alloc_ref(), ctrl_,
1964
+ AllocSize(capacity_, sizeof(slot_type), alignof(slot_type)));
1572
1965
  ctrl_ = EmptyGroup();
1573
1966
  slots_ = nullptr;
1574
1967
  size_ = 0;
@@ -1592,20 +1985,23 @@ class raw_hash_set {
1592
1985
  auto target = find_first_non_full(ctrl_, hash, capacity_);
1593
1986
  size_t new_i = target.offset;
1594
1987
  total_probe_length += target.probe_length;
1595
- set_ctrl(new_i, H2(hash));
1988
+ SetCtrl(new_i, H2(hash), capacity_, ctrl_, slots_, sizeof(slot_type));
1596
1989
  PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, old_slots + i);
1597
1990
  }
1598
1991
  }
1599
1992
  if (old_capacity) {
1600
1993
  SanitizerUnpoisonMemoryRegion(old_slots,
1601
1994
  sizeof(slot_type) * old_capacity);
1602
- auto layout = MakeLayout(old_capacity);
1603
- Deallocate<Layout::Alignment()>(&alloc_ref(), old_ctrl,
1604
- layout.AllocSize());
1995
+ Deallocate<alignof(slot_type)>(
1996
+ &alloc_ref(), old_ctrl,
1997
+ AllocSize(old_capacity, sizeof(slot_type), alignof(slot_type)));
1605
1998
  }
1606
1999
  infoz().RecordRehash(total_probe_length);
1607
2000
  }
1608
2001
 
2002
+ // Prunes control bytes to remove as many tombstones as possible.
2003
+ //
2004
+ // See the comment on `rehash_and_grow_if_necessary()`.
1609
2005
  void drop_deletes_without_resize() ABSL_ATTRIBUTE_NOINLINE {
1610
2006
  assert(IsValidCapacity(capacity_));
1611
2007
  assert(!is_small(capacity_));
@@ -1631,35 +2027,35 @@ class raw_hash_set {
1631
2027
  slot_type* slot = reinterpret_cast<slot_type*>(&raw);
1632
2028
  for (size_t i = 0; i != capacity_; ++i) {
1633
2029
  if (!IsDeleted(ctrl_[i])) continue;
1634
- size_t hash = PolicyTraits::apply(HashElement{hash_ref()},
1635
- PolicyTraits::element(slots_ + i));
1636
- auto target = find_first_non_full(ctrl_, hash, capacity_);
1637
- size_t new_i = target.offset;
2030
+ const size_t hash = PolicyTraits::apply(
2031
+ HashElement{hash_ref()}, PolicyTraits::element(slots_ + i));
2032
+ const FindInfo target = find_first_non_full(ctrl_, hash, capacity_);
2033
+ const size_t new_i = target.offset;
1638
2034
  total_probe_length += target.probe_length;
1639
2035
 
1640
2036
  // Verify if the old and new i fall within the same group wrt the hash.
1641
2037
  // If they do, we don't need to move the object as it falls already in the
1642
2038
  // best probe we can.
1643
- const auto probe_index = [&](size_t pos) {
1644
- return ((pos - probe(ctrl_, hash, capacity_).offset()) & capacity_) /
1645
- Group::kWidth;
2039
+ const size_t probe_offset = probe(ctrl_, hash, capacity_).offset();
2040
+ const auto probe_index = [probe_offset, this](size_t pos) {
2041
+ return ((pos - probe_offset) & capacity_) / Group::kWidth;
1646
2042
  };
1647
2043
 
1648
2044
  // Element doesn't move.
1649
2045
  if (ABSL_PREDICT_TRUE(probe_index(new_i) == probe_index(i))) {
1650
- set_ctrl(i, H2(hash));
2046
+ SetCtrl(i, H2(hash), capacity_, ctrl_, slots_, sizeof(slot_type));
1651
2047
  continue;
1652
2048
  }
1653
2049
  if (IsEmpty(ctrl_[new_i])) {
1654
2050
  // Transfer element to the empty spot.
1655
- // set_ctrl poisons/unpoisons the slots so we have to call it at the
2051
+ // SetCtrl poisons/unpoisons the slots so we have to call it at the
1656
2052
  // right time.
1657
- set_ctrl(new_i, H2(hash));
2053
+ SetCtrl(new_i, H2(hash), capacity_, ctrl_, slots_, sizeof(slot_type));
1658
2054
  PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, slots_ + i);
1659
- set_ctrl(i, kEmpty);
2055
+ SetCtrl(i, ctrl_t::kEmpty, capacity_, ctrl_, slots_, sizeof(slot_type));
1660
2056
  } else {
1661
2057
  assert(IsDeleted(ctrl_[new_i]));
1662
- set_ctrl(new_i, H2(hash));
2058
+ SetCtrl(new_i, H2(hash), capacity_, ctrl_, slots_, sizeof(slot_type));
1663
2059
  // Until we are done rehashing, DELETED marks previously FULL slots.
1664
2060
  // Swap i and new_i elements.
1665
2061
  PolicyTraits::transfer(&alloc_ref(), slot, slots_ + i);
@@ -1672,11 +2068,58 @@ class raw_hash_set {
1672
2068
  infoz().RecordRehash(total_probe_length);
1673
2069
  }
1674
2070
 
2071
+ // Called whenever the table *might* need to conditionally grow.
2072
+ //
2073
+ // This function is an optimization opportunity to perform a rehash even when
2074
+ // growth is unnecessary, because vacating tombstones is beneficial for
2075
+ // performance in the long-run.
1675
2076
  void rehash_and_grow_if_necessary() {
1676
2077
  if (capacity_ == 0) {
1677
2078
  resize(1);
1678
- } else if (size() <= CapacityToGrowth(capacity()) / 2) {
2079
+ } else if (capacity_ > Group::kWidth &&
2080
+ // Do these calcuations in 64-bit to avoid overflow.
2081
+ size() * uint64_t{32} <= capacity_ * uint64_t{25}) {
1679
2082
  // Squash DELETED without growing if there is enough capacity.
2083
+ //
2084
+ // Rehash in place if the current size is <= 25/32 of capacity_.
2085
+ // Rationale for such a high factor: 1) drop_deletes_without_resize() is
2086
+ // faster than resize, and 2) it takes quite a bit of work to add
2087
+ // tombstones. In the worst case, seems to take approximately 4
2088
+ // insert/erase pairs to create a single tombstone and so if we are
2089
+ // rehashing because of tombstones, we can afford to rehash-in-place as
2090
+ // long as we are reclaiming at least 1/8 the capacity without doing more
2091
+ // than 2X the work. (Where "work" is defined to be size() for rehashing
2092
+ // or rehashing in place, and 1 for an insert or erase.) But rehashing in
2093
+ // place is faster per operation than inserting or even doubling the size
2094
+ // of the table, so we actually afford to reclaim even less space from a
2095
+ // resize-in-place. The decision is to rehash in place if we can reclaim
2096
+ // at about 1/8th of the usable capacity (specifically 3/28 of the
2097
+ // capacity) which means that the total cost of rehashing will be a small
2098
+ // fraction of the total work.
2099
+ //
2100
+ // Here is output of an experiment using the BM_CacheInSteadyState
2101
+ // benchmark running the old case (where we rehash-in-place only if we can
2102
+ // reclaim at least 7/16*capacity_) vs. this code (which rehashes in place
2103
+ // if we can recover 3/32*capacity_).
2104
+ //
2105
+ // Note that although in the worst-case number of rehashes jumped up from
2106
+ // 15 to 190, but the number of operations per second is almost the same.
2107
+ //
2108
+ // Abridged output of running BM_CacheInSteadyState benchmark from
2109
+ // raw_hash_set_benchmark. N is the number of insert/erase operations.
2110
+ //
2111
+ // | OLD (recover >= 7/16 | NEW (recover >= 3/32)
2112
+ // size | N/s LoadFactor NRehashes | N/s LoadFactor NRehashes
2113
+ // 448 | 145284 0.44 18 | 140118 0.44 19
2114
+ // 493 | 152546 0.24 11 | 151417 0.48 28
2115
+ // 538 | 151439 0.26 11 | 151152 0.53 38
2116
+ // 583 | 151765 0.28 11 | 150572 0.57 50
2117
+ // 628 | 150241 0.31 11 | 150853 0.61 66
2118
+ // 672 | 149602 0.33 12 | 150110 0.66 90
2119
+ // 717 | 149998 0.35 12 | 149531 0.70 129
2120
+ // 762 | 149836 0.37 13 | 148559 0.74 190
2121
+ // 807 | 149736 0.39 14 | 151107 0.39 14
2122
+ // 852 | 150204 0.42 15 | 151019 0.42 15
1680
2123
  drop_deletes_without_resize();
1681
2124
  } else {
1682
2125
  // Otherwise grow the container.
@@ -1689,14 +2132,14 @@ class raw_hash_set {
1689
2132
  auto seq = probe(ctrl_, hash, capacity_);
1690
2133
  while (true) {
1691
2134
  Group g{ctrl_ + seq.offset()};
1692
- for (int i : g.Match(H2(hash))) {
2135
+ for (uint32_t i : g.Match(H2(hash))) {
1693
2136
  if (ABSL_PREDICT_TRUE(PolicyTraits::element(slots_ + seq.offset(i)) ==
1694
2137
  elem))
1695
2138
  return true;
1696
2139
  }
1697
- if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return false;
2140
+ if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return false;
1698
2141
  seq.next();
1699
- assert(seq.index() < capacity_ && "full table!");
2142
+ assert(seq.index() <= capacity_ && "full table!");
1700
2143
  }
1701
2144
  return false;
1702
2145
  }
@@ -1714,25 +2157,33 @@ class raw_hash_set {
1714
2157
  }
1715
2158
 
1716
2159
  protected:
2160
+ // Attempts to find `key` in the table; if it isn't found, returns a slot that
2161
+ // the value can be inserted into, with the control byte already set to
2162
+ // `key`'s H2.
1717
2163
  template <class K>
1718
2164
  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
2165
+ prefetch_heap_block();
1719
2166
  auto hash = hash_ref()(key);
1720
2167
  auto seq = probe(ctrl_, hash, capacity_);
1721
2168
  while (true) {
1722
2169
  Group g{ctrl_ + seq.offset()};
1723
- for (int i : g.Match(H2(hash))) {
2170
+ for (uint32_t i : g.Match(H2(hash))) {
1724
2171
  if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
1725
2172
  EqualElement<K>{key, eq_ref()},
1726
2173
  PolicyTraits::element(slots_ + seq.offset(i)))))
1727
2174
  return {seq.offset(i), false};
1728
2175
  }
1729
- if (ABSL_PREDICT_TRUE(g.MatchEmpty())) break;
2176
+ if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
1730
2177
  seq.next();
1731
- assert(seq.index() < capacity_ && "full table!");
2178
+ assert(seq.index() <= capacity_ && "full table!");
1732
2179
  }
1733
2180
  return {prepare_insert(hash), true};
1734
2181
  }
1735
2182
 
2183
+ // Given the hash of a value not currently in the table, finds the next
2184
+ // viable slot index to insert it at.
2185
+ //
2186
+ // REQUIRES: At least one non-full slot available.
1736
2187
  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
1737
2188
  auto target = find_first_non_full(ctrl_, hash, capacity_);
1738
2189
  if (ABSL_PREDICT_FALSE(growth_left() == 0 &&
@@ -1742,7 +2193,8 @@ class raw_hash_set {
1742
2193
  }
1743
2194
  ++size_;
1744
2195
  growth_left() -= IsEmpty(ctrl_[target.offset]);
1745
- set_ctrl(target.offset, H2(hash));
2196
+ SetCtrl(target.offset, H2(hash), capacity_, ctrl_, slots_,
2197
+ sizeof(slot_type));
1746
2198
  infoz().RecordInsert(hash, target.probe_length);
1747
2199
  return target.offset;
1748
2200
  }
@@ -1771,35 +2223,29 @@ class raw_hash_set {
1771
2223
  private:
1772
2224
  friend struct RawHashSetTestOnlyAccess;
1773
2225
 
1774
- // Reset all ctrl bytes back to kEmpty, except the sentinel.
1775
- void reset_ctrl() {
1776
- std::memset(ctrl_, kEmpty, capacity_ + Group::kWidth);
1777
- ctrl_[capacity_] = kSentinel;
1778
- SanitizerPoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_);
1779
- }
1780
-
1781
2226
  void reset_growth_left() {
1782
2227
  growth_left() = CapacityToGrowth(capacity()) - size_;
1783
2228
  }
1784
2229
 
1785
- // Sets the control byte, and if `i < Group::kWidth`, set the cloned byte at
1786
- // the end too.
1787
- void set_ctrl(size_t i, ctrl_t h) {
1788
- assert(i < capacity_);
1789
-
1790
- if (IsFull(h)) {
1791
- SanitizerUnpoisonObject(slots_ + i);
1792
- } else {
1793
- SanitizerPoisonObject(slots_ + i);
1794
- }
2230
+ // The number of slots we can still fill without needing to rehash.
2231
+ //
2232
+ // This is stored separately due to tombstones: we do not include tombstones
2233
+ // in the growth capacity, because we'd like to rehash when the table is
2234
+ // otherwise filled with tombstones: otherwise, probe sequences might get
2235
+ // unacceptably long without triggering a rehash. Callers can also force a
2236
+ // rehash via the standard `rehash(0)`, which will recompute this value as a
2237
+ // side-effect.
2238
+ //
2239
+ // See `CapacityToGrowth()`.
2240
+ size_t& growth_left() { return settings_.template get<0>(); }
1795
2241
 
1796
- ctrl_[i] = h;
1797
- ctrl_[((i - Group::kWidth) & capacity_) + 1 +
1798
- ((Group::kWidth - 1) & capacity_)] = h;
2242
+ // Prefetch the heap-allocated memory region to resolve potential TLB misses.
2243
+ // This is intended to overlap with execution of calculating the hash for a
2244
+ // key.
2245
+ void prefetch_heap_block() const {
2246
+ base_internal::PrefetchT2(ctrl_);
1799
2247
  }
1800
2248
 
1801
- size_t& growth_left() { return settings_.template get<0>(); }
1802
-
1803
2249
  HashtablezInfoHandle& infoz() { return settings_.template get<1>(); }
1804
2250
 
1805
2251
  hasher& hash_ref() { return settings_.template get<2>(); }
@@ -1814,26 +2260,41 @@ class raw_hash_set {
1814
2260
  // TODO(alkis): Investigate removing some of these fields:
1815
2261
  // - ctrl/slots can be derived from each other
1816
2262
  // - size can be moved into the slot array
1817
- ctrl_t* ctrl_ = EmptyGroup(); // [(capacity + 1) * ctrl_t]
1818
- slot_type* slots_ = nullptr; // [capacity * slot_type]
1819
- size_t size_ = 0; // number of full slots
1820
- size_t capacity_ = 0; // total number of slots
2263
+
2264
+ // The control bytes (and, also, a pointer to the base of the backing array).
2265
+ //
2266
+ // This contains `capacity_ + 1 + NumClonedBytes()` entries, even
2267
+ // when the table is empty (hence EmptyGroup).
2268
+ ctrl_t* ctrl_ = EmptyGroup();
2269
+ // The beginning of the slots, located at `SlotOffset()` bytes after
2270
+ // `ctrl_`. May be null for empty tables.
2271
+ slot_type* slots_ = nullptr;
2272
+
2273
+ // The number of filled slots.
2274
+ size_t size_ = 0;
2275
+
2276
+ // The total number of available slots.
2277
+ size_t capacity_ = 0;
1821
2278
  absl::container_internal::CompressedTuple<size_t /* growth_left */,
1822
2279
  HashtablezInfoHandle, hasher,
1823
2280
  key_equal, allocator_type>
1824
- settings_{0, HashtablezInfoHandle{}, hasher{}, key_equal{},
2281
+ settings_{0u, HashtablezInfoHandle{}, hasher{}, key_equal{},
1825
2282
  allocator_type{}};
1826
2283
  };
1827
2284
 
1828
2285
  // Erases all elements that satisfy the predicate `pred` from the container `c`.
1829
2286
  template <typename P, typename H, typename E, typename A, typename Predicate>
1830
- void EraseIf(Predicate pred, raw_hash_set<P, H, E, A>* c) {
2287
+ typename raw_hash_set<P, H, E, A>::size_type EraseIf(
2288
+ Predicate& pred, raw_hash_set<P, H, E, A>* c) {
2289
+ const auto initial_size = c->size();
1831
2290
  for (auto it = c->begin(), last = c->end(); it != last;) {
1832
- auto copy_it = it++;
1833
- if (pred(*copy_it)) {
1834
- c->erase(copy_it);
2291
+ if (pred(*it)) {
2292
+ c->erase(it++);
2293
+ } else {
2294
+ ++it;
1835
2295
  }
1836
2296
  }
2297
+ return initial_size - c->size();
1837
2298
  }
1838
2299
 
1839
2300
  namespace hashtable_debug_internal {
@@ -1849,7 +2310,7 @@ struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
1849
2310
  auto seq = probe(set.ctrl_, hash, set.capacity_);
1850
2311
  while (true) {
1851
2312
  container_internal::Group g{set.ctrl_ + seq.offset()};
1852
- for (int i : g.Match(container_internal::H2(hash))) {
2313
+ for (uint32_t i : g.Match(container_internal::H2(hash))) {
1853
2314
  if (Traits::apply(
1854
2315
  typename Set::template EqualElement<typename Set::key_type>{
1855
2316
  key, set.eq_ref()},
@@ -1857,7 +2318,7 @@ struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
1857
2318
  return num_probes;
1858
2319
  ++num_probes;
1859
2320
  }
1860
- if (g.MatchEmpty()) return num_probes;
2321
+ if (g.MaskEmpty()) return num_probes;
1861
2322
  seq.next();
1862
2323
  ++num_probes;
1863
2324
  }
@@ -1866,8 +2327,7 @@ struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
1866
2327
  static size_t AllocatedByteSize(const Set& c) {
1867
2328
  size_t capacity = c.capacity_;
1868
2329
  if (capacity == 0) return 0;
1869
- auto layout = Set::MakeLayout(capacity);
1870
- size_t m = layout.AllocSize();
2330
+ size_t m = AllocSize(capacity, sizeof(Slot), alignof(Slot));
1871
2331
 
1872
2332
  size_t per_slot = Traits::space_used(static_cast<const Slot*>(nullptr));
1873
2333
  if (per_slot != ~size_t{}) {
@@ -1885,8 +2345,8 @@ struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
1885
2345
  static size_t LowerBoundAllocatedByteSize(size_t size) {
1886
2346
  size_t capacity = GrowthToLowerboundCapacity(size);
1887
2347
  if (capacity == 0) return 0;
1888
- auto layout = Set::MakeLayout(NormalizeCapacity(capacity));
1889
- size_t m = layout.AllocSize();
2348
+ size_t m =
2349
+ AllocSize(NormalizeCapacity(capacity), sizeof(Slot), alignof(Slot));
1890
2350
  size_t per_slot = Traits::space_used(static_cast<const Slot*>(nullptr));
1891
2351
  if (per_slot != ~size_t{}) {
1892
2352
  m += per_slot * size;
@@ -1900,4 +2360,6 @@ struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
1900
2360
  ABSL_NAMESPACE_END
1901
2361
  } // namespace absl
1902
2362
 
2363
+ #undef ABSL_INTERNAL_ASSERT_IS_FULL
2364
+
1903
2365
  #endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_