grpc 1.42.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (2080) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +705 -451
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/endpoint_config.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +122 -44
  6. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  7. data/include/grpc/event_engine/memory_allocator.h +27 -26
  8. data/include/grpc/event_engine/memory_request.h +57 -0
  9. data/include/grpc/event_engine/port.h +1 -1
  10. data/include/grpc/event_engine/slice.h +286 -0
  11. data/include/grpc/event_engine/slice_buffer.h +135 -0
  12. data/include/grpc/grpc.h +43 -27
  13. data/include/grpc/grpc_posix.h +20 -19
  14. data/include/grpc/grpc_security.h +323 -195
  15. data/include/grpc/grpc_security_constants.h +1 -14
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  18. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  19. data/include/grpc/impl/codegen/compression_types.h +2 -3
  20. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  21. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  22. data/include/grpc/impl/codegen/grpc_types.h +31 -30
  23. data/include/grpc/impl/codegen/port_platform.h +107 -47
  24. data/include/grpc/impl/codegen/slice.h +5 -2
  25. data/include/grpc/slice.h +0 -11
  26. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  27. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  28. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  29. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  30. data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
  31. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  32. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  33. data/src/core/ext/filters/client_channel/backup_poller.cc +23 -19
  34. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  35. data/src/core/ext/filters/client_channel/channel_connectivity.cc +54 -30
  36. data/src/core/ext/filters/client_channel/client_channel.cc +684 -615
  37. data/src/core/ext/filters/client_channel/client_channel.h +103 -58
  38. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -6
  39. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  40. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  41. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  42. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -41
  43. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  44. data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
  45. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  46. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  47. data/src/core/ext/filters/client_channel/connector.h +13 -8
  48. data/src/core/ext/filters/client_channel/dynamic_filters.cc +36 -51
  49. data/src/core/ext/filters/client_channel/dynamic_filters.h +19 -10
  50. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  51. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  52. data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
  53. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  54. data/src/core/ext/filters/client_channel/http_proxy.cc +96 -130
  55. data/src/core/ext/filters/client_channel/http_proxy.h +25 -1
  56. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +12 -8
  57. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  58. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +36 -15
  60. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +15 -9
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -19
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +380 -313
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  66. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  67. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -5
  68. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  69. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  70. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  71. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  73. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1152 -0
  74. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  75. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +228 -207
  76. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +491 -452
  77. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +523 -391
  78. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +16 -6
  79. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +636 -626
  80. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +280 -254
  81. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +147 -134
  82. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +275 -223
  83. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +266 -249
  84. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +64 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +288 -277
  87. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -182
  88. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +589 -737
  89. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  90. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  91. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  92. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +43 -33
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -334
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -24
  96. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -71
  97. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +358 -357
  98. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  99. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  100. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  101. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  102. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +124 -255
  103. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
  104. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  105. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -102
  106. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +258 -0
  107. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +123 -0
  108. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
  109. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +648 -503
  110. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  111. data/src/core/ext/filters/client_channel/retry_filter.cc +382 -294
  112. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  113. data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
  114. data/src/core/ext/filters/client_channel/retry_service_config.h +41 -32
  115. data/src/core/ext/filters/client_channel/retry_throttle.cc +18 -39
  116. data/src/core/ext/filters/client_channel/retry_throttle.h +26 -13
  117. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +37 -19
  118. data/src/core/ext/filters/client_channel/subchannel.cc +272 -319
  119. data/src/core/ext/filters/client_channel/subchannel.h +100 -47
  120. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  121. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  123. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  124. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  125. data/src/core/ext/filters/deadline/deadline_filter.cc +48 -39
  126. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  127. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +179 -403
  128. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +38 -6
  129. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  130. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
  131. data/src/core/ext/filters/http/client/http_client_filter.cc +106 -551
  132. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  133. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  134. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  135. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  136. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +112 -333
  137. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  138. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +85 -161
  139. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  140. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  141. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  142. data/src/core/ext/filters/message_size/message_size_filter.cc +130 -159
  143. data/src/core/ext/filters/message_size/message_size_filter.h +41 -17
  144. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  145. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  146. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
  147. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  149. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  150. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +160 -0
  151. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +268 -110
  153. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  154. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +387 -216
  155. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  156. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  157. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  160. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +791 -1179
  161. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  162. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  163. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  164. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  165. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  166. data/src/core/ext/transport/chttp2/transport/flow_control.cc +297 -285
  167. data/src/core/ext/transport/chttp2/transport/flow_control.h +191 -293
  168. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  169. data/src/core/ext/transport/chttp2/transport/frame_data.cc +66 -218
  170. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  171. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +16 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  173. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -7
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -9
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +27 -59
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -16
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  181. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +381 -260
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  184. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
  185. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  186. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +157 -229
  187. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +143 -42
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +50 -50
  190. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  191. data/src/core/ext/transport/chttp2/transport/internal.h +74 -163
  192. data/src/core/ext/transport/chttp2/transport/parsing.cc +170 -91
  193. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  194. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  196. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  197. data/src/core/ext/transport/chttp2/transport/varint.h +13 -8
  198. data/src/core/ext/transport/chttp2/transport/writing.cc +150 -183
  199. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  200. data/src/core/ext/transport/inproc/inproc_transport.cc +237 -323
  201. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  202. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  207. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  208. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  224. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  226. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  227. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  228. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  229. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  230. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  231. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  233. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  234. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  235. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  236. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  237. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  240. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  241. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  274. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  275. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  276. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  277. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  278. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  279. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  283. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  284. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  285. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  290. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  291. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  292. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  293. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  294. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  295. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  296. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  297. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  298. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  299. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  300. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  301. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  302. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  303. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  304. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  305. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  329. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  333. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  340. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  343. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  401. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  402. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  404. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  405. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  414. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  415. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  432. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  433. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  446. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  447. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  448. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  449. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  450. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  451. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  452. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  453. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  454. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  456. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  457. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  458. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  459. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  460. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  467. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  468. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  469. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  471. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  472. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  473. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  474. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  475. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  476. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  477. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  478. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  479. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  482. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  483. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  484. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  485. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  486. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  487. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  490. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  491. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  492. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  493. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  494. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  495. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  513. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  515. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  516. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  517. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  519. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  521. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  522. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  523. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  524. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  525. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  528. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  529. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  530. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  531. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  532. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  533. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  535. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  568. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  569. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  570. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  571. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  573. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  580. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  581. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  584. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  587. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  588. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  589. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  590. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  593. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  594. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  595. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  596. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  597. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  598. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  637. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  638. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  639. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  640. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  641. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  642. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  644. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  645. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  646. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  647. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  648. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  649. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  650. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  651. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  652. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  653. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  655. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  667. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  668. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  669. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  670. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  671. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  672. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  673. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  675. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  676. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  677. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  693. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  694. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  697. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  698. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  699. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  700. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  701. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  702. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  703. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  704. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  705. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  706. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  709. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  710. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  711. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  713. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  714. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  715. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  716. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  717. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  719. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  720. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  721. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  723. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  724. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  725. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  729. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  730. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  731. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  732. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  733. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  734. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  735. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  736. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  737. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  741. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  743. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  744. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  745. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  746. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  747. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  755. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  756. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  757. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  758. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  759. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  760. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  761. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  762. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  763. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  764. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  765. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  767. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  768. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  769. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  770. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  771. data/src/core/ext/xds/certificate_provider_store.h +28 -2
  772. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +20 -14
  773. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +11 -3
  774. data/src/core/ext/xds/upb_utils.h +45 -0
  775. data/src/core/ext/xds/xds_api.cc +329 -3648
  776. data/src/core/ext/xds/xds_api.h +78 -630
  777. data/src/core/ext/xds/xds_bootstrap.cc +10 -443
  778. data/src/core/ext/xds/xds_bootstrap.h +44 -81
  779. data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
  780. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  781. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  782. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  783. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -21
  784. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  785. data/src/core/ext/xds/xds_client.cc +1278 -2037
  786. data/src/core/ext/xds/xds_client.h +158 -197
  787. data/src/core/ext/xds/xds_client_grpc.cc +210 -0
  788. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  789. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  790. data/src/core/ext/xds/xds_client_stats.h +9 -7
  791. data/src/core/ext/xds/xds_cluster.cc +659 -0
  792. data/src/core/ext/xds/xds_cluster.h +116 -0
  793. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +152 -0
  794. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +92 -0
  795. data/src/core/ext/xds/xds_common_types.cc +501 -0
  796. data/src/core/ext/xds/xds_common_types.h +108 -0
  797. data/src/core/ext/xds/xds_endpoint.cc +468 -0
  798. data/src/core/ext/xds/xds_endpoint.h +139 -0
  799. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -59
  800. data/src/core/ext/xds/xds_http_fault_filter.h +18 -24
  801. data/src/core/ext/xds/xds_http_filters.cc +66 -66
  802. data/src/core/ext/xds/xds_http_filters.h +72 -24
  803. data/src/core/ext/xds/xds_http_rbac_filter.cc +505 -0
  804. data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
  805. data/src/core/ext/xds/xds_lb_policy_registry.cc +243 -0
  806. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  807. data/src/core/ext/xds/xds_listener.cc +1144 -0
  808. data/src/core/ext/xds/xds_listener.h +224 -0
  809. data/src/core/ext/xds/xds_resource_type.h +104 -0
  810. data/src/core/ext/xds/xds_resource_type_impl.h +86 -0
  811. data/src/core/ext/xds/xds_route_config.cc +1166 -0
  812. data/src/core/ext/xds/xds_route_config.h +241 -0
  813. data/src/core/ext/xds/xds_routing.cc +264 -0
  814. data/src/core/ext/xds/xds_routing.h +106 -0
  815. data/src/core/ext/xds/xds_server_config_fetcher.cc +1155 -324
  816. data/src/core/ext/xds/xds_transport.h +86 -0
  817. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  818. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  819. data/src/core/lib/address_utils/parse_address.cc +36 -16
  820. data/src/core/lib/address_utils/parse_address.h +11 -2
  821. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  822. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  823. data/src/core/lib/avl/avl.h +476 -88
  824. data/src/core/lib/backoff/backoff.cc +9 -40
  825. data/src/core/lib/backoff/backoff.h +12 -12
  826. data/src/core/lib/channel/call_finalization.h +88 -0
  827. data/src/core/lib/channel/call_tracer.h +16 -7
  828. data/src/core/lib/channel/channel_args.cc +274 -48
  829. data/src/core/lib/channel/channel_args.h +413 -12
  830. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  831. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  832. data/src/core/lib/channel/channel_fwd.h +26 -0
  833. data/src/core/lib/channel/channel_stack.cc +64 -17
  834. data/src/core/lib/channel/channel_stack.h +96 -14
  835. data/src/core/lib/channel/channel_stack_builder.cc +18 -280
  836. data/src/core/lib/channel/channel_stack_builder.h +112 -150
  837. data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
  838. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  839. data/src/core/lib/channel/channel_trace.cc +12 -22
  840. data/src/core/lib/channel/channel_trace.h +6 -3
  841. data/src/core/lib/channel/channelz.cc +36 -49
  842. data/src/core/lib/channel/channelz.h +24 -7
  843. data/src/core/lib/channel/channelz_registry.cc +11 -19
  844. data/src/core/lib/channel/channelz_registry.h +10 -9
  845. data/src/core/lib/channel/connected_channel.cc +704 -48
  846. data/src/core/lib/channel/connected_channel.h +3 -4
  847. data/src/core/lib/channel/context.h +11 -0
  848. data/src/core/lib/channel/promise_based_filter.cc +2126 -0
  849. data/src/core/lib/channel/promise_based_filter.h +848 -0
  850. data/src/core/lib/channel/status_util.cc +29 -0
  851. data/src/core/lib/channel/status_util.h +9 -2
  852. data/src/core/lib/compression/compression.cc +26 -113
  853. data/src/core/lib/compression/compression_internal.cc +170 -204
  854. data/src/core/lib/compression/compression_internal.h +68 -72
  855. data/src/core/lib/compression/message_compress.cc +18 -16
  856. data/src/core/lib/compression/message_compress.h +4 -5
  857. data/src/core/lib/config/core_configuration.cc +18 -3
  858. data/src/core/lib/config/core_configuration.h +133 -36
  859. data/src/core/lib/debug/event_log.cc +88 -0
  860. data/src/core/lib/debug/event_log.h +81 -0
  861. data/src/core/lib/debug/histogram_view.cc +69 -0
  862. data/src/core/lib/debug/histogram_view.h +37 -0
  863. data/src/core/lib/debug/stats.cc +31 -135
  864. data/src/core/lib/debug/stats.h +30 -37
  865. data/src/core/lib/debug/stats_data.cc +290 -638
  866. data/src/core/lib/debug/stats_data.h +263 -527
  867. data/src/core/lib/debug/trace.cc +0 -2
  868. data/src/core/lib/debug/trace.h +15 -14
  869. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
  870. data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
  871. data/src/core/lib/event_engine/common_closures.h +71 -0
  872. data/src/core/lib/event_engine/default_event_engine.cc +94 -0
  873. data/src/core/lib/event_engine/default_event_engine.h +49 -0
  874. data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
  875. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  876. data/src/core/lib/event_engine/executor/executor.h +38 -0
  877. data/src/core/lib/event_engine/forkable.cc +101 -0
  878. data/src/core/lib/event_engine/forkable.h +61 -0
  879. data/src/core/lib/event_engine/handle_containers.h +67 -0
  880. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  881. data/src/core/lib/event_engine/poller.h +62 -0
  882. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  883. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  884. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  885. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  886. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  887. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  888. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  889. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  890. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  891. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  892. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  893. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  894. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  895. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +577 -0
  896. data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
  897. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  898. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  899. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  900. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  901. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  902. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  903. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  904. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +174 -0
  905. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  906. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  907. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  908. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  909. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  910. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  911. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  912. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  913. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  914. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  915. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  916. data/src/core/lib/event_engine/slice.cc +103 -0
  917. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  918. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  919. data/src/core/lib/event_engine/thread_pool.cc +276 -0
  920. data/src/core/lib/event_engine/thread_pool.h +137 -0
  921. data/src/core/lib/event_engine/time_util.cc +30 -0
  922. data/src/core/lib/event_engine/time_util.h +32 -0
  923. data/src/core/lib/event_engine/trace.cc +18 -0
  924. data/src/core/lib/event_engine/trace.h +30 -0
  925. data/src/core/lib/event_engine/utils.cc +44 -0
  926. data/src/core/lib/event_engine/utils.h +36 -0
  927. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  928. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  929. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  930. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  931. data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
  932. data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
  933. data/src/core/lib/experiments/config.cc +146 -0
  934. data/src/core/lib/experiments/config.h +43 -0
  935. data/src/core/lib/experiments/experiments.cc +86 -0
  936. data/src/core/lib/experiments/experiments.h +63 -0
  937. data/src/core/lib/gpr/alloc.cc +1 -9
  938. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  939. data/src/core/lib/gpr/log.cc +5 -0
  940. data/src/core/lib/gpr/log_linux.cc +3 -4
  941. data/src/core/lib/gpr/log_windows.cc +0 -1
  942. data/src/core/lib/gpr/string.h +1 -1
  943. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  944. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  945. data/src/core/lib/gpr/sync_posix.cc +1 -14
  946. data/src/core/lib/gpr/time.cc +13 -10
  947. data/src/core/lib/gpr/time_posix.cc +6 -15
  948. data/src/core/lib/gpr/time_precise.h +1 -1
  949. data/src/core/lib/gpr/time_windows.cc +10 -7
  950. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  951. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  952. data/src/core/lib/gpr/useful.h +58 -0
  953. data/src/core/lib/gprpp/bitset.h +27 -14
  954. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  955. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  956. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  957. data/src/core/lib/gprpp/debug_location.h +41 -7
  958. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  959. data/src/core/lib/gprpp/env.h +53 -0
  960. data/src/core/lib/gprpp/env_linux.cc +80 -0
  961. data/src/core/lib/gprpp/env_posix.cc +47 -0
  962. data/src/core/lib/gprpp/env_windows.cc +56 -0
  963. data/src/core/lib/gprpp/examine_stack.h +0 -1
  964. data/src/core/lib/gprpp/fork.cc +17 -28
  965. data/src/core/lib/gprpp/fork.h +0 -8
  966. data/src/core/lib/gprpp/global_config.h +2 -4
  967. data/src/core/lib/gprpp/global_config_env.cc +16 -14
  968. data/src/core/lib/gprpp/global_config_env.h +5 -3
  969. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  970. data/src/core/lib/gprpp/host_port.cc +2 -0
  971. data/src/core/lib/gprpp/load_file.cc +75 -0
  972. data/src/core/lib/gprpp/load_file.h +33 -0
  973. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  974. data/src/core/lib/gprpp/match.h +2 -0
  975. data/src/core/lib/gprpp/memory.h +1 -5
  976. data/src/core/lib/gprpp/no_destruct.h +94 -0
  977. data/src/core/lib/gprpp/notification.h +67 -0
  978. data/src/core/lib/gprpp/orphanable.h +2 -5
  979. data/src/core/lib/gprpp/packed_table.h +40 -0
  980. data/src/core/lib/gprpp/per_cpu.h +46 -0
  981. data/src/core/lib/gprpp/ref_counted.h +4 -4
  982. data/src/core/lib/gprpp/ref_counted_ptr.h +23 -39
  983. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  984. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  985. data/src/core/lib/gprpp/stat.h +0 -2
  986. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  987. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  988. data/src/core/lib/gprpp/status_helper.cc +75 -48
  989. data/src/core/lib/gprpp/status_helper.h +16 -21
  990. data/src/core/lib/gprpp/strerror.cc +41 -0
  991. data/src/core/lib/gprpp/strerror.h +29 -0
  992. data/src/core/lib/gprpp/sync.h +3 -1
  993. data/src/core/lib/gprpp/table.h +42 -2
  994. data/src/core/lib/gprpp/tchar.cc +49 -0
  995. data/src/core/lib/gprpp/tchar.h +33 -0
  996. data/src/core/lib/gprpp/thd.h +2 -5
  997. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  998. data/src/core/lib/gprpp/thd_windows.cc +3 -2
  999. data/src/core/lib/gprpp/time.cc +234 -0
  1000. data/src/core/lib/gprpp/time.h +367 -0
  1001. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  1002. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1003. data/src/core/lib/gprpp/time_util.cc +4 -0
  1004. data/src/core/lib/gprpp/time_util.h +1 -1
  1005. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  1006. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  1007. data/src/core/lib/gprpp/validation_errors.h +127 -0
  1008. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  1009. data/src/core/lib/gprpp/work_serializer.h +86 -0
  1010. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1011. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1012. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1013. data/src/core/lib/http/format_request.cc +62 -29
  1014. data/src/core/lib/http/format_request.h +10 -7
  1015. data/src/core/lib/http/httpcli.cc +313 -244
  1016. data/src/core/lib/http/httpcli.h +234 -90
  1017. data/src/core/lib/http/httpcli_security_connector.cc +84 -86
  1018. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  1019. data/src/core/lib/http/parser.cc +124 -65
  1020. data/src/core/lib/http/parser.h +18 -2
  1021. data/src/core/lib/iomgr/buffer_list.cc +110 -121
  1022. data/src/core/lib/iomgr/buffer_list.h +68 -52
  1023. data/src/core/lib/iomgr/call_combiner.cc +17 -40
  1024. data/src/core/lib/iomgr/call_combiner.h +3 -4
  1025. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  1026. data/src/core/lib/iomgr/closure.h +68 -14
  1027. data/src/core/lib/iomgr/combiner.cc +11 -9
  1028. data/src/core/lib/iomgr/endpoint.cc +4 -4
  1029. data/src/core/lib/iomgr/endpoint.h +7 -6
  1030. data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -53
  1031. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  1032. data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
  1033. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  1034. data/src/core/lib/iomgr/error.cc +30 -813
  1035. data/src/core/lib/iomgr/error.h +22 -295
  1036. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  1037. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  1038. data/src/core/lib/iomgr/ev_epoll1_linux.cc +88 -84
  1039. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  1040. data/src/core/lib/iomgr/ev_poll_posix.cc +123 -109
  1041. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  1042. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  1043. data/src/core/lib/iomgr/ev_posix.h +6 -4
  1044. data/src/core/lib/iomgr/exec_ctx.cc +14 -109
  1045. data/src/core/lib/iomgr/exec_ctx.h +24 -66
  1046. data/src/core/lib/iomgr/executor.cc +16 -21
  1047. data/src/core/lib/iomgr/executor.h +1 -4
  1048. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  1049. data/src/core/lib/iomgr/internal_errqueue.cc +40 -47
  1050. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1051. data/src/core/lib/iomgr/iocp_windows.cc +10 -10
  1052. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1053. data/src/core/lib/iomgr/iomgr.cc +6 -2
  1054. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1055. data/src/core/lib/iomgr/iomgr_posix.cc +4 -3
  1056. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +4 -2
  1057. data/src/core/lib/iomgr/iomgr_windows.cc +3 -2
  1058. data/src/core/lib/iomgr/load_file.cc +5 -9
  1059. data/src/core/lib/iomgr/lockfree_event.cc +10 -27
  1060. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1061. data/src/core/lib/iomgr/pollset.cc +1 -1
  1062. data/src/core/lib/iomgr/pollset.h +5 -5
  1063. data/src/core/lib/iomgr/pollset_set.h +1 -3
  1064. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1065. data/src/core/lib/iomgr/port.h +29 -12
  1066. data/src/core/lib/iomgr/python_util.h +2 -2
  1067. data/src/core/lib/iomgr/resolve_address.cc +16 -22
  1068. data/src/core/lib/iomgr/resolve_address.h +79 -46
  1069. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1070. data/src/core/lib/iomgr/resolve_address_posix.cc +112 -78
  1071. data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
  1072. data/src/core/lib/iomgr/resolve_address_windows.cc +125 -81
  1073. data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
  1074. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1075. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1076. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1077. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +63 -0
  1078. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1079. data/src/core/lib/iomgr/socket_utils_common_posix.cc +44 -81
  1080. data/src/core/lib/iomgr/socket_utils_posix.cc +84 -1
  1081. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  1082. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  1083. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1084. data/src/core/lib/iomgr/tcp_client.cc +11 -9
  1085. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1086. data/src/core/lib/iomgr/tcp_client_cfstream.cc +28 -26
  1087. data/src/core/lib/iomgr/tcp_client_posix.cc +194 -85
  1088. data/src/core/lib/iomgr/tcp_client_posix.h +14 -12
  1089. data/src/core/lib/iomgr/tcp_client_windows.cc +33 -35
  1090. data/src/core/lib/iomgr/tcp_posix.cc +465 -254
  1091. data/src/core/lib/iomgr/tcp_posix.h +4 -4
  1092. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  1093. data/src/core/lib/iomgr/tcp_server.h +5 -4
  1094. data/src/core/lib/iomgr/tcp_server_posix.cc +109 -101
  1095. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -20
  1096. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +50 -49
  1097. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -16
  1098. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  1099. data/src/core/lib/iomgr/tcp_server_windows.cc +45 -48
  1100. data/src/core/lib/iomgr/tcp_windows.cc +43 -46
  1101. data/src/core/lib/iomgr/tcp_windows.h +1 -3
  1102. data/src/core/lib/iomgr/timer.cc +2 -2
  1103. data/src/core/lib/iomgr/timer.h +18 -13
  1104. data/src/core/lib/iomgr/timer_generic.cc +108 -97
  1105. data/src/core/lib/iomgr/timer_manager.cc +14 -14
  1106. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -34
  1107. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1108. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1109. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -5
  1110. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  1111. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1112. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1113. data/src/core/lib/json/json.h +20 -24
  1114. data/src/core/lib/json/json_args.h +34 -0
  1115. data/src/core/lib/json/json_channel_args.h +42 -0
  1116. data/src/core/lib/json/json_object_loader.cc +207 -0
  1117. data/src/core/lib/json/json_object_loader.h +620 -0
  1118. data/src/core/lib/json/json_reader.cc +155 -75
  1119. data/src/core/lib/json/json_util.cc +17 -37
  1120. data/src/core/lib/json/json_util.h +18 -9
  1121. data/src/core/lib/json/json_writer.cc +6 -1
  1122. data/src/core/lib/load_balancing/lb_policy.cc +93 -0
  1123. data/src/core/lib/load_balancing/lb_policy.h +439 -0
  1124. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1125. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  1126. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1127. data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
  1128. data/src/core/lib/matchers/matchers.cc +10 -8
  1129. data/src/core/lib/matchers/matchers.h +2 -0
  1130. data/src/core/lib/promise/activity.cc +134 -0
  1131. data/src/core/lib/promise/activity.h +604 -0
  1132. data/src/core/lib/promise/arena_promise.h +230 -0
  1133. data/src/core/lib/promise/context.h +92 -0
  1134. data/src/core/lib/promise/detail/basic_seq.h +497 -0
  1135. data/src/core/lib/promise/detail/promise_factory.h +235 -0
  1136. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1137. data/src/core/lib/promise/detail/status.h +78 -0
  1138. data/src/core/lib/promise/detail/switch.h +1455 -0
  1139. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +50 -0
  1140. data/src/core/lib/promise/for_each.h +129 -0
  1141. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1142. data/src/core/lib/promise/latch.h +103 -0
  1143. data/src/core/lib/promise/loop.h +138 -0
  1144. data/src/core/lib/promise/map.h +87 -0
  1145. data/src/core/lib/promise/map_pipe.h +87 -0
  1146. data/src/core/lib/promise/pipe.cc +19 -0
  1147. data/src/core/lib/promise/pipe.h +505 -0
  1148. data/src/core/lib/promise/poll.h +79 -0
  1149. data/src/core/lib/promise/promise.h +96 -0
  1150. data/src/core/lib/promise/race.h +83 -0
  1151. data/src/core/lib/promise/seq.h +106 -0
  1152. data/src/core/lib/promise/sleep.cc +90 -0
  1153. data/src/core/lib/promise/sleep.h +84 -0
  1154. data/src/core/lib/promise/try_concurrently.h +341 -0
  1155. data/src/core/lib/promise/try_seq.h +174 -0
  1156. data/src/core/lib/resolver/resolver.cc +37 -0
  1157. data/src/core/lib/resolver/resolver.h +138 -0
  1158. data/src/core/lib/resolver/resolver_factory.h +77 -0
  1159. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1160. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1161. data/src/core/lib/resolver/server_address.cc +181 -0
  1162. data/src/core/lib/resolver/server_address.h +145 -0
  1163. data/src/core/lib/resource_quota/api.cc +104 -0
  1164. data/src/core/lib/resource_quota/api.h +49 -0
  1165. data/src/core/lib/resource_quota/arena.cc +138 -0
  1166. data/src/core/lib/resource_quota/arena.h +252 -0
  1167. data/src/core/lib/resource_quota/memory_quota.cc +603 -0
  1168. data/src/core/lib/resource_quota/memory_quota.h +530 -0
  1169. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1170. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1171. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1172. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1173. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1174. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1175. data/src/core/lib/resource_quota/trace.cc +19 -0
  1176. data/src/core/lib/resource_quota/trace.h +24 -0
  1177. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1178. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1179. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1180. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1181. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
  1182. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1183. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
  1184. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1185. data/src/core/lib/security/authorization/matchers.cc +241 -0
  1186. data/src/core/lib/security/authorization/matchers.h +218 -0
  1187. data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
  1188. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1189. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
  1190. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1191. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1192. data/src/core/lib/security/context/security_context.cc +9 -4
  1193. data/src/core/lib/security/context/security_context.h +33 -4
  1194. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1195. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1198. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1199. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1200. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1201. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1202. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1203. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1204. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1205. data/src/core/lib/security/credentials/credentials.h +106 -99
  1206. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +249 -107
  1207. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1208. data/src/core/lib/security/credentials/external/aws_request_signer.cc +13 -3
  1209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +137 -103
  1210. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1211. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
  1212. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1213. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +76 -45
  1214. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1215. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -43
  1216. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1217. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -8
  1218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +118 -80
  1219. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1220. data/src/core/lib/security/credentials/iam/iam_credentials.cc +32 -30
  1221. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1222. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1223. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1224. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -12
  1225. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1226. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1227. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +96 -61
  1229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +6 -4
  1230. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1231. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1232. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +214 -222
  1233. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1234. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +104 -156
  1235. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1236. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1237. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +21 -29
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +75 -58
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +73 -14
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1244. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1245. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1246. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1247. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1248. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1249. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1250. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1251. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1252. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +46 -45
  1253. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1254. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -70
  1255. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1256. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +23 -24
  1257. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +34 -27
  1258. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
  1260. data/src/core/lib/security/security_connector/load_system_roots_supported.h +46 -0
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.cc +52 -40
  1262. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1263. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1264. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -34
  1266. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1267. data/src/core/lib/security/security_connector/ssl_utils.cc +54 -40
  1268. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +391 -230
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1272. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +122 -368
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +282 -158
  1275. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1276. data/src/core/lib/security/transport/security_handshaker.cc +123 -92
  1277. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +87 -58
  1279. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  1280. data/src/core/lib/security/util/json_util.cc +7 -7
  1281. data/src/core/lib/security/util/json_util.h +0 -2
  1282. data/src/core/lib/service_config/service_config.h +89 -0
  1283. data/src/core/lib/service_config/service_config_call_data.h +76 -0
  1284. data/src/core/lib/service_config/service_config_impl.cc +191 -0
  1285. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1286. data/src/core/lib/service_config/service_config_parser.cc +81 -0
  1287. data/src/core/lib/service_config/service_config_parser.h +105 -0
  1288. data/src/core/lib/slice/b64.cc +2 -2
  1289. data/src/core/lib/slice/b64.h +2 -0
  1290. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1291. data/src/core/lib/slice/percent_encoding.h +4 -16
  1292. data/src/core/lib/slice/slice.cc +94 -184
  1293. data/src/core/lib/slice/slice.h +402 -0
  1294. data/src/core/lib/slice/slice_buffer.cc +92 -33
  1295. data/src/core/lib/slice/slice_buffer.h +137 -0
  1296. data/src/core/lib/slice/slice_internal.h +22 -48
  1297. data/src/core/lib/slice/slice_refcount.h +32 -93
  1298. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1299. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1300. data/src/core/lib/surface/builtins.cc +11 -6
  1301. data/src/core/lib/surface/byte_buffer.cc +9 -4
  1302. data/src/core/lib/surface/byte_buffer_reader.cc +7 -7
  1303. data/src/core/lib/surface/call.cc +2324 -1337
  1304. data/src/core/lib/surface/call.h +69 -21
  1305. data/src/core/lib/surface/call_details.cc +6 -6
  1306. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1307. data/src/core/lib/surface/call_test_only.h +4 -1
  1308. data/src/core/lib/surface/call_trace.cc +113 -0
  1309. data/src/core/lib/surface/call_trace.h +30 -0
  1310. data/src/core/lib/surface/channel.cc +230 -328
  1311. data/src/core/lib/surface/channel.h +110 -74
  1312. data/src/core/lib/surface/channel_init.cc +2 -3
  1313. data/src/core/lib/surface/channel_init.h +4 -6
  1314. data/src/core/lib/surface/channel_ping.cc +9 -3
  1315. data/src/core/lib/surface/channel_stack_type.cc +4 -2
  1316. data/src/core/lib/surface/channel_stack_type.h +2 -2
  1317. data/src/core/lib/surface/completion_queue.cc +76 -94
  1318. data/src/core/lib/surface/completion_queue.h +8 -6
  1319. data/src/core/lib/surface/completion_queue_factory.cc +6 -0
  1320. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1321. data/src/core/lib/surface/event_string.cc +1 -7
  1322. data/src/core/lib/surface/event_string.h +1 -1
  1323. data/src/core/lib/surface/init.cc +87 -78
  1324. data/src/core/lib/surface/init.h +0 -10
  1325. data/src/core/lib/surface/init_internally.cc +24 -0
  1326. data/src/core/lib/surface/init_internally.h +36 -0
  1327. data/src/core/lib/surface/lame_client.cc +69 -107
  1328. data/src/core/lib/surface/lame_client.h +41 -3
  1329. data/src/core/lib/surface/metadata_array.cc +2 -0
  1330. data/src/core/lib/surface/server.cc +153 -206
  1331. data/src/core/lib/surface/server.h +64 -36
  1332. data/src/core/lib/surface/validate_metadata.cc +17 -31
  1333. data/src/core/lib/surface/validate_metadata.h +3 -0
  1334. data/src/core/lib/surface/version.cc +2 -2
  1335. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1336. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1337. data/src/core/lib/transport/connectivity_state.cc +7 -6
  1338. data/src/core/lib/transport/connectivity_state.h +3 -4
  1339. data/src/core/lib/transport/error_utils.cc +45 -65
  1340. data/src/core/lib/transport/error_utils.h +10 -5
  1341. data/src/core/lib/transport/handshaker.cc +225 -0
  1342. data/src/core/lib/transport/handshaker.h +167 -0
  1343. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1344. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1345. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1346. data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
  1347. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1348. data/src/core/lib/transport/metadata_batch.cc +266 -69
  1349. data/src/core/lib/transport/metadata_batch.h +1108 -837
  1350. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  1351. data/src/core/lib/transport/parsed_metadata.h +239 -93
  1352. data/src/core/lib/transport/pid_controller.cc +4 -4
  1353. data/src/core/lib/transport/status_conversion.cc +3 -3
  1354. data/src/core/lib/transport/status_conversion.h +3 -3
  1355. data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
  1356. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1357. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1358. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1359. data/src/core/lib/transport/transport.cc +82 -58
  1360. data/src/core/lib/transport/transport.h +154 -35
  1361. data/src/core/lib/transport/transport_fwd.h +20 -0
  1362. data/src/core/lib/transport/transport_impl.h +24 -0
  1363. data/src/core/lib/transport/transport_op_string.cc +24 -66
  1364. data/src/core/lib/uri/uri_parser.cc +248 -66
  1365. data/src/core/lib/uri/uri_parser.h +39 -25
  1366. data/src/core/plugin_registry/grpc_plugin_registry.cc +56 -140
  1367. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +61 -0
  1368. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +76 -52
  1369. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1370. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -28
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -3
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +14 -6
  1381. data/src/core/tsi/fake_transport_security.cc +69 -34
  1382. data/src/core/tsi/fake_transport_security.h +6 -0
  1383. data/src/core/tsi/local_transport_security.cc +24 -28
  1384. data/src/core/tsi/local_transport_security.h +1 -4
  1385. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +145 -0
  1386. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1387. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1388. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +3 -1
  1389. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1390. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +8 -2
  1391. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1392. data/src/core/tsi/ssl_transport_security.h +47 -8
  1393. data/src/core/tsi/transport_security.cc +18 -6
  1394. data/src/core/tsi/transport_security.h +2 -1
  1395. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1396. data/src/core/tsi/transport_security_grpc.h +5 -2
  1397. data/src/core/tsi/transport_security_interface.h +19 -5
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1401. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1402. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1403. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1404. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -36
  1405. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -55
  1406. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1407. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1408. data/src/ruby/lib/grpc/errors.rb +1 -1
  1409. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1410. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1411. data/src/ruby/lib/grpc/version.rb +1 -1
  1412. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1414. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1415. data/src/ruby/pb/test/client.rb +769 -0
  1416. data/src/ruby/pb/test/server.rb +252 -0
  1417. data/src/ruby/pb/test/xds_client.rb +415 -0
  1418. data/src/ruby/spec/channel_spec.rb +5 -43
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1427. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1434. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1436. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1437. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1439. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1442. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1443. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1445. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1446. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1447. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1448. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1449. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1450. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1451. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1452. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1453. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1454. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1455. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1456. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1457. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1458. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1459. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1460. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1461. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1462. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1463. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1464. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1465. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1466. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1467. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1468. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1469. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1470. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1471. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1474. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1475. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1476. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1477. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1478. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1479. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1480. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1481. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1482. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1483. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1484. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1485. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1486. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1487. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1489. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1490. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1491. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1492. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1493. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1494. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1495. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1496. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1497. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1498. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1499. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1500. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1501. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1503. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1504. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1505. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1506. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1507. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1508. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1509. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1510. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1511. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1522. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1523. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1524. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1525. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1526. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1528. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1529. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1530. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1531. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1532. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1533. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1534. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1535. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1536. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1537. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1538. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1539. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1540. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1541. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1542. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1543. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1544. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1545. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1546. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1547. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1548. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1549. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1550. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1551. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1552. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1553. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1554. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1555. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1556. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1557. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1558. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1559. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1560. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1561. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1562. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1564. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1585. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1588. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1592. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1605. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1606. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1607. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1608. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1609. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1610. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1611. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1612. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1613. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1614. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1615. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1616. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1617. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1618. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1619. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1620. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1621. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1622. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1627. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1628. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1629. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1630. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1631. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1632. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1633. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1634. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1635. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1636. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1637. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1638. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1639. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1640. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1641. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1642. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1643. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1644. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1645. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1646. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1647. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1656. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1657. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1658. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1659. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1660. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1661. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1665. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1666. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1669. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1670. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1671. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1672. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1693. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1694. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1695. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1697. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1698. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1699. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1700. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1702. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1703. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1704. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1705. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1706. data/third_party/cares/cares/include/ares.h +742 -0
  1707. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1708. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1709. data/third_party/cares/cares/include/ares_version.h +24 -0
  1710. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1711. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1712. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1713. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1714. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1715. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1716. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1717. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1718. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1719. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1720. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1721. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1722. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1723. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1724. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1725. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1726. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1727. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1728. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1729. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1730. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1731. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1732. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1733. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1734. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1735. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1736. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1737. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1738. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1739. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1741. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1742. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1743. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1744. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1745. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1746. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1747. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1748. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1749. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1750. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1751. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1752. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1753. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1754. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1755. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1756. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1757. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1758. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1759. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1760. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1761. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1762. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1763. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1764. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1765. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1766. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1767. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1768. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1769. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1770. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1771. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1772. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1773. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1774. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1775. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1776. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1777. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1778. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1779. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1780. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1781. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1782. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1783. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1784. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1785. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1786. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1787. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1788. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1789. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1790. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1791. data/third_party/upb/upb/arena.c +277 -0
  1792. data/third_party/upb/upb/arena.h +225 -0
  1793. data/third_party/upb/upb/array.c +114 -0
  1794. data/third_party/upb/upb/array.h +83 -0
  1795. data/third_party/upb/upb/collections.h +36 -0
  1796. data/third_party/upb/upb/decode.c +832 -382
  1797. data/third_party/upb/upb/decode.h +44 -17
  1798. data/third_party/upb/upb/decode_fast.c +304 -302
  1799. data/third_party/upb/upb/decode_fast.h +18 -18
  1800. data/third_party/upb/upb/def.c +2083 -982
  1801. data/third_party/upb/upb/def.h +339 -260
  1802. data/third_party/upb/upb/def.hpp +144 -171
  1803. data/third_party/upb/upb/encode.c +287 -185
  1804. data/third_party/upb/upb/encode.h +24 -16
  1805. data/third_party/upb/upb/extension_registry.c +93 -0
  1806. data/third_party/upb/upb/extension_registry.h +84 -0
  1807. data/third_party/upb/upb/internal/decode.h +211 -0
  1808. data/third_party/upb/upb/internal/table.h +385 -0
  1809. data/third_party/upb/upb/internal/upb.h +68 -0
  1810. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1811. data/third_party/upb/upb/json_decode.c +1512 -0
  1812. data/third_party/upb/upb/json_decode.h +47 -0
  1813. data/third_party/upb/upb/json_encode.c +780 -0
  1814. data/third_party/upb/upb/json_encode.h +65 -0
  1815. data/third_party/upb/upb/map.c +108 -0
  1816. data/third_party/upb/upb/map.h +117 -0
  1817. data/third_party/upb/upb/message_value.h +66 -0
  1818. data/third_party/upb/upb/mini_table.c +1147 -0
  1819. data/third_party/upb/upb/mini_table.h +189 -0
  1820. data/third_party/upb/upb/mini_table.hpp +112 -0
  1821. data/third_party/upb/upb/msg.c +132 -161
  1822. data/third_party/upb/upb/msg.h +18 -55
  1823. data/third_party/upb/upb/msg_internal.h +404 -254
  1824. data/third_party/upb/upb/port_def.inc +10 -1
  1825. data/third_party/upb/upb/port_undef.inc +2 -0
  1826. data/third_party/upb/upb/reflection.c +203 -280
  1827. data/third_party/upb/upb/reflection.h +40 -126
  1828. data/third_party/upb/upb/reflection.hpp +6 -6
  1829. data/third_party/upb/upb/status.c +86 -0
  1830. data/third_party/upb/upb/status.h +66 -0
  1831. data/third_party/upb/upb/table.c +233 -149
  1832. data/third_party/upb/upb/table_internal.h +9 -324
  1833. data/third_party/upb/upb/text_encode.c +116 -92
  1834. data/third_party/upb/upb/text_encode.h +10 -10
  1835. data/third_party/upb/upb/upb.c +34 -273
  1836. data/third_party/upb/upb/upb.h +79 -262
  1837. data/third_party/upb/upb/upb.hpp +31 -28
  1838. data/third_party/xxhash/xxhash.h +607 -352
  1839. data/third_party/zlib/compress.c +3 -3
  1840. data/third_party/zlib/crc32.c +975 -292
  1841. data/third_party/zlib/crc32.h +9441 -436
  1842. data/third_party/zlib/deflate.c +183 -129
  1843. data/third_party/zlib/deflate.h +12 -15
  1844. data/third_party/zlib/gzguts.h +3 -2
  1845. data/third_party/zlib/gzlib.c +6 -4
  1846. data/third_party/zlib/gzread.c +8 -12
  1847. data/third_party/zlib/gzwrite.c +26 -14
  1848. data/third_party/zlib/infback.c +12 -8
  1849. data/third_party/zlib/inffast.c +14 -14
  1850. data/third_party/zlib/inflate.c +44 -10
  1851. data/third_party/zlib/inflate.h +3 -2
  1852. data/third_party/zlib/inftrees.c +3 -3
  1853. data/third_party/zlib/inftrees.h +1 -1
  1854. data/third_party/zlib/trees.c +85 -107
  1855. data/third_party/zlib/uncompr.c +2 -2
  1856. data/third_party/zlib/zconf.h +16 -3
  1857. data/third_party/zlib/zlib.h +129 -106
  1858. data/third_party/zlib/zutil.c +11 -9
  1859. data/third_party/zlib/zutil.h +13 -9
  1860. metadata +713 -295
  1861. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -392
  1862. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1863. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1864. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1865. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
  1866. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
  1867. data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
  1868. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1869. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1870. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1871. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1872. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1873. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1874. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  1875. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
  1876. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1877. data/src/core/ext/filters/client_channel/resolver.h +0 -136
  1878. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
  1879. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1880. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1881. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
  1882. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
  1883. data/src/core/ext/filters/client_channel/server_address.cc +0 -170
  1884. data/src/core/ext/filters/client_channel/server_address.h +0 -144
  1885. data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
  1886. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1887. data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
  1888. data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
  1889. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
  1890. data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
  1891. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1892. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  1893. data/src/core/ext/service_config/service_config.cc +0 -227
  1894. data/src/core/ext/service_config/service_config.h +0 -127
  1895. data/src/core/ext/service_config/service_config_call_data.h +0 -72
  1896. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1897. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1898. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1899. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1900. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1901. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1902. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1903. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1904. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1905. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1906. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1907. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
  1908. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1909. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1910. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1911. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1912. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1913. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1914. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1915. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1916. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1918. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1919. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1920. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1921. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1922. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1923. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1924. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1925. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1926. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1927. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1928. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1929. data/src/core/ext/xds/certificate_provider_factory.h +0 -61
  1930. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1931. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1932. data/src/core/lib/avl/avl.cc +0 -306
  1933. data/src/core/lib/channel/handshaker.cc +0 -222
  1934. data/src/core/lib/channel/handshaker.h +0 -161
  1935. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1936. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1937. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1938. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1939. data/src/core/lib/compression/compression_args.cc +0 -138
  1940. data/src/core/lib/compression/compression_args.h +0 -56
  1941. data/src/core/lib/compression/stream_compression.cc +0 -81
  1942. data/src/core/lib/compression/stream_compression.h +0 -117
  1943. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1944. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1945. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1946. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1947. data/src/core/lib/event_engine/endpoint_config.cc +0 -45
  1948. data/src/core/lib/event_engine/endpoint_config_internal.h +0 -42
  1949. data/src/core/lib/event_engine/event_engine.cc +0 -50
  1950. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1951. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1952. data/src/core/lib/gpr/env.h +0 -40
  1953. data/src/core/lib/gpr/env_linux.cc +0 -75
  1954. data/src/core/lib/gpr/env_posix.cc +0 -46
  1955. data/src/core/lib/gpr/env_windows.cc +0 -74
  1956. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1957. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1958. data/src/core/lib/gpr/string_windows.h +0 -32
  1959. data/src/core/lib/gpr/tls.h +0 -151
  1960. data/src/core/lib/gprpp/arena.cc +0 -104
  1961. data/src/core/lib/gprpp/arena.h +0 -131
  1962. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1963. data/src/core/lib/iomgr/error_internal.h +0 -66
  1964. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1965. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1966. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1967. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1968. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1969. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1970. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1971. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1972. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1973. data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
  1974. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  1975. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
  1976. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
  1977. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1978. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1979. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1980. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1981. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1982. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1983. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1984. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1985. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1986. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1987. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1988. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1989. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1990. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1991. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1992. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1993. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1994. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1995. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1996. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1997. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1998. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1999. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  2000. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  2001. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2002. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2003. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  2004. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2005. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  2006. data/src/core/lib/iomgr/work_serializer.h +0 -81
  2007. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2008. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2009. data/src/core/lib/profiling/timers.h +0 -94
  2010. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  2011. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  2012. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  2013. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
  2014. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  2015. data/src/core/lib/slice/slice_api.cc +0 -39
  2016. data/src/core/lib/slice/slice_intern.cc +0 -367
  2017. data/src/core/lib/slice/slice_refcount.cc +0 -17
  2018. data/src/core/lib/slice/slice_refcount_base.h +0 -173
  2019. data/src/core/lib/slice/slice_split.cc +0 -100
  2020. data/src/core/lib/slice/slice_split.h +0 -40
  2021. data/src/core/lib/slice/slice_utils.h +0 -200
  2022. data/src/core/lib/slice/static_slice.cc +0 -529
  2023. data/src/core/lib/slice/static_slice.h +0 -331
  2024. data/src/core/lib/surface/init_secure.cc +0 -103
  2025. data/src/core/lib/transport/byte_stream.cc +0 -158
  2026. data/src/core/lib/transport/byte_stream.h +0 -166
  2027. data/src/core/lib/transport/metadata.cc +0 -714
  2028. data/src/core/lib/transport/metadata.h +0 -449
  2029. data/src/core/lib/transport/static_metadata.cc +0 -1117
  2030. data/src/core/lib/transport/static_metadata.h +0 -340
  2031. data/src/core/lib/transport/status_metadata.cc +0 -63
  2032. data/src/core/lib/transport/status_metadata.h +0 -48
  2033. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2034. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2035. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  2036. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +0 -111
  2037. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +0 -48
  2038. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2039. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2040. data/third_party/cares/cares/ares.h +0 -670
  2041. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2042. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2043. data/third_party/cares/cares/ares_create_query.c +0 -206
  2044. data/third_party/cares/cares/ares_data.c +0 -222
  2045. data/third_party/cares/cares/ares_data.h +0 -72
  2046. data/third_party/cares/cares/ares_dns.h +0 -103
  2047. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2048. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2049. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2050. data/third_party/cares/cares/ares_getenv.c +0 -30
  2051. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2052. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2053. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2054. data/third_party/cares/cares/ares_getopt.c +0 -122
  2055. data/third_party/cares/cares/ares_getopt.h +0 -53
  2056. data/third_party/cares/cares/ares_init.c +0 -2615
  2057. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2058. data/third_party/cares/cares/ares_library_init.c +0 -195
  2059. data/third_party/cares/cares/ares_library_init.h +0 -43
  2060. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2061. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2062. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2063. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2064. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2065. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2066. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2067. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2068. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2069. data/third_party/cares/cares/ares_private.h +0 -382
  2070. data/third_party/cares/cares/ares_process.c +0 -1473
  2071. data/third_party/cares/cares/ares_query.c +0 -186
  2072. data/third_party/cares/cares/ares_search.c +0 -323
  2073. data/third_party/cares/cares/ares_send.c +0 -137
  2074. data/third_party/cares/cares/ares_setup.h +0 -217
  2075. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2076. data/third_party/cares/cares/ares_version.h +0 -24
  2077. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2078. data/third_party/cares/cares/inet_ntop.c +0 -207
  2079. data/third_party/upb/upb/decode_internal.h +0 -193
  2080. data/third_party/upb/upb/upb_internal.h +0 -58
@@ -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
  }