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
@@ -34,10 +34,16 @@
34
34
  #include "absl/base/port.h"
35
35
  #include "absl/container/fixed_array.h"
36
36
  #include "absl/container/inlined_vector.h"
37
+ #include "absl/strings/cord_buffer.h"
37
38
  #include "absl/strings/escaping.h"
39
+ #include "absl/strings/internal/cord_data_edge.h"
38
40
  #include "absl/strings/internal/cord_internal.h"
41
+ #include "absl/strings/internal/cord_rep_btree.h"
42
+ #include "absl/strings/internal/cord_rep_crc.h"
39
43
  #include "absl/strings/internal/cord_rep_flat.h"
40
- #include "absl/strings/internal/cord_rep_ring.h"
44
+ #include "absl/strings/internal/cordz_statistics.h"
45
+ #include "absl/strings/internal/cordz_update_scope.h"
46
+ #include "absl/strings/internal/cordz_update_tracker.h"
41
47
  #include "absl/strings/internal/resize_uninitialized.h"
42
48
  #include "absl/strings/str_cat.h"
43
49
  #include "absl/strings/str_format.h"
@@ -48,73 +54,19 @@ namespace absl {
48
54
  ABSL_NAMESPACE_BEGIN
49
55
 
50
56
  using ::absl::cord_internal::CordRep;
51
- using ::absl::cord_internal::CordRepConcat;
57
+ using ::absl::cord_internal::CordRepBtree;
58
+ using ::absl::cord_internal::CordRepCrc;
52
59
  using ::absl::cord_internal::CordRepExternal;
53
60
  using ::absl::cord_internal::CordRepFlat;
54
- using ::absl::cord_internal::CordRepRing;
55
61
  using ::absl::cord_internal::CordRepSubstring;
56
- using ::absl::cord_internal::kMinFlatLength;
62
+ using ::absl::cord_internal::CordzUpdateTracker;
63
+ using ::absl::cord_internal::InlineData;
57
64
  using ::absl::cord_internal::kMaxFlatLength;
58
-
59
- using ::absl::cord_internal::CONCAT;
60
- using ::absl::cord_internal::EXTERNAL;
61
- using ::absl::cord_internal::FLAT;
62
- using ::absl::cord_internal::RING;
63
- using ::absl::cord_internal::SUBSTRING;
65
+ using ::absl::cord_internal::kMinFlatLength;
64
66
 
65
67
  using ::absl::cord_internal::kInlinedVectorSize;
66
68
  using ::absl::cord_internal::kMaxBytesToCopy;
67
69
 
68
- constexpr uint64_t Fibonacci(unsigned char n, uint64_t a = 0, uint64_t b = 1) {
69
- return n == 0 ? a : Fibonacci(n - 1, b, a + b);
70
- }
71
-
72
- static_assert(Fibonacci(63) == 6557470319842,
73
- "Fibonacci values computed incorrectly");
74
-
75
- // Minimum length required for a given depth tree -- a tree is considered
76
- // balanced if
77
- // length(t) >= min_length[depth(t)]
78
- // The root node depth is allowed to become twice as large to reduce rebalancing
79
- // for larger strings (see IsRootBalanced).
80
- static constexpr uint64_t min_length[] = {
81
- Fibonacci(2), Fibonacci(3), Fibonacci(4), Fibonacci(5),
82
- Fibonacci(6), Fibonacci(7), Fibonacci(8), Fibonacci(9),
83
- Fibonacci(10), Fibonacci(11), Fibonacci(12), Fibonacci(13),
84
- Fibonacci(14), Fibonacci(15), Fibonacci(16), Fibonacci(17),
85
- Fibonacci(18), Fibonacci(19), Fibonacci(20), Fibonacci(21),
86
- Fibonacci(22), Fibonacci(23), Fibonacci(24), Fibonacci(25),
87
- Fibonacci(26), Fibonacci(27), Fibonacci(28), Fibonacci(29),
88
- Fibonacci(30), Fibonacci(31), Fibonacci(32), Fibonacci(33),
89
- Fibonacci(34), Fibonacci(35), Fibonacci(36), Fibonacci(37),
90
- Fibonacci(38), Fibonacci(39), Fibonacci(40), Fibonacci(41),
91
- Fibonacci(42), Fibonacci(43), Fibonacci(44), Fibonacci(45),
92
- Fibonacci(46), Fibonacci(47),
93
- 0xffffffffffffffffull, // Avoid overflow
94
- };
95
-
96
- static const int kMinLengthSize = ABSL_ARRAYSIZE(min_length);
97
-
98
- static inline bool cord_ring_enabled() {
99
- return cord_internal::cord_ring_buffer_enabled.load(
100
- std::memory_order_relaxed);
101
- }
102
-
103
- static inline bool IsRootBalanced(CordRep* node) {
104
- if (node->tag != CONCAT) {
105
- return true;
106
- } else if (node->concat()->depth() <= 15) {
107
- return true;
108
- } else if (node->concat()->depth() > kMinLengthSize) {
109
- return false;
110
- } else {
111
- // Allow depth to become twice as large as implied by fibonacci rule to
112
- // reduce rebalancing for larger strings.
113
- return (node->length >= min_length[node->concat()->depth() / 2]);
114
- }
115
- }
116
-
117
- static CordRep* Rebalance(CordRep* node);
118
70
  static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
119
71
  int indent = 0);
120
72
  static bool VerifyNode(CordRep* root, CordRep* start_node,
@@ -136,119 +88,32 @@ static inline CordRep* VerifyTree(CordRep* node) {
136
88
  return node;
137
89
  }
138
90
 
139
- // Return the depth of a node
140
- static int Depth(const CordRep* rep) {
141
- if (rep->tag == CONCAT) {
142
- return rep->concat()->depth();
143
- } else {
144
- return 0;
145
- }
146
- }
147
-
148
- static void SetConcatChildren(CordRepConcat* concat, CordRep* left,
149
- CordRep* right) {
150
- concat->left = left;
151
- concat->right = right;
152
-
153
- concat->length = left->length + right->length;
154
- concat->set_depth(1 + std::max(Depth(left), Depth(right)));
155
- }
156
-
157
- // Create a concatenation of the specified nodes.
158
- // Does not change the refcounts of "left" and "right".
159
- // The returned node has a refcount of 1.
160
- static CordRep* RawConcat(CordRep* left, CordRep* right) {
161
- // Avoid making degenerate concat nodes (one child is empty)
162
- if (left == nullptr) return right;
163
- if (right == nullptr) return left;
164
- if (left->length == 0) {
165
- CordRep::Unref(left);
166
- return right;
167
- }
168
- if (right->length == 0) {
169
- CordRep::Unref(right);
170
- return left;
171
- }
172
-
173
- CordRepConcat* rep = new CordRepConcat();
174
- rep->tag = CONCAT;
175
- SetConcatChildren(rep, left, right);
176
-
177
- return rep;
178
- }
179
-
180
- static CordRep* Concat(CordRep* left, CordRep* right) {
181
- CordRep* rep = RawConcat(left, right);
182
- if (rep != nullptr && !IsRootBalanced(rep)) {
183
- rep = Rebalance(rep);
184
- }
185
- return VerifyTree(rep);
186
- }
187
-
188
- // Make a balanced tree out of an array of leaf nodes.
189
- static CordRep* MakeBalancedTree(CordRep** reps, size_t n) {
190
- // Make repeated passes over the array, merging adjacent pairs
191
- // until we are left with just a single node.
192
- while (n > 1) {
193
- size_t dst = 0;
194
- for (size_t src = 0; src < n; src += 2) {
195
- if (src + 1 < n) {
196
- reps[dst] = Concat(reps[src], reps[src + 1]);
197
- } else {
198
- reps[dst] = reps[src];
199
- }
200
- dst++;
201
- }
202
- n = dst;
203
- }
204
-
205
- return reps[0];
206
- }
207
-
208
91
  static CordRepFlat* CreateFlat(const char* data, size_t length,
209
- size_t alloc_hint) {
92
+ size_t alloc_hint) {
210
93
  CordRepFlat* flat = CordRepFlat::New(length + alloc_hint);
211
94
  flat->length = length;
212
95
  memcpy(flat->Data(), data, length);
213
96
  return flat;
214
97
  }
215
98
 
216
- // Creates a new flat or ringbuffer out of the specified array.
99
+ // Creates a new flat or Btree out of the specified array.
217
100
  // The returned node has a refcount of 1.
218
- static CordRep* RingNewTree(const char* data, size_t length,
219
- size_t alloc_hint) {
101
+ static CordRep* NewBtree(const char* data, size_t length, size_t alloc_hint) {
220
102
  if (length <= kMaxFlatLength) {
221
103
  return CreateFlat(data, length, alloc_hint);
222
104
  }
223
105
  CordRepFlat* flat = CreateFlat(data, kMaxFlatLength, 0);
224
106
  data += kMaxFlatLength;
225
107
  length -= kMaxFlatLength;
226
- size_t extra = (length - 1) / kMaxFlatLength + 1;
227
- auto* root = CordRepRing::Create(flat, extra);
228
- return CordRepRing::Append(root, {data, length}, alloc_hint);
108
+ auto* root = CordRepBtree::Create(flat);
109
+ return CordRepBtree::Append(root, {data, length}, alloc_hint);
229
110
  }
230
111
 
231
112
  // Create a new tree out of the specified array.
232
113
  // The returned node has a refcount of 1.
233
- static CordRep* NewTree(const char* data,
234
- size_t length,
235
- size_t alloc_hint) {
114
+ static CordRep* NewTree(const char* data, size_t length, size_t alloc_hint) {
236
115
  if (length == 0) return nullptr;
237
- if (cord_ring_enabled()) {
238
- return RingNewTree(data, length, alloc_hint);
239
- }
240
- absl::FixedArray<CordRep*> reps((length - 1) / kMaxFlatLength + 1);
241
- size_t n = 0;
242
- do {
243
- const size_t len = std::min(length, kMaxFlatLength);
244
- CordRepFlat* rep = CordRepFlat::New(len + alloc_hint);
245
- rep->length = len;
246
- memcpy(rep->Data(), data, len);
247
- reps[n++] = VerifyTree(rep);
248
- data += len;
249
- length -= len;
250
- } while (length != 0);
251
- return MakeBalancedTree(reps.data(), n);
116
+ return NewBtree(data, length, alloc_hint);
252
117
  }
253
118
 
254
119
  namespace cord_internal {
@@ -263,32 +128,46 @@ void InitializeCordRepExternal(absl::string_view data, CordRepExternal* rep) {
263
128
 
264
129
  } // namespace cord_internal
265
130
 
266
- static CordRep* NewSubstring(CordRep* child, size_t offset, size_t length) {
267
- // Never create empty substring nodes
268
- if (length == 0) {
269
- CordRep::Unref(child);
270
- return nullptr;
271
- } else {
272
- CordRepSubstring* rep = new CordRepSubstring();
273
- assert((offset + length) <= child->length);
274
- rep->length = length;
275
- rep->tag = SUBSTRING;
276
- rep->start = offset;
277
- rep->child = child;
278
- return VerifyTree(rep);
131
+ // Creates a CordRep from the provided string. If the string is large enough,
132
+ // and not wasteful, we move the string into an external cord rep, preserving
133
+ // the already allocated string contents.
134
+ // Requires the provided string length to be larger than `kMaxInline`.
135
+ static CordRep* CordRepFromString(std::string&& src) {
136
+ assert(src.length() > cord_internal::kMaxInline);
137
+ if (
138
+ // String is short: copy data to avoid external block overhead.
139
+ src.size() <= kMaxBytesToCopy ||
140
+ // String is wasteful: copy data to avoid pinning too much unused memory.
141
+ src.size() < src.capacity() / 2
142
+ ) {
143
+ return NewTree(src.data(), src.size(), 0);
279
144
  }
145
+
146
+ struct StringReleaser {
147
+ void operator()(absl::string_view /* data */) {}
148
+ std::string data;
149
+ };
150
+ const absl::string_view original_data = src;
151
+ auto* rep =
152
+ static_cast<::absl::cord_internal::CordRepExternalImpl<StringReleaser>*>(
153
+ absl::cord_internal::NewExternalRep(original_data,
154
+ StringReleaser{std::move(src)}));
155
+ // Moving src may have invalidated its data pointer, so adjust it.
156
+ rep->base = rep->template get<0>().data.data();
157
+ return rep;
280
158
  }
281
159
 
282
160
  // --------------------------------------------------------------------
283
161
  // Cord::InlineRep functions
284
162
 
163
+ #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
285
164
  constexpr unsigned char Cord::InlineRep::kMaxInline;
165
+ #endif
286
166
 
287
- inline void Cord::InlineRep::set_data(const char* data, size_t n,
288
- bool nullify_tail) {
167
+ inline void Cord::InlineRep::set_data(const char* data, size_t n) {
289
168
  static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15");
290
169
 
291
- cord_internal::SmallMemmove(data_.as_chars(), data, n, nullify_tail);
170
+ cord_internal::SmallMemmove<true>(data_.as_chars(), data, n);
292
171
  set_inline_size(n);
293
172
  }
294
173
 
@@ -299,20 +178,6 @@ inline char* Cord::InlineRep::set_data(size_t n) {
299
178
  return data_.as_chars();
300
179
  }
301
180
 
302
- inline CordRep* Cord::InlineRep::force_tree(size_t extra_hint) {
303
- if (data_.is_tree()) {
304
- return data_.as_tree();
305
- }
306
-
307
- size_t len = inline_size();
308
- CordRepFlat* result = CordRepFlat::New(len + extra_hint);
309
- result->length = len;
310
- static_assert(kMinFlatLength >= sizeof(data_), "");
311
- memcpy(result->Data(), data_.as_chars(), sizeof(data_));
312
- set_tree(result);
313
- return result;
314
- }
315
-
316
181
  inline void Cord::InlineRep::reduce_size(size_t n) {
317
182
  size_t tag = inline_size();
318
183
  assert(tag <= kMaxInline);
@@ -328,31 +193,68 @@ inline void Cord::InlineRep::remove_prefix(size_t n) {
328
193
  reduce_size(n);
329
194
  }
330
195
 
331
- // Returns `rep` converted into a CordRepRing.
332
- // Directly returns `rep` if `rep` is already a CordRepRing.
333
- static CordRepRing* ForceRing(CordRep* rep, size_t extra) {
334
- return (rep->tag == RING) ? rep->ring() : CordRepRing::Create(rep, extra);
196
+ // Returns `rep` converted into a CordRepBtree.
197
+ // Directly returns `rep` if `rep` is already a CordRepBtree.
198
+ static CordRepBtree* ForceBtree(CordRep* rep) {
199
+ return rep->IsBtree()
200
+ ? rep->btree()
201
+ : CordRepBtree::Create(cord_internal::RemoveCrcNode(rep));
202
+ }
203
+
204
+ void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
205
+ MethodIdentifier method) {
206
+ assert(!is_tree());
207
+ if (!data_.is_empty()) {
208
+ CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
209
+ tree = CordRepBtree::Append(CordRepBtree::Create(flat), tree);
210
+ }
211
+ EmplaceTree(tree, method);
212
+ }
213
+
214
+ void Cord::InlineRep::AppendTreeToTree(CordRep* tree, MethodIdentifier method) {
215
+ assert(is_tree());
216
+ const CordzUpdateScope scope(data_.cordz_info(), method);
217
+ tree = CordRepBtree::Append(ForceBtree(data_.as_tree()), tree);
218
+ SetTree(tree, scope);
335
219
  }
336
220
 
337
- void Cord::InlineRep::AppendTree(CordRep* tree) {
338
- if (tree == nullptr) return;
339
- if (data_.is_empty()) {
340
- set_tree(tree);
341
- } else if (cord_ring_enabled()) {
342
- set_tree(CordRepRing::Append(ForceRing(force_tree(0), 1), tree));
221
+ void Cord::InlineRep::AppendTree(CordRep* tree, MethodIdentifier method) {
222
+ assert(tree != nullptr);
223
+ assert(tree->length != 0);
224
+ assert(!tree->IsCrc());
225
+ if (data_.is_tree()) {
226
+ AppendTreeToTree(tree, method);
343
227
  } else {
344
- set_tree(Concat(force_tree(0), tree));
228
+ AppendTreeToInlined(tree, method);
345
229
  }
346
230
  }
347
231
 
348
- void Cord::InlineRep::PrependTree(CordRep* tree) {
232
+ void Cord::InlineRep::PrependTreeToInlined(CordRep* tree,
233
+ MethodIdentifier method) {
234
+ assert(!is_tree());
235
+ if (!data_.is_empty()) {
236
+ CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
237
+ tree = CordRepBtree::Prepend(CordRepBtree::Create(flat), tree);
238
+ }
239
+ EmplaceTree(tree, method);
240
+ }
241
+
242
+ void Cord::InlineRep::PrependTreeToTree(CordRep* tree,
243
+ MethodIdentifier method) {
244
+ assert(is_tree());
245
+ const CordzUpdateScope scope(data_.cordz_info(), method);
246
+ tree = CordRepBtree::Prepend(ForceBtree(data_.as_tree()), tree);
247
+ SetTree(tree, scope);
248
+ }
249
+
250
+ void Cord::InlineRep::PrependTree(CordRep* tree, MethodIdentifier method) {
349
251
  assert(tree != nullptr);
350
- if (data_.is_empty()) {
351
- set_tree(tree);
352
- } else if (cord_ring_enabled()) {
353
- set_tree(CordRepRing::Prepend(ForceRing(force_tree(0), 1), tree));
252
+ assert(tree->length != 0);
253
+ assert(!tree->IsCrc());
254
+ if (data_.is_tree()) {
255
+ PrependTreeToTree(tree, method);
354
256
  } else {
355
- set_tree(Concat(tree, force_tree(0)));
257
+ PrependTreeToInlined(tree, method);
356
258
  }
357
259
  }
358
260
 
@@ -362,8 +264,8 @@ void Cord::InlineRep::PrependTree(CordRep* tree) {
362
264
  // written to region and the actual size increase will be written to size.
363
265
  static inline bool PrepareAppendRegion(CordRep* root, char** region,
364
266
  size_t* size, size_t max_length) {
365
- if (root->tag == RING && root->refcount.IsOne()) {
366
- Span<char> span = root->ring()->GetAppendBuffer(max_length);
267
+ if (root->IsBtree() && root->refcount.IsOne()) {
268
+ Span<char> span = root->btree()->GetAppendBuffer(max_length);
367
269
  if (!span.empty()) {
368
270
  *region = span.data();
369
271
  *size = span.size();
@@ -371,13 +273,8 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
371
273
  }
372
274
  }
373
275
 
374
- // Search down the right-hand path for a non-full FLAT node.
375
276
  CordRep* dst = root;
376
- while (dst->tag == CONCAT && dst->refcount.IsOne()) {
377
- dst = dst->concat()->right;
378
- }
379
-
380
- if (dst->tag < FLAT || !dst->refcount.IsOne()) {
277
+ if (!dst->IsFlat() || !dst->refcount.IsOne()) {
381
278
  *region = nullptr;
382
279
  *size = 0;
383
280
  return false;
@@ -391,12 +288,7 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
391
288
  return false;
392
289
  }
393
290
 
394
- size_t size_increase = std::min(capacity - in_use, max_length);
395
-
396
- // We need to update the length fields for all nodes, including the leaf node.
397
- for (CordRep* rep = root; rep != dst; rep = rep->concat()->right) {
398
- rep->length += size_increase;
399
- }
291
+ const size_t size_increase = std::min(capacity - in_use, max_length);
400
292
  dst->length += size_increase;
401
293
 
402
294
  *region = dst->flat()->Data() + in_use;
@@ -404,148 +296,56 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
404
296
  return true;
405
297
  }
406
298
 
407
- void Cord::InlineRep::GetAppendRegion(char** region, size_t* size,
408
- size_t max_length) {
409
- if (max_length == 0) {
410
- *region = nullptr;
411
- *size = 0;
412
- return;
413
- }
414
-
415
- // Try to fit in the inline buffer if possible.
416
- if (!is_tree()) {
417
- size_t inline_length = inline_size();
418
- if (max_length <= kMaxInline - inline_length) {
419
- *region = data_.as_chars() + inline_length;
420
- *size = max_length;
421
- set_inline_size(inline_length + max_length);
422
- return;
423
- }
424
- }
425
-
426
- CordRep* root = force_tree(max_length);
427
-
428
- if (PrepareAppendRegion(root, region, size, max_length)) {
429
- return;
430
- }
431
-
432
- // Allocate new node.
433
- CordRepFlat* new_node =
434
- CordRepFlat::New(std::max(static_cast<size_t>(root->length), max_length));
435
- new_node->length = std::min(new_node->Capacity(), max_length);
436
- *region = new_node->Data();
437
- *size = new_node->length;
438
-
439
- if (cord_ring_enabled()) {
440
- replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
441
- return;
442
- }
443
- replace_tree(Concat(root, new_node));
444
- }
445
-
446
- void Cord::InlineRep::GetAppendRegion(char** region, size_t* size) {
447
- const size_t max_length = std::numeric_limits<size_t>::max();
448
-
449
- // Try to fit in the inline buffer if possible.
450
- if (!data_.is_tree()) {
451
- size_t inline_length = inline_size();
452
- if (inline_length < kMaxInline) {
453
- *region = data_.as_chars() + inline_length;
454
- *size = kMaxInline - inline_length;
455
- set_inline_size(kMaxInline);
456
- return;
457
- }
458
- }
459
-
460
- CordRep* root = force_tree(max_length);
461
-
462
- if (PrepareAppendRegion(root, region, size, max_length)) {
463
- return;
464
- }
465
-
466
- // Allocate new node.
467
- CordRepFlat* new_node = CordRepFlat::New(root->length);
468
- new_node->length = new_node->Capacity();
469
- *region = new_node->Data();
470
- *size = new_node->length;
471
-
472
- if (cord_ring_enabled()) {
473
- replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
299
+ void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
300
+ assert(&src != this);
301
+ assert(is_tree() || src.is_tree());
302
+ auto constexpr method = CordzUpdateTracker::kAssignCord;
303
+ if (ABSL_PREDICT_TRUE(!is_tree())) {
304
+ EmplaceTree(CordRep::Ref(src.as_tree()), src.data_, method);
474
305
  return;
475
306
  }
476
- replace_tree(Concat(root, new_node));
477
- }
478
307
 
479
- // If the rep is a leaf, this will increment the value at total_mem_usage and
480
- // will return true.
481
- static bool RepMemoryUsageLeaf(const CordRep* rep, size_t* total_mem_usage) {
482
- if (rep->tag >= FLAT) {
483
- *total_mem_usage += rep->flat()->AllocatedSize();
484
- return true;
485
- }
486
- if (rep->tag == EXTERNAL) {
487
- *total_mem_usage += sizeof(CordRepConcat) + rep->length;
488
- return true;
489
- }
490
- return false;
491
- }
492
-
493
- void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
494
- ClearSlow();
495
-
496
- data_ = src.data_;
497
- if (is_tree()) {
498
- data_.set_profiled(false);
499
- CordRep::Ref(tree());
500
- clear_cordz_info();
308
+ CordRep* tree = as_tree();
309
+ if (CordRep* src_tree = src.tree()) {
310
+ // Leave any existing `cordz_info` in place, and let MaybeTrackCord()
311
+ // decide if this cord should be (or remains to be) sampled or not.
312
+ data_.set_tree(CordRep::Ref(src_tree));
313
+ CordzInfo::MaybeTrackCord(data_, src.data_, method);
314
+ } else {
315
+ CordzInfo::MaybeUntrackCord(data_.cordz_info());
316
+ data_ = src.data_;
501
317
  }
318
+ CordRep::Unref(tree);
502
319
  }
503
320
 
504
- void Cord::InlineRep::ClearSlow() {
321
+ void Cord::InlineRep::UnrefTree() {
505
322
  if (is_tree()) {
323
+ CordzInfo::MaybeUntrackCord(data_.cordz_info());
506
324
  CordRep::Unref(tree());
507
325
  }
508
- ResetToEmpty();
509
326
  }
510
327
 
511
328
  // --------------------------------------------------------------------
512
329
  // Constructors and destructors
513
330
 
514
- Cord::Cord(absl::string_view src) {
331
+ Cord::Cord(absl::string_view src, MethodIdentifier method)
332
+ : contents_(InlineData::kDefaultInit) {
515
333
  const size_t n = src.size();
516
334
  if (n <= InlineRep::kMaxInline) {
517
- contents_.set_data(src.data(), n, false);
335
+ contents_.set_data(src.data(), n);
518
336
  } else {
519
- contents_.set_tree(NewTree(src.data(), n, 0));
337
+ CordRep* rep = NewTree(src.data(), n, 0);
338
+ contents_.EmplaceTree(rep, method);
520
339
  }
521
340
  }
522
341
 
523
342
  template <typename T, Cord::EnableIfString<T>>
524
- Cord::Cord(T&& src) {
525
- if (
526
- // String is short: copy data to avoid external block overhead.
527
- src.size() <= kMaxBytesToCopy ||
528
- // String is wasteful: copy data to avoid pinning too much unused memory.
529
- src.size() < src.capacity() / 2
530
- ) {
531
- if (src.size() <= InlineRep::kMaxInline) {
532
- contents_.set_data(src.data(), src.size(), false);
533
- } else {
534
- contents_.set_tree(NewTree(src.data(), src.size(), 0));
535
- }
343
+ Cord::Cord(T&& src) : contents_(InlineData::kDefaultInit) {
344
+ if (src.size() <= InlineRep::kMaxInline) {
345
+ contents_.set_data(src.data(), src.size());
536
346
  } else {
537
- struct StringReleaser {
538
- void operator()(absl::string_view /* data */) {}
539
- std::string data;
540
- };
541
- const absl::string_view original_data = src;
542
- auto* rep = static_cast<
543
- ::absl::cord_internal::CordRepExternalImpl<StringReleaser>*>(
544
- absl::cord_internal::NewExternalRep(
545
- original_data, StringReleaser{std::forward<T>(src)}));
546
- // Moving src may have invalidated its data pointer, so adjust it.
547
- rep->base = rep->template get<0>().data.data();
548
- contents_.set_tree(rep);
347
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
348
+ contents_.EmplaceTree(rep, CordzUpdateTracker::kConstructorString);
549
349
  }
550
350
  }
551
351
 
@@ -554,9 +354,9 @@ template Cord::Cord(std::string&& src);
554
354
  // The destruction code is separate so that the compiler can determine
555
355
  // that it does not need to call the destructor on a moved-from Cord.
556
356
  void Cord::DestroyCordSlow() {
557
- if (CordRep* tree = contents_.tree()) {
558
- CordRep::Unref(VerifyTree(tree));
559
- }
357
+ assert(contents_.is_tree());
358
+ CordzInfo::MaybeUntrackCord(contents_.cordz_info());
359
+ CordRep::Unref(VerifyTree(contents_.as_tree()));
560
360
  }
561
361
 
562
362
  // --------------------------------------------------------------------
@@ -568,109 +368,101 @@ void Cord::Clear() {
568
368
  }
569
369
  }
570
370
 
571
- Cord& Cord::operator=(absl::string_view src) {
371
+ Cord& Cord::AssignLargeString(std::string&& src) {
372
+ auto constexpr method = CordzUpdateTracker::kAssignString;
373
+ assert(src.size() > kMaxBytesToCopy);
374
+ CordRep* rep = CordRepFromString(std::move(src));
375
+ if (CordRep* tree = contents_.tree()) {
376
+ CordzUpdateScope scope(contents_.cordz_info(), method);
377
+ contents_.SetTree(rep, scope);
378
+ CordRep::Unref(tree);
379
+ } else {
380
+ contents_.EmplaceTree(rep, method);
381
+ }
382
+ return *this;
383
+ }
572
384
 
385
+ Cord& Cord::operator=(absl::string_view src) {
386
+ auto constexpr method = CordzUpdateTracker::kAssignString;
573
387
  const char* data = src.data();
574
388
  size_t length = src.size();
575
389
  CordRep* tree = contents_.tree();
576
390
  if (length <= InlineRep::kMaxInline) {
577
- // Embed into this->contents_
578
- contents_.set_data(data, length, true);
579
- if (tree) CordRep::Unref(tree);
580
- return *this;
581
- }
582
- if (tree != nullptr && tree->tag >= FLAT &&
583
- tree->flat()->Capacity() >= length &&
584
- tree->refcount.IsOne()) {
585
- // Copy in place if the existing FLAT node is reusable.
586
- memmove(tree->flat()->Data(), data, length);
587
- tree->length = length;
588
- VerifyTree(tree);
391
+ // Embed into this->contents_, which is somewhat subtle:
392
+ // - MaybeUntrackCord must be called before Unref(tree).
393
+ // - MaybeUntrackCord must be called before set_data() clobbers cordz_info.
394
+ // - set_data() must be called before Unref(tree) as it may reference tree.
395
+ if (tree != nullptr) CordzInfo::MaybeUntrackCord(contents_.cordz_info());
396
+ contents_.set_data(data, length);
397
+ if (tree != nullptr) CordRep::Unref(tree);
589
398
  return *this;
590
399
  }
591
- contents_.set_tree(NewTree(data, length, 0));
592
- if (tree) CordRep::Unref(tree);
593
- return *this;
594
- }
595
-
596
- template <typename T, Cord::EnableIfString<T>>
597
- Cord& Cord::operator=(T&& src) {
598
- if (src.size() <= kMaxBytesToCopy) {
599
- *this = absl::string_view(src);
400
+ if (tree != nullptr) {
401
+ CordzUpdateScope scope(contents_.cordz_info(), method);
402
+ if (tree->IsFlat() && tree->flat()->Capacity() >= length &&
403
+ tree->refcount.IsOne()) {
404
+ // Copy in place if the existing FLAT node is reusable.
405
+ memmove(tree->flat()->Data(), data, length);
406
+ tree->length = length;
407
+ VerifyTree(tree);
408
+ return *this;
409
+ }
410
+ contents_.SetTree(NewTree(data, length, 0), scope);
411
+ CordRep::Unref(tree);
600
412
  } else {
601
- *this = Cord(std::forward<T>(src));
413
+ contents_.EmplaceTree(NewTree(data, length, 0), method);
602
414
  }
603
415
  return *this;
604
416
  }
605
417
 
606
- template Cord& Cord::operator=(std::string&& src);
607
-
608
418
  // TODO(sanjay): Move to Cord::InlineRep section of file. For now,
609
419
  // we keep it here to make diffs easier.
610
- void Cord::InlineRep::AppendArray(const char* src_data, size_t src_size) {
611
- if (src_size == 0) return; // memcpy(_, nullptr, 0) is undefined.
420
+ void Cord::InlineRep::AppendArray(absl::string_view src,
421
+ MethodIdentifier method) {
422
+ if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
612
423
 
613
424
  size_t appended = 0;
614
- CordRep* root = nullptr;
615
- if (is_tree()) {
616
- root = data_.as_tree();
425
+ CordRep* rep = tree();
426
+ const CordRep* const root = rep;
427
+ CordzUpdateScope scope(root ? cordz_info() : nullptr, method);
428
+ if (root != nullptr) {
429
+ rep = cord_internal::RemoveCrcNode(rep);
617
430
  char* region;
618
- if (PrepareAppendRegion(root, &region, &appended, src_size)) {
619
- memcpy(region, src_data, appended);
431
+ if (PrepareAppendRegion(rep, &region, &appended, src.size())) {
432
+ memcpy(region, src.data(), appended);
620
433
  }
621
434
  } else {
622
435
  // Try to fit in the inline buffer if possible.
623
436
  size_t inline_length = inline_size();
624
- if (src_size <= kMaxInline - inline_length) {
437
+ if (src.size() <= kMaxInline - inline_length) {
625
438
  // Append new data to embedded array
626
- memcpy(data_.as_chars() + inline_length, src_data, src_size);
627
- set_inline_size(inline_length + src_size);
439
+ memcpy(data_.as_chars() + inline_length, src.data(), src.size());
440
+ set_inline_size(inline_length + src.size());
628
441
  return;
629
442
  }
630
443
 
631
- // It is possible that src_data == data_, but when we transition from an
632
- // InlineRep to a tree we need to assign data_ = root via set_tree. To
633
- // avoid corrupting the source data before we copy it, delay calling
634
- // set_tree until after we've copied data.
635
- // We are going from an inline size to beyond inline size. Make the new size
636
- // either double the inlined size, or the added size + 10%.
637
- const size_t size1 = inline_length * 2 + src_size;
638
- const size_t size2 = inline_length + src_size / 10;
639
- root = CordRepFlat::New(std::max<size_t>(size1, size2));
640
- appended = std::min(
641
- src_size, root->flat()->Capacity() - inline_length);
642
- memcpy(root->flat()->Data(), data_.as_chars(), inline_length);
643
- memcpy(root->flat()->Data() + inline_length, src_data, appended);
644
- root->length = inline_length + appended;
645
- set_tree(root);
444
+ // Allocate flat to be a perfect fit on first append exceeding inlined size.
445
+ // Subsequent growth will use amortized growth until we reach maximum flat
446
+ // size.
447
+ rep = CordRepFlat::New(inline_length + src.size());
448
+ appended = std::min(src.size(), rep->flat()->Capacity() - inline_length);
449
+ memcpy(rep->flat()->Data(), data_.as_chars(), inline_length);
450
+ memcpy(rep->flat()->Data() + inline_length, src.data(), appended);
451
+ rep->length = inline_length + appended;
646
452
  }
647
453
 
648
- src_data += appended;
649
- src_size -= appended;
650
- if (src_size == 0) {
454
+ src.remove_prefix(appended);
455
+ if (src.empty()) {
456
+ CommitTree(root, rep, scope, method);
651
457
  return;
652
458
  }
653
459
 
654
- if (cord_ring_enabled()) {
655
- absl::string_view data(src_data, src_size);
656
- root = ForceRing(root, (data.size() - 1) / kMaxFlatLength + 1);
657
- replace_tree(CordRepRing::Append(root->ring(), data));
658
- return;
659
- }
460
+ // TODO(b/192061034): keep legacy 10% growth rate: consider other rates.
461
+ rep = ForceBtree(rep);
462
+ const size_t min_growth = std::max<size_t>(rep->length / 10, src.size());
463
+ rep = CordRepBtree::Append(rep->btree(), src, min_growth - src.size());
660
464
 
661
- // Use new block(s) for any remaining bytes that were not handled above.
662
- // Alloc extra memory only if the right child of the root of the new tree is
663
- // going to be a FLAT node, which will permit further inplace appends.
664
- size_t length = src_size;
665
- if (src_size < kMaxFlatLength) {
666
- // The new length is either
667
- // - old size + 10%
668
- // - old_size + src_size
669
- // This will cause a reasonable conservative step-up in size that is still
670
- // large enough to avoid excessive amounts of small fragments being added.
671
- length = std::max<size_t>(root->length / 10, src_size);
672
- }
673
- set_tree(Concat(root, NewTree(src_data, src_size, length - src_size)));
465
+ CommitTree(root, rep, scope, method);
674
466
  }
675
467
 
676
468
  inline CordRep* Cord::TakeRep() const& {
@@ -685,10 +477,18 @@ inline CordRep* Cord::TakeRep() && {
685
477
 
686
478
  template <typename C>
687
479
  inline void Cord::AppendImpl(C&& src) {
480
+ auto constexpr method = CordzUpdateTracker::kAppendCord;
688
481
  if (empty()) {
689
- // In case of an empty destination avoid allocating a new node, do not copy
690
- // data.
691
- *this = std::forward<C>(src);
482
+ // Since destination is empty, we can avoid allocating a node,
483
+ if (src.contents_.is_tree()) {
484
+ // by taking the tree directly
485
+ CordRep* rep =
486
+ cord_internal::RemoveCrcNode(std::forward<C>(src).TakeRep());
487
+ contents_.EmplaceTree(rep, method);
488
+ } else {
489
+ // or copying over inline data
490
+ contents_.data_ = src.contents_.data_;
491
+ }
692
492
  return;
693
493
  }
694
494
 
@@ -698,12 +498,12 @@ inline void Cord::AppendImpl(C&& src) {
698
498
  CordRep* src_tree = src.contents_.tree();
699
499
  if (src_tree == nullptr) {
700
500
  // src has embedded data.
701
- contents_.AppendArray(src.contents_.data(), src_size);
501
+ contents_.AppendArray({src.contents_.data(), src_size}, method);
702
502
  return;
703
503
  }
704
- if (src_tree->tag >= FLAT) {
504
+ if (src_tree->IsFlat()) {
705
505
  // src tree just has one flat node.
706
- contents_.AppendArray(src_tree->flat()->Data(), src_size);
506
+ contents_.AppendArray({src_tree->flat()->Data(), src_size}, method);
707
507
  return;
708
508
  }
709
509
  if (&src == this) {
@@ -719,19 +519,65 @@ inline void Cord::AppendImpl(C&& src) {
719
519
  }
720
520
 
721
521
  // Guaranteed to be a tree (kMaxBytesToCopy > kInlinedSize)
722
- contents_.AppendTree(std::forward<C>(src).TakeRep());
522
+ CordRep* rep = cord_internal::RemoveCrcNode(std::forward<C>(src).TakeRep());
523
+ contents_.AppendTree(rep, CordzUpdateTracker::kAppendCord);
524
+ }
525
+
526
+ static CordRep::ExtractResult ExtractAppendBuffer(CordRep* rep,
527
+ size_t min_capacity) {
528
+ switch (rep->tag) {
529
+ case cord_internal::BTREE:
530
+ return CordRepBtree::ExtractAppendBuffer(rep->btree(), min_capacity);
531
+ default:
532
+ if (rep->IsFlat() && rep->refcount.IsOne() &&
533
+ rep->flat()->Capacity() - rep->length >= min_capacity) {
534
+ return {nullptr, rep};
535
+ }
536
+ return {rep, nullptr};
537
+ }
723
538
  }
724
539
 
725
- void Cord::Append(const Cord& src) { AppendImpl(src); }
540
+ static CordBuffer CreateAppendBuffer(InlineData& data, size_t capacity) {
541
+ // Watch out for overflow, people can ask for size_t::max().
542
+ const size_t size = data.inline_size();
543
+ capacity = (std::min)(std::numeric_limits<size_t>::max() - size, capacity);
544
+ CordBuffer buffer = CordBuffer::CreateWithDefaultLimit(size + capacity);
545
+ cord_internal::SmallMemmove(buffer.data(), data.as_chars(), size);
546
+ buffer.SetLength(size);
547
+ data = {};
548
+ return buffer;
549
+ }
726
550
 
727
- void Cord::Append(Cord&& src) { AppendImpl(std::move(src)); }
551
+ CordBuffer Cord::GetAppendBufferSlowPath(size_t capacity, size_t min_capacity) {
552
+ auto constexpr method = CordzUpdateTracker::kGetAppendBuffer;
553
+ CordRep* tree = contents_.tree();
554
+ if (tree != nullptr) {
555
+ CordzUpdateScope scope(contents_.cordz_info(), method);
556
+ CordRep::ExtractResult result = ExtractAppendBuffer(tree, min_capacity);
557
+ if (result.extracted != nullptr) {
558
+ contents_.SetTreeOrEmpty(result.tree, scope);
559
+ return CordBuffer(result.extracted->flat());
560
+ }
561
+ return CordBuffer::CreateWithDefaultLimit(capacity);
562
+ }
563
+ return CreateAppendBuffer(contents_.data_, capacity);
564
+ }
565
+
566
+ void Cord::Append(const Cord& src) {
567
+ AppendImpl(src);
568
+ }
569
+
570
+ void Cord::Append(Cord&& src) {
571
+ AppendImpl(std::move(src));
572
+ }
728
573
 
729
574
  template <typename T, Cord::EnableIfString<T>>
730
575
  void Cord::Append(T&& src) {
731
576
  if (src.size() <= kMaxBytesToCopy) {
732
577
  Append(absl::string_view(src));
733
578
  } else {
734
- Append(Cord(std::forward<T>(src)));
579
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
580
+ contents_.AppendTree(rep, CordzUpdateTracker::kAppendString);
735
581
  }
736
582
  }
737
583
 
@@ -741,7 +587,8 @@ void Cord::Prepend(const Cord& src) {
741
587
  CordRep* src_tree = src.contents_.tree();
742
588
  if (src_tree != nullptr) {
743
589
  CordRep::Ref(src_tree);
744
- contents_.PrependTree(src_tree);
590
+ contents_.PrependTree(cord_internal::RemoveCrcNode(src_tree),
591
+ CordzUpdateTracker::kPrependCord);
745
592
  return;
746
593
  }
747
594
 
@@ -750,7 +597,7 @@ void Cord::Prepend(const Cord& src) {
750
597
  return Prepend(src_contents);
751
598
  }
752
599
 
753
- void Cord::Prepend(absl::string_view src) {
600
+ void Cord::PrependArray(absl::string_view src, MethodIdentifier method) {
754
601
  if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
755
602
  if (!contents_.is_tree()) {
756
603
  size_t cur_size = contents_.inline_size();
@@ -764,105 +611,49 @@ void Cord::Prepend(absl::string_view src) {
764
611
  return;
765
612
  }
766
613
  }
767
- contents_.PrependTree(NewTree(src.data(), src.size(), 0));
614
+ CordRep* rep = NewTree(src.data(), src.size(), 0);
615
+ contents_.PrependTree(rep, method);
768
616
  }
769
617
 
770
- template <typename T, Cord::EnableIfString<T>>
771
- inline void Cord::Prepend(T&& src) {
772
- if (src.size() <= kMaxBytesToCopy) {
773
- Prepend(absl::string_view(src));
618
+ void Cord::AppendPrecise(absl::string_view src, MethodIdentifier method) {
619
+ assert(!src.empty());
620
+ assert(src.size() <= cord_internal::kMaxFlatLength);
621
+ if (contents_.remaining_inline_capacity() >= src.size()) {
622
+ const size_t inline_length = contents_.inline_size();
623
+ memcpy(contents_.data_.as_chars() + inline_length, src.data(), src.size());
624
+ contents_.set_inline_size(inline_length + src.size());
774
625
  } else {
775
- Prepend(Cord(std::forward<T>(src)));
626
+ contents_.AppendTree(CordRepFlat::Create(src), method);
776
627
  }
777
628
  }
778
629
 
779
- template void Cord::Prepend(std::string&& src);
780
-
781
- static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
782
- if (n >= node->length) return nullptr;
783
- if (n == 0) return CordRep::Ref(node);
784
- absl::InlinedVector<CordRep*, kInlinedVectorSize> rhs_stack;
785
-
786
- while (node->tag == CONCAT) {
787
- assert(n <= node->length);
788
- if (n < node->concat()->left->length) {
789
- // Push right to stack, descend left.
790
- rhs_stack.push_back(node->concat()->right);
791
- node = node->concat()->left;
792
- } else {
793
- // Drop left, descend right.
794
- n -= node->concat()->left->length;
795
- node = node->concat()->right;
796
- }
797
- }
798
- assert(n <= node->length);
799
-
800
- if (n == 0) {
801
- CordRep::Ref(node);
630
+ void Cord::PrependPrecise(absl::string_view src, MethodIdentifier method) {
631
+ assert(!src.empty());
632
+ assert(src.size() <= cord_internal::kMaxFlatLength);
633
+ if (contents_.remaining_inline_capacity() >= src.size()) {
634
+ const size_t inline_length = contents_.inline_size();
635
+ char data[InlineRep::kMaxInline + 1] = {0};
636
+ memcpy(data, src.data(), src.size());
637
+ memcpy(data + src.size(), contents_.data(), inline_length);
638
+ memcpy(contents_.data_.as_chars(), data, InlineRep::kMaxInline + 1);
639
+ contents_.set_inline_size(inline_length + src.size());
802
640
  } else {
803
- size_t start = n;
804
- size_t len = node->length - n;
805
- if (node->tag == SUBSTRING) {
806
- // Consider in-place update of node, similar to in RemoveSuffixFrom().
807
- start += node->substring()->start;
808
- node = node->substring()->child;
809
- }
810
- node = NewSubstring(CordRep::Ref(node), start, len);
811
- }
812
- while (!rhs_stack.empty()) {
813
- node = Concat(node, CordRep::Ref(rhs_stack.back()));
814
- rhs_stack.pop_back();
641
+ contents_.PrependTree(CordRepFlat::Create(src), method);
815
642
  }
816
- return node;
817
643
  }
818
644
 
819
- // RemoveSuffixFrom() is very similar to RemovePrefixFrom(), with the
820
- // exception that removing a suffix has an optimization where a node may be
821
- // edited in place iff that node and all its ancestors have a refcount of 1.
822
- static CordRep* RemoveSuffixFrom(CordRep* node, size_t n) {
823
- if (n >= node->length) return nullptr;
824
- if (n == 0) return CordRep::Ref(node);
825
- absl::InlinedVector<CordRep*, kInlinedVectorSize> lhs_stack;
826
- bool inplace_ok = node->refcount.IsOne();
827
-
828
- while (node->tag == CONCAT) {
829
- assert(n <= node->length);
830
- if (n < node->concat()->right->length) {
831
- // Push left to stack, descend right.
832
- lhs_stack.push_back(node->concat()->left);
833
- node = node->concat()->right;
834
- } else {
835
- // Drop right, descend left.
836
- n -= node->concat()->right->length;
837
- node = node->concat()->left;
838
- }
839
- inplace_ok = inplace_ok && node->refcount.IsOne();
840
- }
841
- assert(n <= node->length);
842
-
843
- if (n == 0) {
844
- CordRep::Ref(node);
845
- } else if (inplace_ok && node->tag != EXTERNAL) {
846
- // Consider making a new buffer if the current node capacity is much
847
- // larger than the new length.
848
- CordRep::Ref(node);
849
- node->length -= n;
645
+ template <typename T, Cord::EnableIfString<T>>
646
+ inline void Cord::Prepend(T&& src) {
647
+ if (src.size() <= kMaxBytesToCopy) {
648
+ Prepend(absl::string_view(src));
850
649
  } else {
851
- size_t start = 0;
852
- size_t len = node->length - n;
853
- if (node->tag == SUBSTRING) {
854
- start = node->substring()->start;
855
- node = node->substring()->child;
856
- }
857
- node = NewSubstring(CordRep::Ref(node), start, len);
650
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
651
+ contents_.PrependTree(rep, CordzUpdateTracker::kPrependString);
858
652
  }
859
- while (!lhs_stack.empty()) {
860
- node = Concat(CordRep::Ref(lhs_stack.back()), node);
861
- lhs_stack.pop_back();
862
- }
863
- return node;
864
653
  }
865
654
 
655
+ template void Cord::Prepend(std::string&& src);
656
+
866
657
  void Cord::RemovePrefix(size_t n) {
867
658
  ABSL_INTERNAL_CHECK(n <= size(),
868
659
  absl::StrCat("Requested prefix size ", n,
@@ -870,12 +661,26 @@ void Cord::RemovePrefix(size_t n) {
870
661
  CordRep* tree = contents_.tree();
871
662
  if (tree == nullptr) {
872
663
  contents_.remove_prefix(n);
873
- } else if (tree->tag == RING) {
874
- contents_.replace_tree(CordRepRing::RemovePrefix(tree->ring(), n));
875
664
  } else {
876
- CordRep* newrep = RemovePrefixFrom(tree, n);
877
- CordRep::Unref(tree);
878
- contents_.replace_tree(VerifyTree(newrep));
665
+ auto constexpr method = CordzUpdateTracker::kRemovePrefix;
666
+ CordzUpdateScope scope(contents_.cordz_info(), method);
667
+ tree = cord_internal::RemoveCrcNode(tree);
668
+ if (n >= tree->length) {
669
+ CordRep::Unref(tree);
670
+ tree = nullptr;
671
+ } else if (tree->IsBtree()) {
672
+ CordRep* old = tree;
673
+ tree = tree->btree()->SubTree(n, tree->length - n);
674
+ CordRep::Unref(old);
675
+ } else if (tree->IsSubstring() && tree->refcount.IsOne()) {
676
+ tree->substring()->start += n;
677
+ tree->length -= n;
678
+ } else {
679
+ CordRep* rep = CordRepSubstring::Substring(tree, n, tree->length - n);
680
+ CordRep::Unref(tree);
681
+ tree = rep;
682
+ }
683
+ contents_.SetTreeOrEmpty(tree, scope);
879
684
  }
880
685
  }
881
686
 
@@ -886,64 +691,25 @@ void Cord::RemoveSuffix(size_t n) {
886
691
  CordRep* tree = contents_.tree();
887
692
  if (tree == nullptr) {
888
693
  contents_.reduce_size(n);
889
- } else if (tree->tag == RING) {
890
- contents_.replace_tree(CordRepRing::RemoveSuffix(tree->ring(), n));
891
694
  } else {
892
- CordRep* newrep = RemoveSuffixFrom(tree, n);
893
- CordRep::Unref(tree);
894
- contents_.replace_tree(VerifyTree(newrep));
895
- }
896
- }
897
-
898
- // Work item for NewSubRange().
899
- struct SubRange {
900
- SubRange(CordRep* a_node, size_t a_pos, size_t a_n)
901
- : node(a_node), pos(a_pos), n(a_n) {}
902
- CordRep* node; // nullptr means concat last 2 results.
903
- size_t pos;
904
- size_t n;
905
- };
906
-
907
- static CordRep* NewSubRange(CordRep* node, size_t pos, size_t n) {
908
- absl::InlinedVector<CordRep*, kInlinedVectorSize> results;
909
- absl::InlinedVector<SubRange, kInlinedVectorSize> todo;
910
- todo.push_back(SubRange(node, pos, n));
911
- do {
912
- const SubRange& sr = todo.back();
913
- node = sr.node;
914
- pos = sr.pos;
915
- n = sr.n;
916
- todo.pop_back();
917
-
918
- if (node == nullptr) {
919
- assert(results.size() >= 2);
920
- CordRep* right = results.back();
921
- results.pop_back();
922
- CordRep* left = results.back();
923
- results.pop_back();
924
- results.push_back(Concat(left, right));
925
- } else if (pos == 0 && n == node->length) {
926
- results.push_back(CordRep::Ref(node));
927
- } else if (node->tag != CONCAT) {
928
- if (node->tag == SUBSTRING) {
929
- pos += node->substring()->start;
930
- node = node->substring()->child;
931
- }
932
- results.push_back(NewSubstring(CordRep::Ref(node), pos, n));
933
- } else if (pos + n <= node->concat()->left->length) {
934
- todo.push_back(SubRange(node->concat()->left, pos, n));
935
- } else if (pos >= node->concat()->left->length) {
936
- pos -= node->concat()->left->length;
937
- todo.push_back(SubRange(node->concat()->right, pos, n));
695
+ auto constexpr method = CordzUpdateTracker::kRemoveSuffix;
696
+ CordzUpdateScope scope(contents_.cordz_info(), method);
697
+ tree = cord_internal::RemoveCrcNode(tree);
698
+ if (n >= tree->length) {
699
+ CordRep::Unref(tree);
700
+ tree = nullptr;
701
+ } else if (tree->IsBtree()) {
702
+ tree = CordRepBtree::RemoveSuffix(tree->btree(), n);
703
+ } else if (!tree->IsExternal() && tree->refcount.IsOne()) {
704
+ assert(tree->IsFlat() || tree->IsSubstring());
705
+ tree->length -= n;
938
706
  } else {
939
- size_t left_n = node->concat()->left->length - pos;
940
- todo.push_back(SubRange(nullptr, 0, 0)); // Concat()
941
- todo.push_back(SubRange(node->concat()->right, 0, n - left_n));
942
- todo.push_back(SubRange(node->concat()->left, pos, left_n));
707
+ CordRep* rep = CordRepSubstring::Substring(tree, 0, tree->length - n);
708
+ CordRep::Unref(tree);
709
+ tree = rep;
943
710
  }
944
- } while (!todo.empty());
945
- assert(results.size() == 1);
946
- return results[0];
711
+ contents_.SetTreeOrEmpty(tree, scope);
712
+ }
947
713
  }
948
714
 
949
715
  Cord Cord::Subcord(size_t pos, size_t new_size) const {
@@ -951,17 +717,18 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
951
717
  size_t length = size();
952
718
  if (pos > length) pos = length;
953
719
  if (new_size > length - pos) new_size = length - pos;
720
+ if (new_size == 0) return sub_cord;
721
+
954
722
  CordRep* tree = contents_.tree();
955
723
  if (tree == nullptr) {
956
- // sub_cord is newly constructed, no need to re-zero-out the tail of
957
- // contents_ memory.
958
- sub_cord.contents_.set_data(contents_.data() + pos, new_size, false);
959
- } else if (new_size == 0) {
960
- // We want to return empty subcord, so nothing to do.
961
- } else if (new_size <= InlineRep::kMaxInline) {
724
+ sub_cord.contents_.set_data(contents_.data() + pos, new_size);
725
+ return sub_cord;
726
+ }
727
+
728
+ if (new_size <= InlineRep::kMaxInline) {
729
+ char* dest = sub_cord.contents_.data_.as_chars();
962
730
  Cord::ChunkIterator it = chunk_begin();
963
731
  it.AdvanceBytes(pos);
964
- char* dest = sub_cord.contents_.data_.as_chars();
965
732
  size_t remaining_size = new_size;
966
733
  while (remaining_size > it->size()) {
967
734
  cord_internal::SmallMemmove(dest, it->data(), it->size());
@@ -971,153 +738,18 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
971
738
  }
972
739
  cord_internal::SmallMemmove(dest, it->data(), remaining_size);
973
740
  sub_cord.contents_.set_inline_size(new_size);
974
- } else if (tree->tag == RING) {
975
- tree = CordRepRing::SubRing(CordRep::Ref(tree)->ring(), pos, new_size);
976
- sub_cord.contents_.set_tree(tree);
977
- } else {
978
- sub_cord.contents_.set_tree(NewSubRange(tree, pos, new_size));
979
- }
980
- return sub_cord;
981
- }
982
-
983
- // --------------------------------------------------------------------
984
- // Balancing
985
-
986
- class CordForest {
987
- public:
988
- explicit CordForest(size_t length)
989
- : root_length_(length), trees_(kMinLengthSize, nullptr) {}
990
-
991
- void Build(CordRep* cord_root) {
992
- std::vector<CordRep*> pending = {cord_root};
993
-
994
- while (!pending.empty()) {
995
- CordRep* node = pending.back();
996
- pending.pop_back();
997
- CheckNode(node);
998
- if (ABSL_PREDICT_FALSE(node->tag != CONCAT)) {
999
- AddNode(node);
1000
- continue;
1001
- }
1002
-
1003
- CordRepConcat* concat_node = node->concat();
1004
- if (concat_node->depth() >= kMinLengthSize ||
1005
- concat_node->length < min_length[concat_node->depth()]) {
1006
- pending.push_back(concat_node->right);
1007
- pending.push_back(concat_node->left);
1008
-
1009
- if (concat_node->refcount.IsOne()) {
1010
- concat_node->left = concat_freelist_;
1011
- concat_freelist_ = concat_node;
1012
- } else {
1013
- CordRep::Ref(concat_node->right);
1014
- CordRep::Ref(concat_node->left);
1015
- CordRep::Unref(concat_node);
1016
- }
1017
- } else {
1018
- AddNode(node);
1019
- }
1020
- }
1021
- }
1022
-
1023
- CordRep* ConcatNodes() {
1024
- CordRep* sum = nullptr;
1025
- for (auto* node : trees_) {
1026
- if (node == nullptr) continue;
1027
-
1028
- sum = PrependNode(node, sum);
1029
- root_length_ -= node->length;
1030
- if (root_length_ == 0) break;
1031
- }
1032
- ABSL_INTERNAL_CHECK(sum != nullptr, "Failed to locate sum node");
1033
- return VerifyTree(sum);
1034
- }
1035
-
1036
- private:
1037
- CordRep* AppendNode(CordRep* node, CordRep* sum) {
1038
- return (sum == nullptr) ? node : MakeConcat(sum, node);
1039
- }
1040
-
1041
- CordRep* PrependNode(CordRep* node, CordRep* sum) {
1042
- return (sum == nullptr) ? node : MakeConcat(node, sum);
1043
- }
1044
-
1045
- void AddNode(CordRep* node) {
1046
- CordRep* sum = nullptr;
1047
-
1048
- // Collect together everything with which we will merge with node
1049
- int i = 0;
1050
- for (; node->length > min_length[i + 1]; ++i) {
1051
- auto& tree_at_i = trees_[i];
1052
-
1053
- if (tree_at_i == nullptr) continue;
1054
- sum = PrependNode(tree_at_i, sum);
1055
- tree_at_i = nullptr;
1056
- }
1057
-
1058
- sum = AppendNode(node, sum);
1059
-
1060
- // Insert sum into appropriate place in the forest
1061
- for (; sum->length >= min_length[i]; ++i) {
1062
- auto& tree_at_i = trees_[i];
1063
- if (tree_at_i == nullptr) continue;
1064
-
1065
- sum = MakeConcat(tree_at_i, sum);
1066
- tree_at_i = nullptr;
1067
- }
1068
-
1069
- // min_length[0] == 1, which means sum->length >= min_length[0]
1070
- assert(i > 0);
1071
- trees_[i - 1] = sum;
1072
- }
1073
-
1074
- // Make concat node trying to resue existing CordRepConcat nodes we
1075
- // already collected in the concat_freelist_.
1076
- CordRep* MakeConcat(CordRep* left, CordRep* right) {
1077
- if (concat_freelist_ == nullptr) return RawConcat(left, right);
1078
-
1079
- CordRepConcat* rep = concat_freelist_;
1080
- if (concat_freelist_->left == nullptr) {
1081
- concat_freelist_ = nullptr;
1082
- } else {
1083
- concat_freelist_ = concat_freelist_->left->concat();
1084
- }
1085
- SetConcatChildren(rep, left, right);
1086
-
1087
- return rep;
741
+ return sub_cord;
1088
742
  }
1089
743
 
1090
- static void CheckNode(CordRep* node) {
1091
- ABSL_INTERNAL_CHECK(node->length != 0u, "");
1092
- if (node->tag == CONCAT) {
1093
- ABSL_INTERNAL_CHECK(node->concat()->left != nullptr, "");
1094
- ABSL_INTERNAL_CHECK(node->concat()->right != nullptr, "");
1095
- ABSL_INTERNAL_CHECK(node->length == (node->concat()->left->length +
1096
- node->concat()->right->length),
1097
- "");
1098
- }
1099
- }
1100
-
1101
- size_t root_length_;
1102
-
1103
- // use an inlined vector instead of a flat array to get bounds checking
1104
- absl::InlinedVector<CordRep*, kInlinedVectorSize> trees_;
1105
-
1106
- // List of concat nodes we can re-use for Cord balancing.
1107
- CordRepConcat* concat_freelist_ = nullptr;
1108
- };
1109
-
1110
- static CordRep* Rebalance(CordRep* node) {
1111
- VerifyTree(node);
1112
- assert(node->tag == CONCAT);
1113
-
1114
- if (node->length == 0) {
1115
- return nullptr;
744
+ tree = cord_internal::SkipCrcNode(tree);
745
+ if (tree->IsBtree()) {
746
+ tree = tree->btree()->SubTree(pos, new_size);
747
+ } else {
748
+ tree = CordRepSubstring::Substring(tree, pos, new_size);
1116
749
  }
1117
-
1118
- CordForest forest(node->length);
1119
- forest.Build(node);
1120
- return forest.ConcatNodes();
750
+ sub_cord.contents_.EmplaceTree(tree, contents_.data_,
751
+ CordzUpdateTracker::kSubCord);
752
+ return sub_cord;
1121
753
  }
1122
754
 
1123
755
  // --------------------------------------------------------------------
@@ -1159,29 +791,29 @@ bool ComputeCompareResult<bool>(int memcmp_res) {
1159
791
 
1160
792
  } // namespace
1161
793
 
1162
- // Helper routine. Locates the first flat chunk of the Cord without
1163
- // initializing the iterator.
794
+ // Helper routine. Locates the first flat or external chunk of the Cord without
795
+ // initializing the iterator, and returns a string_view referencing the data.
1164
796
  inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1165
797
  if (!is_tree()) {
1166
798
  return absl::string_view(data_.as_chars(), data_.inline_size());
1167
799
  }
1168
800
 
1169
- CordRep* node = tree();
1170
- if (node->tag >= FLAT) {
801
+ CordRep* node = cord_internal::SkipCrcNode(tree());
802
+ if (node->IsFlat()) {
1171
803
  return absl::string_view(node->flat()->Data(), node->length);
1172
804
  }
1173
805
 
1174
- if (node->tag == EXTERNAL) {
806
+ if (node->IsExternal()) {
1175
807
  return absl::string_view(node->external()->base, node->length);
1176
808
  }
1177
809
 
1178
- if (node->tag == RING) {
1179
- return node->ring()->entry_data(node->ring()->head());
1180
- }
1181
-
1182
- // Walk down the left branches until we hit a non-CONCAT node.
1183
- while (node->tag == CONCAT) {
1184
- node = node->concat()->left;
810
+ if (node->IsBtree()) {
811
+ CordRepBtree* tree = node->btree();
812
+ int height = tree->height();
813
+ while (--height >= 0) {
814
+ tree = tree->Edge(CordRepBtree::kFront)->btree();
815
+ }
816
+ return tree->Data(tree->begin());
1185
817
  }
1186
818
 
1187
819
  // Get the child node if we encounter a SUBSTRING.
@@ -1189,20 +821,42 @@ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1189
821
  size_t length = node->length;
1190
822
  assert(length != 0);
1191
823
 
1192
- if (node->tag == SUBSTRING) {
824
+ if (node->IsSubstring()) {
1193
825
  offset = node->substring()->start;
1194
826
  node = node->substring()->child;
1195
827
  }
1196
828
 
1197
- if (node->tag >= FLAT) {
829
+ if (node->IsFlat()) {
1198
830
  return absl::string_view(node->flat()->Data() + offset, length);
1199
831
  }
1200
832
 
1201
- assert((node->tag == EXTERNAL) && "Expect FLAT or EXTERNAL node here");
833
+ assert(node->IsExternal() && "Expect FLAT or EXTERNAL node here");
1202
834
 
1203
835
  return absl::string_view(node->external()->base + offset, length);
1204
836
  }
1205
837
 
838
+ void Cord::SetExpectedChecksum(uint32_t crc) {
839
+ auto constexpr method = CordzUpdateTracker::kSetExpectedChecksum;
840
+ if (empty()) return;
841
+
842
+ if (!contents_.is_tree()) {
843
+ CordRep* rep = contents_.MakeFlatWithExtraCapacity(0);
844
+ rep = CordRepCrc::New(rep, crc);
845
+ contents_.EmplaceTree(rep, method);
846
+ } else {
847
+ const CordzUpdateScope scope(contents_.data_.cordz_info(), method);
848
+ CordRep* rep = CordRepCrc::New(contents_.data_.as_tree(), crc);
849
+ contents_.SetTree(rep, scope);
850
+ }
851
+ }
852
+
853
+ absl::optional<uint32_t> Cord::ExpectedChecksum() const {
854
+ if (!contents_.is_tree() || !contents_.tree()->IsCrc()) {
855
+ return absl::nullopt;
856
+ }
857
+ return contents_.tree()->crc()->crc;
858
+ }
859
+
1206
860
  inline int Cord::CompareSlowPath(absl::string_view rhs, size_t compared_size,
1207
861
  size_t size_to_compare) const {
1208
862
  auto advance = [](Cord::ChunkIterator* it, absl::string_view* chunk) {
@@ -1378,46 +1032,11 @@ void Cord::CopyToArraySlowPath(char* dst) const {
1378
1032
  }
1379
1033
  }
1380
1034
 
1381
- Cord::ChunkIterator& Cord::ChunkIterator::AdvanceStack() {
1382
- auto& stack_of_right_children = stack_of_right_children_;
1383
- if (stack_of_right_children.empty()) {
1384
- assert(!current_chunk_.empty()); // Called on invalid iterator.
1385
- // We have reached the end of the Cord.
1386
- return *this;
1387
- }
1388
-
1389
- // Process the next node on the stack.
1390
- CordRep* node = stack_of_right_children.back();
1391
- stack_of_right_children.pop_back();
1392
-
1393
- // Walk down the left branches until we hit a non-CONCAT node. Save the
1394
- // right children to the stack for subsequent traversal.
1395
- while (node->tag == CONCAT) {
1396
- stack_of_right_children.push_back(node->concat()->right);
1397
- node = node->concat()->left;
1398
- }
1399
-
1400
- // Get the child node if we encounter a SUBSTRING.
1401
- size_t offset = 0;
1402
- size_t length = node->length;
1403
- if (node->tag == SUBSTRING) {
1404
- offset = node->substring()->start;
1405
- node = node->substring()->child;
1406
- }
1407
-
1408
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1409
- assert(length != 0);
1410
- const char* data =
1411
- node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1412
- current_chunk_ = absl::string_view(data + offset, length);
1413
- current_leaf_ = node;
1414
- return *this;
1415
- }
1416
-
1417
1035
  Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1418
1036
  ABSL_HARDENING_ASSERT(bytes_remaining_ >= n &&
1419
1037
  "Attempted to iterate past `end()`");
1420
1038
  Cord subcord;
1039
+ auto constexpr method = CordzUpdateTracker::kCordReader;
1421
1040
 
1422
1041
  if (n <= InlineRep::kMaxInline) {
1423
1042
  // Range to read fits in inline data. Flatten it.
@@ -1437,184 +1056,51 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1437
1056
  return subcord;
1438
1057
  }
1439
1058
 
1440
- if (ring_reader_) {
1059
+ if (btree_reader_) {
1441
1060
  size_t chunk_size = current_chunk_.size();
1442
1061
  if (n <= chunk_size && n <= kMaxBytesToCopy) {
1443
- subcord = Cord(current_chunk_.substr(0, n));
1444
- } else {
1445
- auto* ring = CordRep::Ref(ring_reader_.ring())->ring();
1446
- size_t offset = ring_reader_.length() - bytes_remaining_;
1447
- subcord.contents_.set_tree(CordRepRing::SubRing(ring, offset, n));
1448
- }
1449
- if (n < chunk_size) {
1450
- bytes_remaining_ -= n;
1451
- current_chunk_.remove_prefix(n);
1062
+ subcord = Cord(current_chunk_.substr(0, n), method);
1063
+ if (n < chunk_size) {
1064
+ current_chunk_.remove_prefix(n);
1065
+ } else {
1066
+ current_chunk_ = btree_reader_.Next();
1067
+ }
1452
1068
  } else {
1453
- AdvanceBytesRing(n);
1069
+ CordRep* rep;
1070
+ current_chunk_ = btree_reader_.Read(n, chunk_size, rep);
1071
+ subcord.contents_.EmplaceTree(rep, method);
1454
1072
  }
1073
+ bytes_remaining_ -= n;
1455
1074
  return subcord;
1456
1075
  }
1457
1076
 
1458
- auto& stack_of_right_children = stack_of_right_children_;
1459
- if (n < current_chunk_.size()) {
1460
- // Range to read is a proper subrange of the current chunk.
1461
- assert(current_leaf_ != nullptr);
1462
- CordRep* subnode = CordRep::Ref(current_leaf_);
1463
- const char* data = subnode->tag == EXTERNAL ? subnode->external()->base
1464
- : subnode->flat()->Data();
1465
- subnode = NewSubstring(subnode, current_chunk_.data() - data, n);
1466
- subcord.contents_.set_tree(VerifyTree(subnode));
1467
- RemoveChunkPrefix(n);
1468
- return subcord;
1469
- }
1470
-
1471
- // Range to read begins with a proper subrange of the current chunk.
1472
- assert(!current_chunk_.empty());
1077
+ // Short circuit if reading the entire data edge.
1473
1078
  assert(current_leaf_ != nullptr);
1474
- CordRep* subnode = CordRep::Ref(current_leaf_);
1475
- if (current_chunk_.size() < subnode->length) {
1476
- const char* data = subnode->tag == EXTERNAL ? subnode->external()->base
1477
- : subnode->flat()->Data();
1478
- subnode = NewSubstring(subnode, current_chunk_.data() - data,
1479
- current_chunk_.size());
1480
- }
1481
- n -= current_chunk_.size();
1482
- bytes_remaining_ -= current_chunk_.size();
1483
-
1484
- // Process the next node(s) on the stack, reading whole subtrees depending on
1485
- // their length and how many bytes we are advancing.
1486
- CordRep* node = nullptr;
1487
- while (!stack_of_right_children.empty()) {
1488
- node = stack_of_right_children.back();
1489
- stack_of_right_children.pop_back();
1490
- if (node->length > n) break;
1491
- // TODO(qrczak): This might unnecessarily recreate existing concat nodes.
1492
- // Avoiding that would need pretty complicated logic (instead of
1493
- // current_leaf, keep current_subtree_ which points to the highest node
1494
- // such that the current leaf can be found on the path of left children
1495
- // starting from current_subtree_; delay creating subnode while node is
1496
- // below current_subtree_; find the proper node along the path of left
1497
- // children starting from current_subtree_ if this loop exits while staying
1498
- // below current_subtree_; etc.; alternatively, push parents instead of
1499
- // right children on the stack).
1500
- subnode = Concat(subnode, CordRep::Ref(node));
1501
- n -= node->length;
1502
- bytes_remaining_ -= node->length;
1503
- node = nullptr;
1504
- }
1505
-
1506
- if (node == nullptr) {
1507
- // We have reached the end of the Cord.
1508
- assert(bytes_remaining_ == 0);
1509
- subcord.contents_.set_tree(VerifyTree(subnode));
1079
+ if (n == current_leaf_->length) {
1080
+ bytes_remaining_ = 0;
1081
+ current_chunk_ = {};
1082
+ CordRep* tree = CordRep::Ref(current_leaf_);
1083
+ subcord.contents_.EmplaceTree(VerifyTree(tree), method);
1510
1084
  return subcord;
1511
1085
  }
1512
1086
 
1513
- // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1514
- // right children to the stack for subsequent traversal.
1515
- while (node->tag == CONCAT) {
1516
- if (node->concat()->left->length > n) {
1517
- // Push right, descend left.
1518
- stack_of_right_children.push_back(node->concat()->right);
1519
- node = node->concat()->left;
1520
- } else {
1521
- // Read left, descend right.
1522
- subnode = Concat(subnode, CordRep::Ref(node->concat()->left));
1523
- n -= node->concat()->left->length;
1524
- bytes_remaining_ -= node->concat()->left->length;
1525
- node = node->concat()->right;
1526
- }
1527
- }
1087
+ // From this point on, we need a partial substring node.
1088
+ // Get pointer to the underlying flat or external data payload and
1089
+ // compute data pointer and offset into current flat or external.
1090
+ CordRep* payload = current_leaf_->IsSubstring()
1091
+ ? current_leaf_->substring()->child
1092
+ : current_leaf_;
1093
+ const char* data = payload->IsExternal() ? payload->external()->base
1094
+ : payload->flat()->Data();
1095
+ const size_t offset = current_chunk_.data() - data;
1528
1096
 
1529
- // Get the child node if we encounter a SUBSTRING.
1530
- size_t offset = 0;
1531
- size_t length = node->length;
1532
- if (node->tag == SUBSTRING) {
1533
- offset = node->substring()->start;
1534
- node = node->substring()->child;
1535
- }
1536
-
1537
- // Range to read ends with a proper (possibly empty) subrange of the current
1538
- // chunk.
1539
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1540
- assert(length > n);
1541
- if (n > 0) {
1542
- subnode = Concat(subnode, NewSubstring(CordRep::Ref(node), offset, n));
1543
- }
1544
- const char* data =
1545
- node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1546
- current_chunk_ = absl::string_view(data + offset + n, length - n);
1547
- current_leaf_ = node;
1097
+ auto* tree = CordRepSubstring::Substring(payload, offset, n);
1098
+ subcord.contents_.EmplaceTree(VerifyTree(tree), method);
1548
1099
  bytes_remaining_ -= n;
1549
- subcord.contents_.set_tree(VerifyTree(subnode));
1100
+ current_chunk_.remove_prefix(n);
1550
1101
  return subcord;
1551
1102
  }
1552
1103
 
1553
- void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1554
- assert(bytes_remaining_ >= n && "Attempted to iterate past `end()`");
1555
- assert(n >= current_chunk_.size()); // This should only be called when
1556
- // iterating to a new node.
1557
-
1558
- n -= current_chunk_.size();
1559
- bytes_remaining_ -= current_chunk_.size();
1560
-
1561
- if (stack_of_right_children_.empty()) {
1562
- // We have reached the end of the Cord.
1563
- assert(bytes_remaining_ == 0);
1564
- return;
1565
- }
1566
-
1567
- // Process the next node(s) on the stack, skipping whole subtrees depending on
1568
- // their length and how many bytes we are advancing.
1569
- CordRep* node = nullptr;
1570
- auto& stack_of_right_children = stack_of_right_children_;
1571
- while (!stack_of_right_children.empty()) {
1572
- node = stack_of_right_children.back();
1573
- stack_of_right_children.pop_back();
1574
- if (node->length > n) break;
1575
- n -= node->length;
1576
- bytes_remaining_ -= node->length;
1577
- node = nullptr;
1578
- }
1579
-
1580
- if (node == nullptr) {
1581
- // We have reached the end of the Cord.
1582
- assert(bytes_remaining_ == 0);
1583
- return;
1584
- }
1585
-
1586
- // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1587
- // right children to the stack for subsequent traversal.
1588
- while (node->tag == CONCAT) {
1589
- if (node->concat()->left->length > n) {
1590
- // Push right, descend left.
1591
- stack_of_right_children.push_back(node->concat()->right);
1592
- node = node->concat()->left;
1593
- } else {
1594
- // Skip left, descend right.
1595
- n -= node->concat()->left->length;
1596
- bytes_remaining_ -= node->concat()->left->length;
1597
- node = node->concat()->right;
1598
- }
1599
- }
1600
-
1601
- // Get the child node if we encounter a SUBSTRING.
1602
- size_t offset = 0;
1603
- size_t length = node->length;
1604
- if (node->tag == SUBSTRING) {
1605
- offset = node->substring()->start;
1606
- node = node->substring()->child;
1607
- }
1608
-
1609
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1610
- assert(length > n);
1611
- const char* data =
1612
- node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1613
- current_chunk_ = absl::string_view(data + offset + n, length - n);
1614
- current_leaf_ = node;
1615
- bytes_remaining_ -= n;
1616
- }
1617
-
1618
1104
  char Cord::operator[](size_t i) const {
1619
1105
  ABSL_HARDENING_ASSERT(i < size());
1620
1106
  size_t offset = i;
@@ -1622,30 +1108,21 @@ char Cord::operator[](size_t i) const {
1622
1108
  if (rep == nullptr) {
1623
1109
  return contents_.data()[i];
1624
1110
  }
1111
+ rep = cord_internal::SkipCrcNode(rep);
1625
1112
  while (true) {
1626
1113
  assert(rep != nullptr);
1627
1114
  assert(offset < rep->length);
1628
- if (rep->tag >= FLAT) {
1115
+ if (rep->IsFlat()) {
1629
1116
  // Get the "i"th character directly from the flat array.
1630
1117
  return rep->flat()->Data()[offset];
1631
- } else if (rep->tag == RING) {
1632
- return rep->ring()->GetCharacter(offset);
1633
- } else if (rep->tag == EXTERNAL) {
1118
+ } else if (rep->IsBtree()) {
1119
+ return rep->btree()->GetCharacter(offset);
1120
+ } else if (rep->IsExternal()) {
1634
1121
  // Get the "i"th character from the external array.
1635
1122
  return rep->external()->base[offset];
1636
- } else if (rep->tag == CONCAT) {
1637
- // Recursively branch to the side of the concatenation that the "i"th
1638
- // character is on.
1639
- size_t left_length = rep->concat()->left->length;
1640
- if (offset < left_length) {
1641
- rep = rep->concat()->left;
1642
- } else {
1643
- offset -= left_length;
1644
- rep = rep->concat()->right;
1645
- }
1646
1123
  } else {
1647
1124
  // This must be a substring a node, so bypass it to get to the child.
1648
- assert(rep->tag == SUBSTRING);
1125
+ assert(rep->IsSubstring());
1649
1126
  offset += rep->substring()->start;
1650
1127
  rep = rep->substring()->child;
1651
1128
  }
@@ -1653,6 +1130,7 @@ char Cord::operator[](size_t i) const {
1653
1130
  }
1654
1131
 
1655
1132
  absl::string_view Cord::FlattenSlowPath() {
1133
+ assert(contents_.is_tree());
1656
1134
  size_t total_size = size();
1657
1135
  CordRep* new_rep;
1658
1136
  char* new_buffer;
@@ -1673,31 +1151,36 @@ absl::string_view Cord::FlattenSlowPath() {
1673
1151
  s.size());
1674
1152
  });
1675
1153
  }
1676
- if (CordRep* tree = contents_.tree()) {
1677
- CordRep::Unref(tree);
1678
- }
1679
- contents_.set_tree(new_rep);
1154
+ CordzUpdateScope scope(contents_.cordz_info(), CordzUpdateTracker::kFlatten);
1155
+ CordRep::Unref(contents_.as_tree());
1156
+ contents_.SetTree(new_rep, scope);
1680
1157
  return absl::string_view(new_buffer, total_size);
1681
1158
  }
1682
1159
 
1683
1160
  /* static */ bool Cord::GetFlatAux(CordRep* rep, absl::string_view* fragment) {
1684
1161
  assert(rep != nullptr);
1685
- if (rep->tag >= FLAT) {
1162
+ rep = cord_internal::SkipCrcNode(rep);
1163
+ if (rep->IsFlat()) {
1686
1164
  *fragment = absl::string_view(rep->flat()->Data(), rep->length);
1687
1165
  return true;
1688
- } else if (rep->tag == EXTERNAL) {
1166
+ } else if (rep->IsExternal()) {
1689
1167
  *fragment = absl::string_view(rep->external()->base, rep->length);
1690
1168
  return true;
1691
- } else if (rep->tag == SUBSTRING) {
1169
+ } else if (rep->IsBtree()) {
1170
+ return rep->btree()->IsFlat(fragment);
1171
+ } else if (rep->IsSubstring()) {
1692
1172
  CordRep* child = rep->substring()->child;
1693
- if (child->tag >= FLAT) {
1173
+ if (child->IsFlat()) {
1694
1174
  *fragment = absl::string_view(
1695
1175
  child->flat()->Data() + rep->substring()->start, rep->length);
1696
1176
  return true;
1697
- } else if (child->tag == EXTERNAL) {
1177
+ } else if (child->IsExternal()) {
1698
1178
  *fragment = absl::string_view(
1699
1179
  child->external()->base + rep->substring()->start, rep->length);
1700
1180
  return true;
1181
+ } else if (child->IsBtree()) {
1182
+ return child->btree()->IsFlat(rep->substring()->start, rep->length,
1183
+ fragment);
1701
1184
  }
1702
1185
  }
1703
1186
  return false;
@@ -1706,7 +1189,10 @@ absl::string_view Cord::FlattenSlowPath() {
1706
1189
  /* static */ void Cord::ForEachChunkAux(
1707
1190
  absl::cord_internal::CordRep* rep,
1708
1191
  absl::FunctionRef<void(absl::string_view)> callback) {
1709
- if (rep->tag == RING) {
1192
+ assert(rep != nullptr);
1193
+ rep = cord_internal::SkipCrcNode(rep);
1194
+
1195
+ if (rep->IsBtree()) {
1710
1196
  ChunkIterator it(rep), end;
1711
1197
  while (it != end) {
1712
1198
  callback(*it);
@@ -1715,44 +1201,13 @@ absl::string_view Cord::FlattenSlowPath() {
1715
1201
  return;
1716
1202
  }
1717
1203
 
1718
- assert(rep != nullptr);
1719
- int stack_pos = 0;
1720
- constexpr int stack_max = 128;
1721
- // Stack of right branches for tree traversal
1722
- absl::cord_internal::CordRep* stack[stack_max];
1723
- absl::cord_internal::CordRep* current_node = rep;
1724
- while (true) {
1725
- if (current_node->tag == CONCAT) {
1726
- if (stack_pos == stack_max) {
1727
- // There's no more room on our stack array to add another right branch,
1728
- // and the idea is to avoid allocations, so call this function
1729
- // recursively to navigate this subtree further. (This is not something
1730
- // we expect to happen in practice).
1731
- ForEachChunkAux(current_node, callback);
1732
-
1733
- // Pop the next right branch and iterate.
1734
- current_node = stack[--stack_pos];
1735
- continue;
1736
- } else {
1737
- // Save the right branch for later traversal and continue down the left
1738
- // branch.
1739
- stack[stack_pos++] = current_node->concat()->right;
1740
- current_node = current_node->concat()->left;
1741
- continue;
1742
- }
1743
- }
1744
- // This is a leaf node, so invoke our callback.
1745
- absl::string_view chunk;
1746
- bool success = GetFlatAux(current_node, &chunk);
1747
- assert(success);
1748
- if (success) {
1749
- callback(chunk);
1750
- }
1751
- if (stack_pos == 0) {
1752
- // end of traversal
1753
- return;
1754
- }
1755
- current_node = stack[--stack_pos];
1204
+ // This is a leaf node, so invoke our callback.
1205
+ absl::cord_internal::CordRep* current_node = cord_internal::SkipCrcNode(rep);
1206
+ absl::string_view chunk;
1207
+ bool success = GetFlatAux(current_node, &chunk);
1208
+ assert(success);
1209
+ if (success) {
1210
+ callback(chunk);
1756
1211
  }
1757
1212
  }
1758
1213
 
@@ -1767,40 +1222,28 @@ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
1767
1222
  *os << " [";
1768
1223
  if (include_data) *os << static_cast<void*>(rep);
1769
1224
  *os << "]";
1770
- *os << " " << (IsRootBalanced(rep) ? 'b' : 'u');
1771
1225
  *os << " " << std::setw(indent) << "";
1772
- if (rep->tag == CONCAT) {
1773
- *os << "CONCAT depth=" << Depth(rep) << "\n";
1226
+ if (rep->IsCrc()) {
1227
+ *os << "CRC crc=" << rep->crc()->crc << "\n";
1774
1228
  indent += kIndentStep;
1775
- indents.push_back(indent);
1776
- stack.push_back(rep->concat()->right);
1777
- rep = rep->concat()->left;
1778
- } else if (rep->tag == SUBSTRING) {
1229
+ rep = rep->crc()->child;
1230
+ } else if (rep->IsSubstring()) {
1779
1231
  *os << "SUBSTRING @ " << rep->substring()->start << "\n";
1780
1232
  indent += kIndentStep;
1781
1233
  rep = rep->substring()->child;
1782
1234
  } else { // Leaf or ring
1783
- if (rep->tag == EXTERNAL) {
1235
+ if (rep->IsExternal()) {
1784
1236
  *os << "EXTERNAL [";
1785
1237
  if (include_data)
1786
1238
  *os << absl::CEscape(std::string(rep->external()->base, rep->length));
1787
1239
  *os << "]\n";
1788
- } else if (rep->tag >= FLAT) {
1789
- *os << "FLAT cap=" << rep->flat()->Capacity()
1790
- << " [";
1240
+ } else if (rep->IsFlat()) {
1241
+ *os << "FLAT cap=" << rep->flat()->Capacity() << " [";
1791
1242
  if (include_data)
1792
1243
  *os << absl::CEscape(std::string(rep->flat()->Data(), rep->length));
1793
1244
  *os << "]\n";
1794
1245
  } else {
1795
- assert(rep->tag == RING);
1796
- auto* ring = rep->ring();
1797
- *os << "RING, entries = " << ring->entries() << "\n";
1798
- CordRepRing::index_type head = ring->head();
1799
- do {
1800
- DumpNode(ring->entry_child(head), include_data, os,
1801
- indent + kIndentStep);
1802
- head = ring->advance(head);;
1803
- } while (head != ring->tail());
1246
+ CordRepBtree::Dump(rep, /*label=*/ "", include_data, *os);
1804
1247
  }
1805
1248
  if (stack.empty()) break;
1806
1249
  rep = stack.back();
@@ -1820,7 +1263,7 @@ static std::string ReportError(CordRep* root, CordRep* node) {
1820
1263
  }
1821
1264
 
1822
1265
  static bool VerifyNode(CordRep* root, CordRep* start_node,
1823
- bool full_validation) {
1266
+ bool /* full_validation */) {
1824
1267
  absl::InlinedVector<CordRep*, 2> worklist;
1825
1268
  worklist.push_back(start_node);
1826
1269
  do {
@@ -1830,100 +1273,33 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1830
1273
  ABSL_INTERNAL_CHECK(node != nullptr, ReportError(root, node));
1831
1274
  if (node != root) {
1832
1275
  ABSL_INTERNAL_CHECK(node->length != 0, ReportError(root, node));
1276
+ ABSL_INTERNAL_CHECK(!node->IsCrc(), ReportError(root, node));
1833
1277
  }
1834
1278
 
1835
- if (node->tag == CONCAT) {
1836
- ABSL_INTERNAL_CHECK(node->concat()->left != nullptr,
1837
- ReportError(root, node));
1838
- ABSL_INTERNAL_CHECK(node->concat()->right != nullptr,
1839
- ReportError(root, node));
1840
- ABSL_INTERNAL_CHECK((node->length == node->concat()->left->length +
1841
- node->concat()->right->length),
1279
+ if (node->IsFlat()) {
1280
+ ABSL_INTERNAL_CHECK(node->length <= node->flat()->Capacity(),
1842
1281
  ReportError(root, node));
1843
- if (full_validation) {
1844
- worklist.push_back(node->concat()->right);
1845
- worklist.push_back(node->concat()->left);
1846
- }
1847
- } else if (node->tag >= FLAT) {
1848
- ABSL_INTERNAL_CHECK(
1849
- node->length <= node->flat()->Capacity(),
1850
- ReportError(root, node));
1851
- } else if (node->tag == EXTERNAL) {
1282
+ } else if (node->IsExternal()) {
1852
1283
  ABSL_INTERNAL_CHECK(node->external()->base != nullptr,
1853
1284
  ReportError(root, node));
1854
- } else if (node->tag == SUBSTRING) {
1285
+ } else if (node->IsSubstring()) {
1855
1286
  ABSL_INTERNAL_CHECK(
1856
1287
  node->substring()->start < node->substring()->child->length,
1857
1288
  ReportError(root, node));
1858
1289
  ABSL_INTERNAL_CHECK(node->substring()->start + node->length <=
1859
1290
  node->substring()->child->length,
1860
1291
  ReportError(root, node));
1292
+ } else if (node->IsCrc()) {
1293
+ ABSL_INTERNAL_CHECK(node->crc()->child != nullptr,
1294
+ ReportError(root, node));
1295
+ ABSL_INTERNAL_CHECK(node->crc()->length == node->crc()->child->length,
1296
+ ReportError(root, node));
1297
+ worklist.push_back(node->crc()->child);
1861
1298
  }
1862
1299
  } while (!worklist.empty());
1863
1300
  return true;
1864
1301
  }
1865
1302
 
1866
- // Traverses the tree and computes the total memory allocated.
1867
- /* static */ size_t Cord::MemoryUsageAux(const CordRep* rep) {
1868
- size_t total_mem_usage = 0;
1869
-
1870
- // Allow a quick exit for the common case that the root is a leaf.
1871
- if (RepMemoryUsageLeaf(rep, &total_mem_usage)) {
1872
- return total_mem_usage;
1873
- }
1874
-
1875
- // Iterate over the tree. cur_node is never a leaf node and leaf nodes will
1876
- // never be appended to tree_stack. This reduces overhead from manipulating
1877
- // tree_stack.
1878
- absl::InlinedVector<const CordRep*, kInlinedVectorSize> tree_stack;
1879
- const CordRep* cur_node = rep;
1880
- while (true) {
1881
- const CordRep* next_node = nullptr;
1882
-
1883
- if (cur_node->tag == CONCAT) {
1884
- total_mem_usage += sizeof(CordRepConcat);
1885
- const CordRep* left = cur_node->concat()->left;
1886
- if (!RepMemoryUsageLeaf(left, &total_mem_usage)) {
1887
- next_node = left;
1888
- }
1889
-
1890
- const CordRep* right = cur_node->concat()->right;
1891
- if (!RepMemoryUsageLeaf(right, &total_mem_usage)) {
1892
- if (next_node) {
1893
- tree_stack.push_back(next_node);
1894
- }
1895
- next_node = right;
1896
- }
1897
- } else if (cur_node->tag == RING) {
1898
- total_mem_usage += CordRepRing::AllocSize(cur_node->ring()->capacity());
1899
- const CordRepRing* ring = cur_node->ring();
1900
- CordRepRing::index_type pos = ring->head(), tail = ring->tail();
1901
- do {
1902
- CordRep* node = ring->entry_child(pos);
1903
- assert(node->tag >= FLAT || node->tag == EXTERNAL);
1904
- RepMemoryUsageLeaf(node, &total_mem_usage);
1905
- } while ((pos = ring->advance(pos)) != tail);
1906
- } else {
1907
- // Since cur_node is not a leaf or a concat node it must be a substring.
1908
- assert(cur_node->tag == SUBSTRING);
1909
- total_mem_usage += sizeof(CordRepSubstring);
1910
- next_node = cur_node->substring()->child;
1911
- if (RepMemoryUsageLeaf(next_node, &total_mem_usage)) {
1912
- next_node = nullptr;
1913
- }
1914
- }
1915
-
1916
- if (!next_node) {
1917
- if (tree_stack.empty()) {
1918
- return total_mem_usage;
1919
- }
1920
- next_node = tree_stack.back();
1921
- tree_stack.pop_back();
1922
- }
1923
- cur_node = next_node;
1924
- }
1925
- }
1926
-
1927
1303
  std::ostream& operator<<(std::ostream& out, const Cord& cord) {
1928
1304
  for (absl::string_view chunk : cord.Chunks()) {
1929
1305
  out.write(chunk.data(), chunk.size());
@@ -1941,7 +1317,6 @@ uint8_t CordTestAccess::LengthToTag(size_t s) {
1941
1317
  ABSL_INTERNAL_CHECK(s <= kMaxFlatLength, absl::StrCat("Invalid length ", s));
1942
1318
  return cord_internal::AllocatedSizeToTag(s + cord_internal::kFlatOverhead);
1943
1319
  }
1944
- size_t CordTestAccess::SizeofCordRepConcat() { return sizeof(CordRepConcat); }
1945
1320
  size_t CordTestAccess::SizeofCordRepExternal() {
1946
1321
  return sizeof(CordRepExternal);
1947
1322
  }