grpc 1.37.0 → 1.45.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 (2039) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +501 -260
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/README.md +38 -0
  7. data/include/grpc/event_engine/endpoint_config.h +43 -0
  8. data/include/grpc/event_engine/event_engine.h +399 -0
  9. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  10. data/include/grpc/event_engine/memory_allocator.h +226 -0
  11. data/include/grpc/event_engine/memory_request.h +57 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/fork.h +1 -1
  14. data/include/grpc/grpc.h +65 -22
  15. data/include/grpc/grpc_posix.h +22 -18
  16. data/include/grpc/grpc_security.h +358 -191
  17. data/include/grpc/grpc_security_constants.h +17 -14
  18. data/include/grpc/impl/codegen/atm.h +5 -3
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  21. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  22. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  24. data/include/grpc/impl/codegen/compression_types.h +2 -2
  25. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  26. data/include/grpc/impl/codegen/fork.h +2 -0
  27. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  28. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  29. data/include/grpc/impl/codegen/grpc_types.h +61 -28
  30. data/include/grpc/impl/codegen/log.h +2 -0
  31. data/include/grpc/impl/codegen/port_platform.h +83 -22
  32. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  33. data/include/grpc/impl/codegen/slice.h +6 -1
  34. data/include/grpc/impl/codegen/status.h +2 -0
  35. data/include/grpc/impl/codegen/sync.h +8 -5
  36. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  37. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  38. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  39. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  40. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  41. data/include/grpc/module.modulemap +14 -14
  42. data/include/grpc/slice.h +1 -12
  43. data/include/grpc/status.h +1 -1
  44. data/include/grpc/support/atm.h +1 -1
  45. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  46. data/include/grpc/support/atm_gcc_sync.h +1 -1
  47. data/include/grpc/support/atm_windows.h +1 -1
  48. data/include/grpc/support/log.h +1 -1
  49. data/include/grpc/support/port_platform.h +1 -1
  50. data/include/grpc/support/sync.h +1 -1
  51. data/include/grpc/support/sync_abseil.h +1 -1
  52. data/include/grpc/support/sync_custom.h +1 -1
  53. data/include/grpc/support/sync_generic.h +1 -1
  54. data/include/grpc/support/sync_posix.h +1 -1
  55. data/include/grpc/support/sync_windows.h +1 -1
  56. data/include/grpc/support/time.h +2 -2
  57. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  58. data/src/core/ext/filters/client_channel/backend_metric.cc +24 -27
  59. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  60. data/src/core/ext/filters/client_channel/backup_poller.cc +17 -12
  61. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  62. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  63. data/src/core/ext/filters/client_channel/client_channel.cc +1231 -3574
  64. data/src/core/ext/filters/client_channel/client_channel.h +563 -56
  65. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  66. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -2
  67. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  68. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  69. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -22
  70. data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
  71. data/src/core/ext/filters/client_channel/config_selector.h +22 -10
  72. data/src/core/ext/filters/client_channel/connector.h +20 -20
  73. data/src/core/ext/filters/client_channel/dynamic_filters.cc +15 -17
  74. data/src/core/ext/filters/client_channel/dynamic_filters.h +5 -5
  75. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -16
  77. data/src/core/ext/filters/client_channel/health/health_check_client.cc +72 -68
  78. data/src/core/ext/filters/client_channel/health/health_check_client.h +38 -36
  79. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +54 -55
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  81. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  82. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  83. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  84. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -24
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +300 -201
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -5
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +17 -18
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +86 -61
  95. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -68
  96. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +785 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2551 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +77 -78
  100. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  101. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +37 -34
  102. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +112 -167
  103. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +188 -111
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +46 -65
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +198 -312
  108. data/src/core/ext/filters/client_channel/lb_policy.cc +17 -30
  109. data/src/core/ext/filters/client_channel/lb_policy.h +170 -137
  110. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  111. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -11
  112. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  113. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  114. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +292 -149
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +23 -12
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +24 -19
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -69
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +168 -281
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +39 -26
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  122. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
  123. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +138 -120
  124. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +42 -47
  125. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -6
  126. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +102 -79
  127. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +41 -40
  128. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +547 -468
  129. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -253
  130. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +34 -57
  131. data/src/core/ext/filters/client_channel/retry_filter.cc +2640 -0
  132. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
  133. data/src/core/ext/filters/client_channel/retry_service_config.cc +314 -0
  134. data/src/core/ext/filters/client_channel/retry_service_config.h +102 -0
  135. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -59
  136. data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
  137. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +56 -41
  138. data/src/core/ext/filters/client_channel/subchannel.cc +143 -207
  139. data/src/core/ext/filters/client_channel/subchannel.h +43 -62
  140. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  141. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  142. data/src/core/ext/filters/client_idle/client_idle_filter.cc +109 -348
  143. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  144. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  145. data/src/core/ext/filters/deadline/deadline_filter.cc +41 -43
  146. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  147. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +105 -102
  148. data/src/core/ext/filters/fault_injection/service_config_parser.cc +21 -31
  149. data/src/core/ext/filters/fault_injection/service_config_parser.h +11 -5
  150. data/src/core/ext/filters/http/client/http_client_filter.cc +108 -183
  151. data/src/core/ext/filters/http/client_authority_filter.cc +36 -95
  152. data/src/core/ext/filters/http/client_authority_filter.h +23 -5
  153. data/src/core/ext/filters/http/http_filters_plugin.cc +52 -73
  154. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +67 -157
  155. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +43 -56
  156. data/src/core/ext/filters/http/server/http_server_filter.cc +115 -207
  157. data/src/core/ext/filters/max_age/max_age_filter.cc +75 -69
  158. data/src/core/ext/filters/message_size/message_size_filter.cc +63 -69
  159. data/src/core/ext/filters/message_size/message_size_filter.h +11 -4
  160. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  161. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  162. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  163. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  164. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  165. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  166. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +271 -0
  167. data/src/core/{lib/transport/authority_override.h → ext/filters/server_config_selector/server_config_selector_filter.h} +8 -13
  168. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  169. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +251 -19
  170. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  171. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +339 -138
  172. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  173. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
  174. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  175. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  176. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +386 -463
  177. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -4
  178. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -6
  179. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -6
  180. data/src/core/ext/transport/chttp2/transport/flow_control.cc +66 -47
  181. data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -21
  182. data/src/core/ext/transport/chttp2/transport/frame_data.cc +23 -24
  183. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  184. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -20
  185. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
  186. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +17 -17
  187. data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
  188. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -15
  189. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
  190. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +49 -17
  191. data/src/core/ext/transport/chttp2/transport/frame_settings.h +7 -6
  192. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +16 -13
  193. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  194. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  195. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +520 -749
  196. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
  197. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  198. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  199. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +811 -1193
  200. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +101 -83
  201. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  202. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  203. data/src/core/ext/transport/chttp2/transport/internal.h +51 -74
  204. data/src/core/ext/transport/chttp2/transport/parsing.cc +157 -293
  205. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  206. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  207. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  208. data/src/core/ext/transport/chttp2/transport/writing.cc +113 -164
  209. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  210. data/src/core/ext/transport/inproc/inproc_transport.cc +186 -215
  211. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  212. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +114 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +244 -210
  217. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +932 -575
  218. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
  224. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
  226. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  227. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
  228. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
  229. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
  230. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  231. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
  232. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  233. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +20 -1
  234. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  235. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +40 -19
  236. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -117
  237. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +513 -317
  238. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -188
  239. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +954 -530
  240. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +44 -29
  241. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +137 -81
  242. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +328 -250
  243. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1266 -657
  244. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  245. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +41 -23
  246. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +41 -28
  247. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +136 -80
  248. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
  249. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +73 -54
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +265 -159
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -8
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +41 -23
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +238 -153
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +894 -471
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +63 -46
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +210 -130
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +33 -19
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +32 -18
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +88 -53
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +144 -118
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +529 -329
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +112 -91
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +425 -259
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +44 -26
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +212 -91
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +932 -266
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -5
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -17
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +152 -0
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +47 -25
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +28 -14
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +53 -35
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +108 -0
  282. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -36
  283. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +133 -85
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -39
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +325 -107
  286. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  287. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +244 -144
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +36 -20
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +97 -69
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +400 -226
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +99 -78
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +340 -213
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +61 -0
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +199 -0
  296. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -11
  297. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +86 -49
  298. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  299. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
  300. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -62
  301. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +294 -185
  302. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +93 -60
  303. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +349 -181
  304. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +127 -100
  305. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +307 -185
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +59 -27
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +195 -88
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +648 -559
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2460 -1505
  310. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  311. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +127 -64
  312. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
  313. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -14
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +69 -40
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
  328. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  329. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  330. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  331. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
  332. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  333. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
  334. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +18 -5
  335. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +37 -23
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +46 -29
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +156 -92
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +52 -36
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +175 -107
  340. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +27 -13
  343. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +69 -41
  344. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +272 -200
  345. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1095 -552
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -1
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +108 -52
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +448 -171
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +42 -27
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +115 -71
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +103 -83
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +341 -213
  354. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  355. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  358. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +92 -73
  359. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +335 -218
  360. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -18
  361. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +87 -54
  362. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +85 -40
  363. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +303 -104
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
  366. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  367. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +228 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +81 -46
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -9
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +42 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +33 -19
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +33 -19
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +105 -61
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +79 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +27 -13
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +70 -43
  384. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  385. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +94 -58
  386. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  387. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +206 -124
  388. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  389. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +191 -115
  390. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  393. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  394. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  395. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +136 -0
  396. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  397. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +65 -34
  398. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  399. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +100 -52
  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 +20 -7
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +39 -19
  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 +114 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +9 -1
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +151 -126
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +439 -281
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +153 -127
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +483 -298
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +137 -89
  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 +99 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +40 -22
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +367 -277
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1252 -764
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +36 -18
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +100 -64
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +36 -18
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +269 -149
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +44 -26
  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 +276 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +68 -42
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +132 -108
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +458 -285
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -13
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +72 -39
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +64 -35
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +321 -197
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +175 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  447. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +132 -63
  448. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  449. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +41 -18
  450. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  451. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +9 -1
  452. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  453. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +41 -18
  454. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +40 -19
  456. data/src/core/ext/upb-generated/validate/validate.upb.c +396 -295
  457. data/src/core/ext/upb-generated/validate/validate.upb.h +1395 -768
  458. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
  460. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +230 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  467. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
  468. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +19 -6
  469. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -19
  470. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +32 -18
  471. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +77 -46
  472. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +27 -13
  473. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +39 -25
  474. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  475. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
  476. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +24 -11
  477. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +47 -27
  478. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +35 -21
  479. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +87 -54
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +24 -11
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +51 -29
  482. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  483. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +144 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  487. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
  490. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  491. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +95 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +22 -12
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  515. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +69 -98
  517. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +349 -339
  519. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +57 -52
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +18 -24
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +488 -484
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +18 -20
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +224 -229
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +79 -64
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +23 -33
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +17 -21
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +76 -89
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +267 -200
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +59 -34
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +40 -38
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  567. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +157 -155
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -16
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +147 -153
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -36
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  581. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +40 -47
  583. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +30 -25
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +79 -71
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +12 -7
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +717 -773
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +162 -157
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +27 -30
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +26 -24
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +455 -429
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +62 -52
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -138
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +194 -200
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  636. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
  640. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  642. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +120 -97
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +18 -13
  644. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  648. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +45 -48
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  666. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  668. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  670. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  686. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  687. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  688. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  689. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  690. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  692. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  693. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  694. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  695. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  697. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  698. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  699. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  700. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  701. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  702. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  703. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  704. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  705. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  706. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  709. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  710. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +9 -14
  711. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  713. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  714. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  715. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  716. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  717. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  724. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +189 -216
  725. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  726. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  727. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  728. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  729. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  730. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  736. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +18 -22
  737. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  738. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +32 -38
  739. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  740. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +20 -26
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +23 -27
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +39 -45
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +25 -29
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  751. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  752. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  753. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  754. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  758. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  759. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  760. data/src/core/ext/xds/certificate_provider_store.h +4 -4
  761. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
  762. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +4 -4
  763. data/src/core/ext/xds/upb_utils.h +67 -0
  764. data/src/core/ext/xds/xds_api.cc +232 -3313
  765. data/src/core/ext/xds/xds_api.h +70 -550
  766. data/src/core/ext/xds/xds_bootstrap.cc +315 -300
  767. data/src/core/ext/xds/xds_bootstrap.h +54 -33
  768. data/src/core/ext/xds/xds_certificate_provider.cc +7 -7
  769. data/src/core/ext/xds/xds_certificate_provider.h +6 -6
  770. data/src/core/ext/xds/xds_channel_args.h +5 -2
  771. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  772. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  773. data/src/core/ext/xds/xds_client.cc +1093 -957
  774. data/src/core/ext/xds/xds_client.h +143 -168
  775. data/src/core/ext/xds/xds_client_stats.cc +31 -30
  776. data/src/core/ext/xds/xds_client_stats.h +15 -13
  777. data/src/core/ext/xds/xds_cluster.cc +453 -0
  778. data/src/core/ext/xds/xds_cluster.h +108 -0
  779. data/src/core/ext/xds/xds_common_types.cc +388 -0
  780. data/src/core/ext/xds/xds_common_types.h +95 -0
  781. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  782. data/src/core/ext/xds/xds_endpoint.h +135 -0
  783. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -9
  784. data/src/core/ext/xds/xds_http_fault_filter.h +6 -5
  785. data/src/core/ext/xds/xds_http_filters.cc +15 -7
  786. data/src/core/ext/xds/xds_http_filters.h +7 -4
  787. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  788. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  789. data/src/core/ext/xds/xds_listener.cc +1039 -0
  790. data/src/core/ext/xds/xds_listener.h +220 -0
  791. data/src/core/{lib/transport/authority_override.cc → ext/xds/xds_resource_type.cc} +10 -17
  792. data/src/core/ext/xds/xds_resource_type.h +98 -0
  793. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  794. data/src/core/ext/xds/xds_route_config.cc +985 -0
  795. data/src/core/ext/xds/xds_route_config.h +215 -0
  796. data/src/core/ext/xds/xds_routing.cc +250 -0
  797. data/src/core/ext/xds/xds_routing.h +101 -0
  798. data/src/core/ext/xds/xds_server_config_fetcher.cc +1083 -296
  799. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +43 -25
  800. data/src/core/lib/{iomgr → address_utils}/parse_address.h +12 -7
  801. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +34 -41
  802. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +5 -15
  803. data/src/core/lib/avl/avl.h +389 -88
  804. data/src/core/lib/backoff/backoff.cc +9 -38
  805. data/src/core/lib/backoff/backoff.h +11 -11
  806. data/src/core/lib/channel/call_finalization.h +86 -0
  807. data/src/core/lib/channel/call_tracer.h +85 -0
  808. data/src/core/lib/channel/channel_args.cc +87 -9
  809. data/src/core/lib/channel/channel_args.h +13 -1
  810. data/src/core/lib/channel/channel_args_preconditioning.cc +48 -0
  811. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  812. data/src/core/lib/channel/channel_stack.cc +25 -15
  813. data/src/core/lib/channel/channel_stack.h +53 -16
  814. data/src/core/lib/channel/channel_stack_builder.cc +68 -262
  815. data/src/core/lib/channel/channel_stack_builder.h +95 -155
  816. data/src/core/lib/channel/channel_trace.cc +8 -10
  817. data/src/core/lib/channel/channel_trace.h +2 -1
  818. data/src/core/lib/channel/channelz.cc +65 -52
  819. data/src/core/lib/channel/channelz.h +32 -29
  820. data/src/core/lib/channel/channelz_registry.cc +8 -7
  821. data/src/core/lib/channel/channelz_registry.h +1 -1
  822. data/src/core/lib/channel/connected_channel.cc +14 -10
  823. data/src/core/lib/channel/connected_channel.h +1 -2
  824. data/src/core/lib/channel/context.h +14 -0
  825. data/src/core/lib/channel/handshaker.cc +10 -8
  826. data/src/core/lib/channel/handshaker.h +7 -8
  827. data/src/core/lib/channel/handshaker_factory.h +10 -2
  828. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  829. data/src/core/lib/channel/handshaker_registry.h +29 -12
  830. data/src/core/lib/channel/promise_based_filter.cc +669 -0
  831. data/src/core/lib/channel/promise_based_filter.h +423 -0
  832. data/src/core/lib/channel/status_util.h +6 -2
  833. data/src/core/lib/compression/compression.cc +22 -114
  834. data/src/core/lib/compression/compression_internal.cc +145 -207
  835. data/src/core/lib/compression/compression_internal.h +64 -69
  836. data/src/core/lib/compression/message_compress.cc +13 -13
  837. data/src/core/lib/compression/message_compress.h +2 -2
  838. data/src/core/lib/config/core_configuration.cc +104 -0
  839. data/src/core/lib/config/core_configuration.h +196 -0
  840. data/src/core/lib/debug/stats.cc +1 -1
  841. data/src/core/lib/debug/stats.h +2 -1
  842. data/src/core/lib/debug/stats_data.cc +15 -14
  843. data/src/core/lib/debug/stats_data.h +1 -0
  844. data/src/core/lib/debug/trace.cc +1 -0
  845. data/src/core/lib/debug/trace.h +4 -3
  846. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +46 -0
  847. data/src/core/lib/event_engine/channel_args_endpoint_config.h +42 -0
  848. data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
  849. data/src/core/lib/event_engine/event_engine.cc +52 -0
  850. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  851. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  852. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  853. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  854. data/src/core/lib/event_engine/sockaddr.h +44 -0
  855. data/src/core/lib/gpr/alloc.cc +4 -3
  856. data/src/core/lib/gpr/atm.cc +1 -1
  857. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  858. data/src/core/lib/gpr/env_linux.cc +1 -2
  859. data/src/core/lib/gpr/env_posix.cc +2 -3
  860. data/src/core/lib/gpr/log.cc +3 -3
  861. data/src/core/lib/gpr/log_android.cc +3 -2
  862. data/src/core/lib/gpr/log_linux.cc +7 -4
  863. data/src/core/lib/gpr/log_posix.cc +6 -3
  864. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  865. data/src/core/lib/gpr/string.cc +2 -2
  866. data/src/core/lib/gpr/string.h +2 -2
  867. data/src/core/lib/gpr/sync.cc +2 -2
  868. data/src/core/lib/gpr/sync_abseil.cc +7 -6
  869. data/src/core/lib/gpr/sync_posix.cc +4 -3
  870. data/src/core/lib/gpr/time.cc +5 -3
  871. data/src/core/lib/gpr/time_windows.cc +3 -2
  872. data/src/core/lib/gpr/tls.h +125 -40
  873. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  874. data/src/core/lib/gpr/useful.h +97 -32
  875. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  876. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  877. data/src/core/lib/gprpp/bitset.h +195 -0
  878. data/src/core/lib/gprpp/capture.h +76 -0
  879. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  880. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  881. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  882. data/src/core/lib/gprpp/debug_location.h +2 -0
  883. data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
  884. data/src/core/lib/gprpp/fork.cc +14 -12
  885. data/src/core/lib/gprpp/fork.h +4 -4
  886. data/src/core/lib/gprpp/global_config.h +1 -2
  887. data/src/core/lib/gprpp/global_config_env.cc +14 -14
  888. data/src/core/lib/gprpp/global_config_env.h +2 -2
  889. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  890. data/src/core/lib/gprpp/manual_constructor.h +11 -9
  891. data/src/core/lib/gprpp/memory.h +9 -3
  892. data/src/core/lib/gprpp/mpscq.cc +7 -7
  893. data/src/core/lib/gprpp/mpscq.h +6 -5
  894. data/src/core/lib/gprpp/orphanable.h +7 -7
  895. data/src/core/lib/gprpp/ref_counted.h +47 -33
  896. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  897. data/src/core/lib/gprpp/status_helper.cc +419 -0
  898. data/src/core/lib/gprpp/status_helper.h +181 -0
  899. data/src/core/lib/gprpp/sync.h +5 -31
  900. data/src/core/lib/gprpp/table.h +434 -0
  901. data/src/core/lib/gprpp/thd_posix.cc +5 -5
  902. data/src/core/lib/gprpp/thd_windows.cc +4 -11
  903. data/src/core/lib/gprpp/time.cc +186 -0
  904. data/src/core/lib/gprpp/time.h +292 -0
  905. data/src/core/lib/gprpp/time_util.cc +2 -2
  906. data/src/core/lib/gprpp/time_util.h +2 -2
  907. data/src/core/lib/http/format_request.cc +28 -23
  908. data/src/core/lib/http/format_request.h +8 -6
  909. data/src/core/lib/http/httpcli.cc +299 -209
  910. data/src/core/lib/http/httpcli.h +183 -85
  911. data/src/core/lib/http/httpcli_security_connector.cc +71 -81
  912. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  913. data/src/core/lib/http/parser.cc +18 -18
  914. data/src/core/lib/http/parser.h +6 -5
  915. data/src/core/lib/iomgr/buffer_list.cc +16 -17
  916. data/src/core/lib/iomgr/buffer_list.h +22 -24
  917. data/src/core/lib/iomgr/call_combiner.cc +55 -23
  918. data/src/core/lib/iomgr/call_combiner.h +12 -14
  919. data/src/core/lib/iomgr/cfstream_handle.cc +4 -4
  920. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  921. data/src/core/lib/iomgr/closure.h +33 -12
  922. data/src/core/lib/iomgr/combiner.cc +46 -36
  923. data/src/core/lib/iomgr/combiner.h +3 -2
  924. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  925. data/src/core/lib/iomgr/endpoint.cc +1 -5
  926. data/src/core/lib/iomgr/endpoint.h +3 -6
  927. data/src/core/lib/iomgr/endpoint_cfstream.cc +25 -54
  928. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  929. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  930. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  931. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -9
  932. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  933. data/src/core/lib/iomgr/error.cc +270 -99
  934. data/src/core/lib/iomgr/error.h +277 -113
  935. data/src/core/lib/iomgr/error_cfstream.cc +10 -4
  936. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  937. data/src/core/lib/iomgr/error_internal.h +6 -1
  938. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  939. data/src/core/lib/iomgr/ev_apple.h +1 -1
  940. data/src/core/lib/iomgr/ev_epoll1_linux.cc +42 -48
  941. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -81
  942. data/src/core/lib/iomgr/ev_poll_posix.cc +73 -73
  943. data/src/core/lib/iomgr/ev_posix.cc +12 -12
  944. data/src/core/lib/iomgr/ev_posix.h +9 -9
  945. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  946. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  947. data/src/core/lib/iomgr/event_engine/endpoint.cc +172 -0
  948. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  949. data/src/core/lib/iomgr/event_engine/iomgr.cc +85 -0
  950. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  951. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  952. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  953. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +47 -0
  954. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +37 -0
  955. data/src/core/lib/iomgr/event_engine/resolver.cc +133 -0
  956. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  957. data/src/core/lib/iomgr/event_engine/tcp.cc +296 -0
  958. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  959. data/src/core/lib/iomgr/exec_ctx.cc +29 -102
  960. data/src/core/lib/iomgr/exec_ctx.h +32 -57
  961. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  962. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  963. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  964. data/src/core/lib/iomgr/executor/threadpool.h +4 -3
  965. data/src/core/lib/iomgr/executor.cc +37 -46
  966. data/src/core/lib/iomgr/executor.h +3 -3
  967. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  968. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  969. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  970. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  971. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  972. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  973. data/src/core/lib/iomgr/iomgr.cc +5 -3
  974. data/src/core/lib/iomgr/iomgr.h +3 -3
  975. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  976. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  977. data/src/core/lib/iomgr/iomgr_posix.cc +5 -3
  978. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -14
  979. data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
  980. data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
  981. data/src/core/lib/iomgr/load_file.cc +6 -6
  982. data/src/core/lib/iomgr/load_file.h +2 -2
  983. data/src/core/lib/iomgr/lockfree_event.cc +23 -5
  984. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  985. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  986. data/src/core/lib/iomgr/polling_entity.h +6 -0
  987. data/src/core/lib/iomgr/pollset.cc +5 -5
  988. data/src/core/lib/iomgr/pollset.h +9 -9
  989. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  990. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  991. data/src/core/lib/iomgr/port.h +8 -14
  992. data/src/core/lib/iomgr/python_util.h +3 -2
  993. data/src/core/lib/iomgr/resolve_address.cc +10 -24
  994. data/src/core/lib/iomgr/resolve_address.h +48 -43
  995. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  996. data/src/core/lib/iomgr/resolve_address_posix.cc +91 -79
  997. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  998. data/src/core/lib/iomgr/resolve_address_windows.cc +102 -85
  999. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  1000. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1001. data/src/core/lib/iomgr/sockaddr.h +2 -1
  1002. data/src/core/lib/iomgr/{socket_utils_uv.cc → sockaddr_utils_posix.cc} +21 -8
  1003. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  1004. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1005. data/src/core/lib/iomgr/socket_mutator.cc +17 -4
  1006. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  1007. data/src/core/lib/iomgr/socket_utils_common_posix.cc +28 -44
  1008. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1009. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1010. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  1011. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1012. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1013. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1014. data/src/core/lib/iomgr/tcp_client_cfstream.cc +12 -28
  1015. data/src/core/lib/iomgr/tcp_client_posix.cc +38 -45
  1016. data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
  1017. data/src/core/lib/iomgr/tcp_client_windows.cc +15 -15
  1018. data/src/core/lib/iomgr/tcp_posix.cc +129 -159
  1019. data/src/core/lib/iomgr/tcp_posix.h +17 -12
  1020. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  1021. data/src/core/lib/iomgr/tcp_server.h +16 -14
  1022. data/src/core/lib/iomgr/tcp_server_posix.cc +44 -34
  1023. data/src/core/lib/iomgr/tcp_server_utils_posix.h +34 -29
  1024. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +23 -20
  1025. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -12
  1026. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1027. data/src/core/lib/iomgr/tcp_server_windows.cc +32 -35
  1028. data/src/core/lib/iomgr/tcp_windows.cc +35 -52
  1029. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  1030. data/src/core/lib/iomgr/timer.cc +3 -2
  1031. data/src/core/lib/iomgr/timer.h +17 -8
  1032. data/src/core/lib/iomgr/timer_generic.cc +116 -127
  1033. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1034. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1035. data/src/core/lib/iomgr/timer_manager.cc +16 -15
  1036. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1037. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1038. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -18
  1039. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  1040. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
  1041. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
  1042. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  1043. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  1044. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1045. data/src/core/lib/iomgr/work_serializer.h +33 -5
  1046. data/src/core/lib/json/json.h +1 -1
  1047. data/src/core/lib/json/json_reader.cc +97 -58
  1048. data/src/core/lib/json/json_util.cc +71 -3
  1049. data/src/core/lib/json/json_util.h +66 -116
  1050. data/src/core/lib/json/json_writer.cc +0 -3
  1051. data/src/core/lib/matchers/matchers.cc +47 -59
  1052. data/src/core/lib/matchers/matchers.h +30 -30
  1053. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1054. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1055. data/src/core/lib/promise/activity.cc +121 -0
  1056. data/src/core/lib/promise/activity.h +540 -0
  1057. data/src/core/lib/promise/arena_promise.h +188 -0
  1058. data/src/core/lib/promise/context.h +86 -0
  1059. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1060. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1061. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1062. data/src/core/lib/promise/detail/status.h +49 -0
  1063. data/src/core/lib/promise/detail/switch.h +1455 -0
  1064. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1065. data/src/core/lib/promise/loop.h +134 -0
  1066. data/src/core/lib/promise/map.h +88 -0
  1067. data/src/core/lib/promise/poll.h +66 -0
  1068. data/src/core/lib/promise/promise.h +95 -0
  1069. data/src/core/lib/promise/race.h +84 -0
  1070. data/src/core/lib/promise/seq.h +89 -0
  1071. data/src/core/lib/promise/sleep.cc +74 -0
  1072. data/src/core/lib/promise/sleep.h +66 -0
  1073. data/src/core/lib/promise/try_seq.h +157 -0
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  1075. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  1076. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -29
  1077. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1078. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1079. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +2 -2
  1080. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  1081. data/src/core/lib/resource_quota/api.cc +108 -0
  1082. data/src/core/lib/resource_quota/api.h +40 -0
  1083. data/src/core/lib/{gprpp → resource_quota}/arena.cc +18 -14
  1084. data/src/core/lib/{gprpp → resource_quota}/arena.h +37 -16
  1085. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1086. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1087. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1088. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  1089. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1090. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1091. data/src/core/lib/resource_quota/trace.cc +19 -0
  1092. data/src/core/lib/resource_quota/trace.h +24 -0
  1093. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  1094. data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
  1095. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1096. data/src/core/lib/security/authorization/evaluate_args.cc +212 -0
  1097. data/src/core/lib/security/authorization/evaluate_args.h +92 -0
  1098. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1099. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1100. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
  1101. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
  1102. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1103. data/src/core/lib/security/authorization/matchers.h +211 -0
  1104. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1105. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1106. data/src/core/lib/security/context/security_context.cc +15 -10
  1107. data/src/core/lib/security/context/security_context.h +1 -1
  1108. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
  1109. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1110. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1111. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1112. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1113. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1114. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1115. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1116. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -84
  1117. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
  1118. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1119. data/src/core/lib/security/credentials/credentials.h +75 -59
  1120. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +78 -72
  1121. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +15 -13
  1122. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -4
  1123. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  1124. data/src/core/lib/security/credentials/external/external_account_credentials.cc +127 -80
  1125. data/src/core/lib/security/credentials/external/external_account_credentials.h +15 -17
  1126. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -5
  1127. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  1128. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +43 -26
  1129. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -7
  1130. data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -18
  1131. data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
  1132. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1133. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +85 -30
  1134. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
  1135. data/src/core/lib/security/credentials/iam/iam_credentials.cc +21 -28
  1136. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
  1137. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
  1138. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -9
  1139. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1140. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +52 -51
  1141. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +23 -15
  1142. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +66 -59
  1143. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1144. data/src/core/lib/security/credentials/local/local_credentials.h +6 -0
  1145. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +166 -193
  1146. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +54 -34
  1147. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +97 -157
  1148. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
  1149. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -14
  1150. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -4
  1151. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +11 -9
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +19 -15
  1153. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +80 -25
  1154. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +20 -12
  1155. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  1156. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  1157. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +35 -85
  1158. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -85
  1159. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  1160. data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
  1161. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  1162. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  1163. data/src/core/lib/security/credentials/xds/xds_credentials.cc +31 -36
  1164. data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
  1165. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -18
  1166. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1167. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -25
  1168. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  1169. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
  1170. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -16
  1171. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1172. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
  1173. data/src/core/lib/security/security_connector/local/local_security_connector.cc +32 -24
  1174. data/src/core/lib/security/security_connector/security_connector.cc +8 -15
  1175. data/src/core/lib/security/security_connector/security_connector.h +24 -24
  1176. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -22
  1177. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1178. data/src/core/lib/security/security_connector/ssl_utils.cc +67 -39
  1179. data/src/core/lib/security/security_connector/ssl_utils.h +17 -21
  1180. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +409 -272
  1181. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +118 -79
  1182. data/src/core/lib/security/transport/auth_filters.h +38 -4
  1183. data/src/core/lib/security/transport/client_auth_filter.cc +88 -353
  1184. data/src/core/lib/security/transport/secure_endpoint.cc +8 -18
  1185. data/src/core/lib/security/transport/secure_endpoint.h +1 -0
  1186. data/src/core/lib/security/transport/security_handshaker.cc +138 -90
  1187. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1188. data/src/core/lib/security/transport/server_auth_filter.cc +58 -48
  1189. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1190. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1191. data/src/core/lib/security/util/json_util.cc +8 -10
  1192. data/src/core/lib/security/util/json_util.h +1 -1
  1193. data/src/core/lib/service_config/service_config.h +82 -0
  1194. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_call_data.h +17 -31
  1195. data/src/core/{ext/filters/client_channel/service_config.cc → lib/service_config/service_config_impl.cc} +31 -27
  1196. data/src/core/{ext/filters/client_channel/service_config.h → lib/service_config/service_config_impl.h} +22 -23
  1197. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +35 -31
  1198. data/src/core/lib/service_config/service_config_parser.h +106 -0
  1199. data/src/core/lib/slice/percent_encoding.cc +84 -97
  1200. data/src/core/lib/slice/percent_encoding.h +23 -28
  1201. data/src/core/lib/slice/slice.cc +81 -191
  1202. data/src/core/lib/slice/slice.h +384 -0
  1203. data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
  1204. data/src/core/lib/slice/slice_buffer.cc +10 -7
  1205. data/src/core/lib/slice/slice_internal.h +15 -276
  1206. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1207. data/src/core/lib/slice/slice_refcount.h +46 -0
  1208. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1209. data/src/core/lib/slice/slice_split.cc +100 -0
  1210. data/src/core/lib/slice/slice_split.h +40 -0
  1211. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1212. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1213. data/src/core/lib/surface/api_trace.cc +2 -1
  1214. data/src/core/lib/surface/api_trace.h +1 -0
  1215. data/src/core/lib/surface/builtins.cc +49 -0
  1216. data/src/core/lib/surface/builtins.h +26 -0
  1217. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  1218. data/src/core/lib/surface/call.cc +316 -521
  1219. data/src/core/lib/surface/call.h +14 -9
  1220. data/src/core/lib/surface/call_details.cc +2 -2
  1221. data/src/core/lib/surface/call_log_batch.cc +2 -2
  1222. data/src/core/lib/surface/channel.cc +75 -107
  1223. data/src/core/lib/surface/channel.h +17 -24
  1224. data/src/core/lib/surface/channel_init.cc +23 -76
  1225. data/src/core/lib/surface/channel_init.h +52 -44
  1226. data/src/core/lib/surface/channel_ping.cc +2 -3
  1227. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1228. data/src/core/lib/surface/completion_queue.cc +136 -145
  1229. data/src/core/lib/surface/completion_queue.h +3 -2
  1230. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  1231. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1232. data/src/core/lib/surface/event_string.cc +1 -0
  1233. data/src/core/lib/surface/init.cc +82 -60
  1234. data/src/core/lib/surface/init.h +10 -4
  1235. data/src/core/lib/surface/lame_client.cc +50 -35
  1236. data/src/core/lib/surface/lame_client.h +1 -1
  1237. data/src/core/lib/surface/metadata_array.cc +2 -2
  1238. data/src/core/lib/surface/server.cc +100 -128
  1239. data/src/core/lib/surface/server.h +58 -53
  1240. data/src/core/lib/surface/validate_metadata.cc +55 -24
  1241. data/src/core/lib/surface/validate_metadata.h +3 -2
  1242. data/src/core/lib/surface/version.cc +2 -2
  1243. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1244. data/src/core/lib/transport/bdp_estimator.h +2 -2
  1245. data/src/core/lib/transport/byte_stream.cc +9 -5
  1246. data/src/core/lib/transport/byte_stream.h +9 -8
  1247. data/src/core/lib/transport/connectivity_state.cc +9 -6
  1248. data/src/core/lib/transport/connectivity_state.h +2 -2
  1249. data/src/core/lib/transport/error_utils.cc +68 -29
  1250. data/src/core/lib/transport/error_utils.h +13 -6
  1251. data/src/core/lib/transport/metadata_batch.h +1348 -163
  1252. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1253. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1254. data/src/core/lib/transport/pid_controller.cc +4 -4
  1255. data/src/core/lib/transport/status_conversion.cc +2 -2
  1256. data/src/core/lib/transport/status_conversion.h +1 -1
  1257. data/src/core/lib/transport/timeout_encoding.cc +204 -67
  1258. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1259. data/src/core/lib/transport/transport.cc +15 -35
  1260. data/src/core/lib/transport/transport.h +94 -8
  1261. data/src/core/lib/transport/transport_impl.h +13 -0
  1262. data/src/core/lib/transport/transport_op_string.cc +13 -35
  1263. data/src/core/lib/uri/uri_parser.cc +237 -63
  1264. data/src/core/lib/uri/uri_parser.h +39 -23
  1265. data/src/core/plugin_registry/grpc_plugin_registry.cc +75 -102
  1266. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1267. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1268. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1269. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1270. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1271. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +36 -31
  1272. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1273. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1274. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -19
  1275. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1276. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1277. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1278. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1279. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1280. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1281. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1282. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1283. data/src/core/tsi/fake_transport_security.cc +15 -7
  1284. data/src/core/tsi/local_transport_security.cc +42 -87
  1285. data/src/core/tsi/local_transport_security.h +1 -4
  1286. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1287. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1288. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1289. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -53
  1290. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  1291. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1292. data/src/core/tsi/ssl_transport_security.cc +186 -38
  1293. data/src/core/tsi/ssl_transport_security.h +45 -11
  1294. data/src/core/tsi/transport_security.cc +15 -3
  1295. data/src/core/tsi/transport_security.h +16 -1
  1296. data/src/core/tsi/transport_security_grpc.h +1 -0
  1297. data/src/core/tsi/transport_security_interface.h +26 -0
  1298. data/src/ruby/bin/math_services_pb.rb +1 -1
  1299. data/src/ruby/ext/grpc/extconf.rb +22 -10
  1300. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1301. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1302. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1303. data/src/ruby/ext/grpc/rb_channel.c +15 -10
  1304. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1305. data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
  1306. data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
  1307. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1308. data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
  1309. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1310. data/src/ruby/ext/grpc/rb_grpc.c +5 -4
  1311. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1312. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -34
  1313. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +56 -53
  1314. data/src/ruby/ext/grpc/rb_server.c +13 -9
  1315. data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
  1316. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
  1317. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
  1318. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
  1319. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
  1320. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
  1321. data/src/ruby/lib/grpc/version.rb +1 -1
  1322. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1323. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1324. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  1325. data/src/ruby/spec/client_server_spec.rb +1 -1
  1326. data/third_party/abseil-cpp/absl/algorithm/container.h +104 -94
  1327. data/third_party/abseil-cpp/absl/base/attributes.h +88 -35
  1328. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  1329. data/third_party/abseil-cpp/absl/base/config.h +102 -44
  1330. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +25 -36
  1331. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  1332. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1333. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1334. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  1335. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  1336. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  1337. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  1338. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -6
  1339. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1340. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  1341. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1342. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1343. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1344. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +70 -1
  1345. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1346. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1347. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1348. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1349. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
  1350. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1351. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1352. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  1353. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  1354. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1355. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1356. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  1357. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -7
  1358. data/third_party/abseil-cpp/absl/container/inlined_vector.h +110 -100
  1359. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  1360. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1361. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -103
  1362. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +39 -79
  1363. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1364. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
  1365. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  1366. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1367. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +21 -2
  1368. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +374 -243
  1369. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +27 -13
  1370. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1371. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1372. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  1373. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +15 -17
  1374. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1375. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  1376. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1377. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1378. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +11 -7
  1379. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1380. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1381. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  1383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +16 -2
  1384. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1385. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1386. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1387. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1388. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1389. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
  1390. data/third_party/abseil-cpp/absl/hash/internal/hash.h +145 -45
  1391. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1392. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1393. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1394. data/third_party/abseil-cpp/absl/meta/type_traits.h +47 -3
  1395. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1396. data/third_party/abseil-cpp/absl/numeric/int128.cc +6 -13
  1397. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1398. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1399. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1400. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1401. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1402. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1403. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1404. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1405. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1406. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1407. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1408. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1409. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1410. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1411. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1412. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1413. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1414. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1415. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1416. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1417. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1419. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1420. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1421. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1422. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1423. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1424. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1425. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1426. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1427. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1428. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1429. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1430. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1431. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1432. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1433. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1434. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1435. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1436. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1437. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1438. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1439. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1440. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1441. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1442. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1443. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1444. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1445. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1446. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1447. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1448. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1449. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1450. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1451. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  1452. data/third_party/abseil-cpp/absl/status/status.cc +27 -28
  1453. data/third_party/abseil-cpp/absl/status/status.h +98 -33
  1454. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1455. data/third_party/abseil-cpp/absl/status/statusor.h +34 -24
  1456. data/third_party/abseil-cpp/absl/strings/charconv.cc +8 -8
  1457. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1458. data/third_party/abseil-cpp/absl/strings/cord.cc +619 -570
  1459. data/third_party/abseil-cpp/absl/strings/cord.h +346 -101
  1460. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  1461. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +7 -7
  1462. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1463. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +478 -31
  1464. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1465. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1466. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1467. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1468. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1469. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1470. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1471. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1472. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1473. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1474. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1475. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1476. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1477. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1478. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1479. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1480. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1481. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1482. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1483. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1484. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1485. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1486. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  1487. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +22 -0
  1488. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +18 -5
  1489. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +20 -5
  1490. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  1491. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1492. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1493. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  1494. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  1495. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +76 -73
  1496. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +38 -16
  1497. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1498. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1499. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1500. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1501. data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
  1502. data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
  1503. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1504. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1505. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1506. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  1507. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1508. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1509. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1510. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1511. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1512. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1513. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1514. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  1515. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  1516. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  1517. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -66
  1518. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  1519. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  1520. data/third_party/abseil-cpp/absl/synchronization/mutex.h +82 -65
  1521. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1522. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1523. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1524. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  1525. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  1526. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1527. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1528. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1529. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1530. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  1531. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1532. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -5
  1533. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1534. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1535. data/third_party/abseil-cpp/absl/time/time.h +93 -60
  1536. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1537. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1538. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  1539. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1540. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1541. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1542. data/third_party/boringssl-with-bazel/err_data.c +696 -662
  1543. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +67 -54
  1544. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1545. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1546. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1547. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1548. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +64 -44
  1549. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1550. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1551. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1552. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1553. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +19 -9
  1554. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -40
  1555. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1556. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +60 -49
  1557. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1558. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1559. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1560. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1561. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +91 -1
  1562. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +57 -281
  1563. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +292 -200
  1564. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +10 -10
  1565. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -14
  1566. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1567. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -1
  1568. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1569. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1570. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1571. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1572. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1573. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1574. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1575. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1576. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1577. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1578. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1579. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  1580. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1581. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1582. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1583. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  1584. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  1585. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1586. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1587. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1588. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +6 -3
  1589. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1591. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  1592. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1593. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1594. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  1595. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +26 -9
  1596. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1597. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +6 -3
  1598. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1599. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1600. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +23 -3
  1601. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
  1602. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1603. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1604. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1605. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1606. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1607. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  1608. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  1609. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  1610. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  1611. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +6 -13
  1622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +2 -15
  1623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -13
  1624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
  1625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +14 -9
  1626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +21 -16
  1628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1631. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +397 -311
  1632. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1633. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1634. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1635. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1636. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1637. data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
  1638. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1639. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1640. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1641. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1642. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1643. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1644. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1645. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1646. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1647. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1649. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
  1650. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1652. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1653. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  1656. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  1657. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1658. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1659. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1660. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1661. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1662. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1663. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1664. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1665. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1666. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  1667. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +15 -4
  1669. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1670. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1671. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1672. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +32 -0
  1685. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1686. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1687. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1688. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
  1689. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  1690. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +14 -11
  1691. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1692. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1693. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  1694. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1695. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  1696. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1697. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +12 -11
  1698. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  1699. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
  1700. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1701. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1702. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1703. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1704. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1705. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1706. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  1707. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
  1708. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  1709. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
  1710. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +8 -11
  1711. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1712. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  1713. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +23 -4
  1714. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1715. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1716. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1717. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
  1718. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  1719. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +80 -38
  1720. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  1721. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  1722. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1517 -495
  1723. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
  1724. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +57 -13
  1725. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1726. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1727. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1728. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +10 -0
  1729. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1730. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -11
  1731. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1732. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  1733. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1734. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -2
  1735. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1736. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  1737. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1738. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  1739. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1740. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +55 -104
  1741. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1742. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1743. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1744. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1745. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1746. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1747. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1748. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1749. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  1750. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  1751. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1752. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  1753. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  1754. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  1755. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +386 -104
  1756. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +41 -48
  1757. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1160 -331
  1758. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1759. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +54 -17
  1760. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1761. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1762. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1763. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +660 -747
  1764. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  1765. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +90 -43
  1766. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +307 -201
  1767. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +173 -36
  1768. data/third_party/boringssl-with-bazel/src/ssl/internal.h +474 -156
  1769. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1770. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  1771. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1772. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  1773. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1774. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1775. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +56 -110
  1776. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1777. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +129 -96
  1778. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1779. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +10 -15
  1780. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
  1781. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1782. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
  1783. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
  1784. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +146 -110
  1785. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +241 -132
  1786. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1787. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1788. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1789. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1790. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1791. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1792. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1793. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1794. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1795. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1796. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1797. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1798. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1799. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1800. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1801. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1802. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1803. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1804. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1805. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1806. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1807. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1808. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1809. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1810. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1811. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1812. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1813. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1814. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1815. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1816. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1817. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1818. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1819. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1820. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1821. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1822. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1823. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1824. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1825. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1826. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1827. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1828. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1829. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1830. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1831. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1832. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1833. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1834. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1835. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1836. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1837. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1838. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1839. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1840. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1841. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1842. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1843. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1844. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1845. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1846. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1847. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1848. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1849. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1850. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1851. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1852. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1853. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1854. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1855. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1856. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1857. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1858. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1859. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1860. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1861. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1862. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1863. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1864. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1865. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1866. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1867. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1868. data/third_party/re2/re2/compile.cc +91 -109
  1869. data/third_party/re2/re2/dfa.cc +27 -39
  1870. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1871. data/third_party/re2/re2/filtered_re2.h +10 -5
  1872. data/third_party/re2/re2/nfa.cc +1 -1
  1873. data/third_party/re2/re2/parse.cc +42 -23
  1874. data/third_party/re2/re2/perl_groups.cc +34 -34
  1875. data/third_party/re2/re2/prefilter.cc +3 -2
  1876. data/third_party/re2/re2/prog.cc +182 -4
  1877. data/third_party/re2/re2/prog.h +28 -9
  1878. data/third_party/re2/re2/re2.cc +87 -118
  1879. data/third_party/re2/re2/re2.h +156 -141
  1880. data/third_party/re2/re2/regexp.cc +12 -5
  1881. data/third_party/re2/re2/regexp.h +8 -2
  1882. data/third_party/re2/re2/set.cc +31 -9
  1883. data/third_party/re2/re2/set.h +9 -4
  1884. data/third_party/re2/re2/simplify.cc +11 -3
  1885. data/third_party/re2/re2/tostring.cc +1 -1
  1886. data/third_party/re2/re2/walker-inl.h +1 -1
  1887. data/third_party/re2/util/mutex.h +2 -2
  1888. data/third_party/re2/util/pcre.h +3 -3
  1889. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1890. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1891. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1892. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1893. data/third_party/upb/upb/decode.c +758 -351
  1894. data/third_party/upb/upb/decode.h +66 -12
  1895. data/third_party/upb/upb/decode_fast.c +596 -581
  1896. data/third_party/upb/upb/decode_fast.h +40 -13
  1897. data/third_party/upb/upb/decode_internal.h +211 -0
  1898. data/third_party/upb/upb/def.c +2089 -1069
  1899. data/third_party/upb/upb/def.h +341 -256
  1900. data/third_party/upb/upb/def.hpp +160 -161
  1901. data/third_party/upb/upb/encode.c +285 -165
  1902. data/third_party/upb/upb/encode.h +38 -13
  1903. data/third_party/upb/upb/msg.c +276 -102
  1904. data/third_party/upb/upb/msg.h +84 -582
  1905. data/third_party/upb/upb/msg_internal.h +818 -0
  1906. data/third_party/upb/upb/port_def.inc +85 -24
  1907. data/third_party/upb/upb/port_undef.inc +38 -1
  1908. data/third_party/upb/upb/reflection.c +312 -240
  1909. data/third_party/upb/upb/reflection.h +119 -67
  1910. data/third_party/upb/upb/reflection.hpp +37 -0
  1911. data/third_party/upb/upb/table.c +398 -193
  1912. data/third_party/upb/upb/table_internal.h +383 -0
  1913. data/third_party/upb/upb/text_encode.c +141 -90
  1914. data/third_party/upb/upb/text_encode.h +31 -5
  1915. data/third_party/upb/upb/upb.c +164 -66
  1916. data/third_party/upb/upb/upb.h +145 -139
  1917. data/third_party/upb/upb/upb.hpp +50 -23
  1918. data/third_party/upb/upb/upb_internal.h +68 -0
  1919. data/third_party/xxhash/xxhash.h +679 -542
  1920. metadata +597 -254
  1921. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1922. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -84
  1923. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  1924. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1925. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  1926. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1927. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -92
  1928. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  1929. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1930. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1931. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1932. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1933. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -125
  1934. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -90
  1935. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -213
  1936. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -55
  1937. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -76
  1938. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -130
  1939. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1940. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  1941. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1942. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1943. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1944. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1945. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  1946. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1947. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  1948. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1949. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  1950. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1951. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  1952. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1953. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  1954. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1955. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  1956. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1957. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -77
  1958. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1959. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1960. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1961. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1962. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1963. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1964. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1965. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1966. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1967. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1968. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1969. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1970. data/src/core/lib/avl/avl.cc +0 -306
  1971. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  1972. data/src/core/lib/compression/compression_args.cc +0 -135
  1973. data/src/core/lib/compression/compression_args.h +0 -56
  1974. data/src/core/lib/compression/stream_compression.cc +0 -80
  1975. data/src/core/lib/compression/stream_compression.h +0 -116
  1976. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  1977. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1978. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  1979. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1980. data/src/core/lib/gpr/arena.h +0 -47
  1981. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1982. data/src/core/lib/gpr/tls_msvc.h +0 -54
  1983. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1984. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  1985. data/src/core/lib/gprpp/atomic.h +0 -104
  1986. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1987. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1988. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1989. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1990. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  1991. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1992. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  1993. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  1994. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  1995. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1996. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  1997. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  1998. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
  1999. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2000. data/src/core/lib/iomgr/resource_quota.cc +0 -1016
  2001. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2002. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2003. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -161
  2004. data/src/core/lib/iomgr/tcp_custom.cc +0 -391
  2005. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2006. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -483
  2007. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2008. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2009. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2010. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2011. data/src/core/lib/iomgr/udp_server.cc +0 -747
  2012. data/src/core/lib/iomgr/udp_server.h +0 -103
  2013. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2014. data/src/core/lib/slice/slice_intern.cc +0 -373
  2015. data/src/core/lib/slice/slice_utils.h +0 -200
  2016. data/src/core/lib/surface/init_secure.cc +0 -81
  2017. data/src/core/lib/transport/metadata.cc +0 -693
  2018. data/src/core/lib/transport/metadata.h +0 -446
  2019. data/src/core/lib/transport/metadata_batch.cc +0 -419
  2020. data/src/core/lib/transport/static_metadata.cc +0 -1249
  2021. data/src/core/lib/transport/static_metadata.h +0 -604
  2022. data/src/core/lib/transport/status_metadata.cc +0 -62
  2023. data/src/core/lib/transport/status_metadata.h +0 -48
  2024. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  2025. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  2026. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2028. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  2029. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2030. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2031. data/third_party/cares/cares/ares_getopt.c +0 -122
  2032. data/third_party/cares/cares/ares_getopt.h +0 -53
  2033. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2034. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2035. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2036. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  2037. data/third_party/upb/upb/decode.int.h +0 -163
  2038. data/third_party/upb/upb/table.int.h +0 -475
  2039. data/third_party/upb/upb/upb.int.h +0 -29
@@ -36,6 +36,11 @@
36
36
  #include "absl/container/inlined_vector.h"
37
37
  #include "absl/strings/escaping.h"
38
38
  #include "absl/strings/internal/cord_internal.h"
39
+ #include "absl/strings/internal/cord_rep_btree.h"
40
+ #include "absl/strings/internal/cord_rep_flat.h"
41
+ #include "absl/strings/internal/cordz_statistics.h"
42
+ #include "absl/strings/internal/cordz_update_scope.h"
43
+ #include "absl/strings/internal/cordz_update_tracker.h"
39
44
  #include "absl/strings/internal/resize_uninitialized.h"
40
45
  #include "absl/strings/str_cat.h"
41
46
  #include "absl/strings/str_format.h"
@@ -46,100 +51,18 @@ namespace absl {
46
51
  ABSL_NAMESPACE_BEGIN
47
52
 
48
53
  using ::absl::cord_internal::CordRep;
54
+ using ::absl::cord_internal::CordRepBtree;
49
55
  using ::absl::cord_internal::CordRepConcat;
50
56
  using ::absl::cord_internal::CordRepExternal;
57
+ using ::absl::cord_internal::CordRepFlat;
51
58
  using ::absl::cord_internal::CordRepSubstring;
59
+ using ::absl::cord_internal::CordzUpdateTracker;
60
+ using ::absl::cord_internal::InlineData;
61
+ using ::absl::cord_internal::kMaxFlatLength;
62
+ using ::absl::cord_internal::kMinFlatLength;
52
63
 
53
- // Various representations that we allow
54
- enum CordRepKind {
55
- CONCAT = 0,
56
- EXTERNAL = 1,
57
- SUBSTRING = 2,
58
-
59
- // We have different tags for different sized flat arrays,
60
- // starting with FLAT
61
- FLAT = 3,
62
- };
63
-
64
- namespace cord_internal {
65
-
66
- inline CordRepConcat* CordRep::concat() {
67
- assert(tag == CONCAT);
68
- return static_cast<CordRepConcat*>(this);
69
- }
70
-
71
- inline const CordRepConcat* CordRep::concat() const {
72
- assert(tag == CONCAT);
73
- return static_cast<const CordRepConcat*>(this);
74
- }
75
-
76
- inline CordRepSubstring* CordRep::substring() {
77
- assert(tag == SUBSTRING);
78
- return static_cast<CordRepSubstring*>(this);
79
- }
80
-
81
- inline const CordRepSubstring* CordRep::substring() const {
82
- assert(tag == SUBSTRING);
83
- return static_cast<const CordRepSubstring*>(this);
84
- }
85
-
86
- inline CordRepExternal* CordRep::external() {
87
- assert(tag == EXTERNAL);
88
- return static_cast<CordRepExternal*>(this);
89
- }
90
-
91
- inline const CordRepExternal* CordRep::external() const {
92
- assert(tag == EXTERNAL);
93
- return static_cast<const CordRepExternal*>(this);
94
- }
95
-
96
- } // namespace cord_internal
97
-
98
- static const size_t kFlatOverhead = offsetof(CordRep, data);
99
-
100
- // Largest and smallest flat node lengths we are willing to allocate
101
- // Flat allocation size is stored in tag, which currently can encode sizes up
102
- // to 4K, encoded as multiple of either 8 or 32 bytes.
103
- // If we allow for larger sizes, we need to change this to 8/64, 16/128, etc.
104
- static constexpr size_t kMaxFlatSize = 4096;
105
- static constexpr size_t kMaxFlatLength = kMaxFlatSize - kFlatOverhead;
106
- static constexpr size_t kMinFlatLength = 32 - kFlatOverhead;
107
-
108
- // Prefer copying blocks of at most this size, otherwise reference count.
109
- static const size_t kMaxBytesToCopy = 511;
110
-
111
- // Helper functions for rounded div, and rounding to exact sizes.
112
- static size_t DivUp(size_t n, size_t m) { return (n + m - 1) / m; }
113
- static size_t RoundUp(size_t n, size_t m) { return DivUp(n, m) * m; }
114
-
115
- // Returns the size to the nearest equal or larger value that can be
116
- // expressed exactly as a tag value.
117
- static size_t RoundUpForTag(size_t size) {
118
- return RoundUp(size, (size <= 1024) ? 8 : 32);
119
- }
120
-
121
- // Converts the allocated size to a tag, rounding down if the size
122
- // does not exactly match a 'tag expressible' size value. The result is
123
- // undefined if the size exceeds the maximum size that can be encoded in
124
- // a tag, i.e., if size is larger than TagToAllocatedSize(<max tag>).
125
- static uint8_t AllocatedSizeToTag(size_t size) {
126
- const size_t tag = (size <= 1024) ? size / 8 : 128 + size / 32 - 1024 / 32;
127
- assert(tag <= std::numeric_limits<uint8_t>::max());
128
- return tag;
129
- }
130
-
131
- // Converts the provided tag to the corresponding allocated size
132
- static constexpr size_t TagToAllocatedSize(uint8_t tag) {
133
- return (tag <= 128) ? (tag * 8) : (1024 + (tag - 128) * 32);
134
- }
135
-
136
- // Converts the provided tag to the corresponding available data length
137
- static constexpr size_t TagToLength(uint8_t tag) {
138
- return TagToAllocatedSize(tag) - kFlatOverhead;
139
- }
140
-
141
- // Enforce that kMaxFlatSize maps to a well-known exact tag value.
142
- static_assert(TagToAllocatedSize(224) == kMaxFlatSize, "Bad tag logic");
64
+ using ::absl::cord_internal::kInlinedVectorSize;
65
+ using ::absl::cord_internal::kMaxBytesToCopy;
143
66
 
144
67
  constexpr uint64_t Fibonacci(unsigned char n, uint64_t a = 0, uint64_t b = 1) {
145
68
  return n == 0 ? a : Fibonacci(n - 1, b, a + b);
@@ -171,19 +94,13 @@ static constexpr uint64_t min_length[] = {
171
94
 
172
95
  static const int kMinLengthSize = ABSL_ARRAYSIZE(min_length);
173
96
 
174
- // The inlined size to use with absl::InlinedVector.
175
- //
176
- // Note: The InlinedVectors in this file (and in cord.h) do not need to use
177
- // the same value for their inlined size. The fact that they do is historical.
178
- // It may be desirable for each to use a different inlined size optimized for
179
- // that InlinedVector's usage.
180
- //
181
- // TODO(jgm): Benchmark to see if there's a more optimal value than 47 for
182
- // the inlined vector size (47 exists for backward compatibility).
183
- static const int kInlinedVectorSize = 47;
97
+ static inline bool btree_enabled() {
98
+ return cord_internal::cord_btree_enabled.load(
99
+ std::memory_order_relaxed);
100
+ }
184
101
 
185
102
  static inline bool IsRootBalanced(CordRep* node) {
186
- if (node->tag != CONCAT) {
103
+ if (!node->IsConcat()) {
187
104
  return true;
188
105
  } else if (node->concat()->depth() <= 15) {
189
106
  return true;
@@ -197,7 +114,8 @@ static inline bool IsRootBalanced(CordRep* node) {
197
114
  }
198
115
 
199
116
  static CordRep* Rebalance(CordRep* node);
200
- static void DumpNode(CordRep* rep, bool include_data, std::ostream* os);
117
+ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
118
+ int indent = 0);
201
119
  static bool VerifyNode(CordRep* root, CordRep* start_node,
202
120
  bool full_validation);
203
121
 
@@ -217,99 +135,9 @@ static inline CordRep* VerifyTree(CordRep* node) {
217
135
  return node;
218
136
  }
219
137
 
220
- // --------------------------------------------------------------------
221
- // Memory management
222
-
223
- inline CordRep* Ref(CordRep* rep) {
224
- if (rep != nullptr) {
225
- rep->refcount.Increment();
226
- }
227
- return rep;
228
- }
229
-
230
- // This internal routine is called from the cold path of Unref below. Keeping it
231
- // in a separate routine allows good inlining of Unref into many profitable call
232
- // sites. However, the call to this function can be highly disruptive to the
233
- // register pressure in those callers. To minimize the cost to callers, we use
234
- // a special LLVM calling convention that preserves most registers. This allows
235
- // the call to this routine in cold paths to not disrupt the caller's register
236
- // pressure. This calling convention is not available on all platforms; we
237
- // intentionally allow LLVM to ignore the attribute rather than attempting to
238
- // hardcode the list of supported platforms.
239
- #if defined(__clang__) && !defined(__i386__)
240
- #pragma clang diagnostic push
241
- #pragma clang diagnostic ignored "-Wattributes"
242
- __attribute__((preserve_most))
243
- #pragma clang diagnostic pop
244
- #endif
245
- static void UnrefInternal(CordRep* rep) {
246
- assert(rep != nullptr);
247
-
248
- absl::InlinedVector<CordRep*, kInlinedVectorSize> pending;
249
- while (true) {
250
- if (rep->tag == CONCAT) {
251
- CordRepConcat* rep_concat = rep->concat();
252
- CordRep* right = rep_concat->right;
253
- if (!right->refcount.Decrement()) {
254
- pending.push_back(right);
255
- }
256
- CordRep* left = rep_concat->left;
257
- delete rep_concat;
258
- rep = nullptr;
259
- if (!left->refcount.Decrement()) {
260
- rep = left;
261
- continue;
262
- }
263
- } else if (rep->tag == EXTERNAL) {
264
- CordRepExternal* rep_external = rep->external();
265
- rep_external->releaser_invoker(rep_external);
266
- rep = nullptr;
267
- } else if (rep->tag == SUBSTRING) {
268
- CordRepSubstring* rep_substring = rep->substring();
269
- CordRep* child = rep_substring->child;
270
- delete rep_substring;
271
- rep = nullptr;
272
- if (!child->refcount.Decrement()) {
273
- rep = child;
274
- continue;
275
- }
276
- } else {
277
- // Flat CordReps are allocated and constructed with raw ::operator new
278
- // and placement new, and must be destructed and deallocated
279
- // accordingly.
280
- #if defined(__cpp_sized_deallocation)
281
- size_t size = TagToAllocatedSize(rep->tag);
282
- rep->~CordRep();
283
- ::operator delete(rep, size);
284
- #else
285
- rep->~CordRep();
286
- ::operator delete(rep);
287
- #endif
288
- rep = nullptr;
289
- }
290
-
291
- if (!pending.empty()) {
292
- rep = pending.back();
293
- pending.pop_back();
294
- } else {
295
- break;
296
- }
297
- }
298
- }
299
-
300
- inline void Unref(CordRep* rep) {
301
- // Fast-path for two common, hot cases: a null rep and a shared root.
302
- if (ABSL_PREDICT_TRUE(rep == nullptr ||
303
- rep->refcount.DecrementExpectHighRefcount())) {
304
- return;
305
- }
306
-
307
- UnrefInternal(rep);
308
- }
309
-
310
138
  // Return the depth of a node
311
139
  static int Depth(const CordRep* rep) {
312
- if (rep->tag == CONCAT) {
140
+ if (rep->IsConcat()) {
313
141
  return rep->concat()->depth();
314
142
  } else {
315
143
  return 0;
@@ -330,17 +158,19 @@ static void SetConcatChildren(CordRepConcat* concat, CordRep* left,
330
158
  // The returned node has a refcount of 1.
331
159
  static CordRep* RawConcat(CordRep* left, CordRep* right) {
332
160
  // Avoid making degenerate concat nodes (one child is empty)
333
- if (left == nullptr || left->length == 0) {
334
- Unref(left);
161
+ if (left == nullptr) return right;
162
+ if (right == nullptr) return left;
163
+ if (left->length == 0) {
164
+ CordRep::Unref(left);
335
165
  return right;
336
166
  }
337
- if (right == nullptr || right->length == 0) {
338
- Unref(right);
167
+ if (right->length == 0) {
168
+ CordRep::Unref(right);
339
169
  return left;
340
170
  }
341
171
 
342
172
  CordRepConcat* rep = new CordRepConcat();
343
- rep->tag = CONCAT;
173
+ rep->tag = cord_internal::CONCAT;
344
174
  SetConcatChildren(rep, left, right);
345
175
 
346
176
  return rep;
@@ -374,35 +204,41 @@ static CordRep* MakeBalancedTree(CordRep** reps, size_t n) {
374
204
  return reps[0];
375
205
  }
376
206
 
377
- // Create a new flat node.
378
- static CordRep* NewFlat(size_t length_hint) {
379
- if (length_hint <= kMinFlatLength) {
380
- length_hint = kMinFlatLength;
381
- } else if (length_hint > kMaxFlatLength) {
382
- length_hint = kMaxFlatLength;
383
- }
207
+ static CordRepFlat* CreateFlat(const char* data, size_t length,
208
+ size_t alloc_hint) {
209
+ CordRepFlat* flat = CordRepFlat::New(length + alloc_hint);
210
+ flat->length = length;
211
+ memcpy(flat->Data(), data, length);
212
+ return flat;
213
+ }
384
214
 
385
- // Round size up so it matches a size we can exactly express in a tag.
386
- const size_t size = RoundUpForTag(length_hint + kFlatOverhead);
387
- void* const raw_rep = ::operator new(size);
388
- CordRep* rep = new (raw_rep) CordRep();
389
- rep->tag = AllocatedSizeToTag(size);
390
- return VerifyTree(rep);
215
+ // Creates a new flat or Btree out of the specified array.
216
+ // The returned node has a refcount of 1.
217
+ static CordRep* NewBtree(const char* data, size_t length, size_t alloc_hint) {
218
+ if (length <= kMaxFlatLength) {
219
+ return CreateFlat(data, length, alloc_hint);
220
+ }
221
+ CordRepFlat* flat = CreateFlat(data, kMaxFlatLength, 0);
222
+ data += kMaxFlatLength;
223
+ length -= kMaxFlatLength;
224
+ auto* root = CordRepBtree::Create(flat);
225
+ return CordRepBtree::Append(root, {data, length}, alloc_hint);
391
226
  }
392
227
 
393
228
  // Create a new tree out of the specified array.
394
229
  // The returned node has a refcount of 1.
395
- static CordRep* NewTree(const char* data,
396
- size_t length,
397
- size_t alloc_hint) {
230
+ static CordRep* NewTree(const char* data, size_t length, size_t alloc_hint) {
398
231
  if (length == 0) return nullptr;
232
+ if (btree_enabled()) {
233
+ return NewBtree(data, length, alloc_hint);
234
+ }
399
235
  absl::FixedArray<CordRep*> reps((length - 1) / kMaxFlatLength + 1);
400
236
  size_t n = 0;
401
237
  do {
402
238
  const size_t len = std::min(length, kMaxFlatLength);
403
- CordRep* rep = NewFlat(len + alloc_hint);
239
+ CordRepFlat* rep = CordRepFlat::New(len + alloc_hint);
404
240
  rep->length = len;
405
- memcpy(rep->data, data, len);
241
+ memcpy(rep->Data(), data, len);
406
242
  reps[n++] = VerifyTree(rep);
407
243
  data += len;
408
244
  length -= len;
@@ -425,19 +261,48 @@ void InitializeCordRepExternal(absl::string_view data, CordRepExternal* rep) {
425
261
  static CordRep* NewSubstring(CordRep* child, size_t offset, size_t length) {
426
262
  // Never create empty substring nodes
427
263
  if (length == 0) {
428
- Unref(child);
264
+ CordRep::Unref(child);
429
265
  return nullptr;
430
266
  } else {
431
267
  CordRepSubstring* rep = new CordRepSubstring();
432
268
  assert((offset + length) <= child->length);
433
269
  rep->length = length;
434
- rep->tag = SUBSTRING;
270
+ rep->tag = cord_internal::SUBSTRING;
435
271
  rep->start = offset;
436
272
  rep->child = child;
437
273
  return VerifyTree(rep);
438
274
  }
439
275
  }
440
276
 
277
+ // Creates a CordRep from the provided string. If the string is large enough,
278
+ // and not wasteful, we move the string into an external cord rep, preserving
279
+ // the already allocated string contents.
280
+ // Requires the provided string length to be larger than `kMaxInline`.
281
+ static CordRep* CordRepFromString(std::string&& src) {
282
+ assert(src.length() > cord_internal::kMaxInline);
283
+ if (
284
+ // String is short: copy data to avoid external block overhead.
285
+ src.size() <= kMaxBytesToCopy ||
286
+ // String is wasteful: copy data to avoid pinning too much unused memory.
287
+ src.size() < src.capacity() / 2
288
+ ) {
289
+ return NewTree(src.data(), src.size(), 0);
290
+ }
291
+
292
+ struct StringReleaser {
293
+ void operator()(absl::string_view /* data */) {}
294
+ std::string data;
295
+ };
296
+ const absl::string_view original_data = src;
297
+ auto* rep =
298
+ static_cast<::absl::cord_internal::CordRepExternalImpl<StringReleaser>*>(
299
+ absl::cord_internal::NewExternalRep(original_data,
300
+ StringReleaser{std::move(src)}));
301
+ // Moving src may have invalidated its data pointer, so adjust it.
302
+ rep->base = rep->template get<0>().data.data();
303
+ return rep;
304
+ }
305
+
441
306
  // --------------------------------------------------------------------
442
307
  // Cord::InlineRep functions
443
308
 
@@ -447,62 +312,104 @@ inline void Cord::InlineRep::set_data(const char* data, size_t n,
447
312
  bool nullify_tail) {
448
313
  static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15");
449
314
 
450
- cord_internal::SmallMemmove(data_, data, n, nullify_tail);
451
- data_[kMaxInline] = static_cast<char>(n);
315
+ cord_internal::SmallMemmove(data_.as_chars(), data, n, nullify_tail);
316
+ set_inline_size(n);
452
317
  }
453
318
 
454
319
  inline char* Cord::InlineRep::set_data(size_t n) {
455
320
  assert(n <= kMaxInline);
456
- memset(data_, 0, sizeof(data_));
457
- data_[kMaxInline] = static_cast<char>(n);
458
- return data_;
459
- }
460
-
461
- inline CordRep* Cord::InlineRep::force_tree(size_t extra_hint) {
462
- size_t len = data_[kMaxInline];
463
- CordRep* result;
464
- if (len > kMaxInline) {
465
- memcpy(&result, data_, sizeof(result));
466
- } else {
467
- result = NewFlat(len + extra_hint);
468
- result->length = len;
469
- memcpy(result->data, data_, len);
470
- set_tree(result);
471
- }
472
- return result;
321
+ ResetToEmpty();
322
+ set_inline_size(n);
323
+ return data_.as_chars();
473
324
  }
474
325
 
475
326
  inline void Cord::InlineRep::reduce_size(size_t n) {
476
- size_t tag = data_[kMaxInline];
327
+ size_t tag = inline_size();
477
328
  assert(tag <= kMaxInline);
478
329
  assert(tag >= n);
479
330
  tag -= n;
480
- memset(data_ + tag, 0, n);
481
- data_[kMaxInline] = static_cast<char>(tag);
331
+ memset(data_.as_chars() + tag, 0, n);
332
+ set_inline_size(static_cast<char>(tag));
482
333
  }
483
334
 
484
335
  inline void Cord::InlineRep::remove_prefix(size_t n) {
485
- cord_internal::SmallMemmove(data_, data_ + n, data_[kMaxInline] - n);
336
+ cord_internal::SmallMemmove(data_.as_chars(), data_.as_chars() + n,
337
+ inline_size() - n);
486
338
  reduce_size(n);
487
339
  }
488
340
 
489
- void Cord::InlineRep::AppendTree(CordRep* tree) {
341
+ // Returns `rep` converted into a CordRepBtree.
342
+ // Directly returns `rep` if `rep` is already a CordRepBtree.
343
+ static CordRepBtree* ForceBtree(CordRep* rep) {
344
+ return rep->IsBtree() ? rep->btree() : CordRepBtree::Create(rep);
345
+ }
346
+
347
+ void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
348
+ MethodIdentifier method) {
349
+ assert(!is_tree());
350
+ if (!data_.is_empty()) {
351
+ CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
352
+ if (btree_enabled()) {
353
+ tree = CordRepBtree::Append(CordRepBtree::Create(flat), tree);
354
+ } else {
355
+ tree = Concat(flat, tree);
356
+ }
357
+ }
358
+ EmplaceTree(tree, method);
359
+ }
360
+
361
+ void Cord::InlineRep::AppendTreeToTree(CordRep* tree, MethodIdentifier method) {
362
+ assert(is_tree());
363
+ const CordzUpdateScope scope(data_.cordz_info(), method);
364
+ if (btree_enabled()) {
365
+ tree = CordRepBtree::Append(ForceBtree(data_.as_tree()), tree);
366
+ } else {
367
+ tree = Concat(data_.as_tree(), tree);
368
+ }
369
+ SetTree(tree, scope);
370
+ }
371
+
372
+ void Cord::InlineRep::AppendTree(CordRep* tree, MethodIdentifier method) {
490
373
  if (tree == nullptr) return;
491
- size_t len = data_[kMaxInline];
492
- if (len == 0) {
493
- set_tree(tree);
374
+ if (data_.is_tree()) {
375
+ AppendTreeToTree(tree, method);
376
+ } else {
377
+ AppendTreeToInlined(tree, method);
378
+ }
379
+ }
380
+
381
+ void Cord::InlineRep::PrependTreeToInlined(CordRep* tree,
382
+ MethodIdentifier method) {
383
+ assert(!is_tree());
384
+ if (!data_.is_empty()) {
385
+ CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
386
+ if (btree_enabled()) {
387
+ tree = CordRepBtree::Prepend(CordRepBtree::Create(flat), tree);
388
+ } else {
389
+ tree = Concat(tree, flat);
390
+ }
391
+ }
392
+ EmplaceTree(tree, method);
393
+ }
394
+
395
+ void Cord::InlineRep::PrependTreeToTree(CordRep* tree,
396
+ MethodIdentifier method) {
397
+ assert(is_tree());
398
+ const CordzUpdateScope scope(data_.cordz_info(), method);
399
+ if (btree_enabled()) {
400
+ tree = CordRepBtree::Prepend(ForceBtree(data_.as_tree()), tree);
494
401
  } else {
495
- set_tree(Concat(force_tree(0), tree));
402
+ tree = Concat(tree, data_.as_tree());
496
403
  }
404
+ SetTree(tree, scope);
497
405
  }
498
406
 
499
- void Cord::InlineRep::PrependTree(CordRep* tree) {
407
+ void Cord::InlineRep::PrependTree(CordRep* tree, MethodIdentifier method) {
500
408
  assert(tree != nullptr);
501
- size_t len = data_[kMaxInline];
502
- if (len == 0) {
503
- set_tree(tree);
409
+ if (data_.is_tree()) {
410
+ PrependTreeToTree(tree, method);
504
411
  } else {
505
- set_tree(Concat(tree, force_tree(0)));
412
+ PrependTreeToInlined(tree, method);
506
413
  }
507
414
  }
508
415
 
@@ -512,20 +419,29 @@ void Cord::InlineRep::PrependTree(CordRep* tree) {
512
419
  // written to region and the actual size increase will be written to size.
513
420
  static inline bool PrepareAppendRegion(CordRep* root, char** region,
514
421
  size_t* size, size_t max_length) {
422
+ if (root->IsBtree() && root->refcount.IsMutable()) {
423
+ Span<char> span = root->btree()->GetAppendBuffer(max_length);
424
+ if (!span.empty()) {
425
+ *region = span.data();
426
+ *size = span.size();
427
+ return true;
428
+ }
429
+ }
430
+
515
431
  // Search down the right-hand path for a non-full FLAT node.
516
432
  CordRep* dst = root;
517
- while (dst->tag == CONCAT && dst->refcount.IsOne()) {
433
+ while (dst->IsConcat() && dst->refcount.IsMutable()) {
518
434
  dst = dst->concat()->right;
519
435
  }
520
436
 
521
- if (dst->tag < FLAT || !dst->refcount.IsOne()) {
437
+ if (!dst->IsFlat() || !dst->refcount.IsMutable()) {
522
438
  *region = nullptr;
523
439
  *size = 0;
524
440
  return false;
525
441
  }
526
442
 
527
443
  const size_t in_use = dst->length;
528
- const size_t capacity = TagToLength(dst->tag);
444
+ const size_t capacity = dst->flat()->Capacity();
529
445
  if (in_use == capacity) {
530
446
  *region = nullptr;
531
447
  *size = 0;
@@ -540,142 +456,145 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
540
456
  }
541
457
  dst->length += size_increase;
542
458
 
543
- *region = dst->data + in_use;
459
+ *region = dst->flat()->Data() + in_use;
544
460
  *size = size_increase;
545
461
  return true;
546
462
  }
547
463
 
464
+ template <bool has_length>
548
465
  void Cord::InlineRep::GetAppendRegion(char** region, size_t* size,
549
- size_t max_length) {
550
- if (max_length == 0) {
551
- *region = nullptr;
552
- *size = 0;
553
- return;
554
- }
466
+ size_t length) {
467
+ auto constexpr method = CordzUpdateTracker::kGetAppendRegion;
555
468
 
556
- // Try to fit in the inline buffer if possible.
557
- size_t inline_length = data_[kMaxInline];
558
- if (inline_length < kMaxInline && max_length <= kMaxInline - inline_length) {
559
- *region = data_ + inline_length;
560
- *size = max_length;
561
- data_[kMaxInline] = static_cast<char>(inline_length + max_length);
562
- return;
469
+ CordRep* root = tree();
470
+ size_t sz = root ? root->length : inline_size();
471
+ if (root == nullptr) {
472
+ size_t available = kMaxInline - sz;
473
+ if (available >= (has_length ? length : 1)) {
474
+ *region = data_.as_chars() + sz;
475
+ *size = has_length ? length : available;
476
+ set_inline_size(has_length ? sz + length : kMaxInline);
477
+ return;
478
+ }
563
479
  }
564
480
 
565
- CordRep* root = force_tree(max_length);
566
-
567
- if (PrepareAppendRegion(root, region, size, max_length)) {
481
+ size_t extra = has_length ? length : (std::max)(sz, kMinFlatLength);
482
+ CordRep* rep = root ? root : MakeFlatWithExtraCapacity(extra);
483
+ CordzUpdateScope scope(root ? data_.cordz_info() : nullptr, method);
484
+ if (PrepareAppendRegion(rep, region, size, length)) {
485
+ CommitTree(root, rep, scope, method);
568
486
  return;
569
487
  }
570
488
 
571
489
  // Allocate new node.
572
- CordRep* new_node =
573
- NewFlat(std::max(static_cast<size_t>(root->length), max_length));
574
- new_node->length =
575
- std::min(static_cast<size_t>(TagToLength(new_node->tag)), max_length);
576
- *region = new_node->data;
490
+ CordRepFlat* new_node = CordRepFlat::New(extra);
491
+ new_node->length = std::min(new_node->Capacity(), length);
492
+ *region = new_node->Data();
577
493
  *size = new_node->length;
578
- replace_tree(Concat(root, new_node));
579
- }
580
-
581
- void Cord::InlineRep::GetAppendRegion(char** region, size_t* size) {
582
- const size_t max_length = std::numeric_limits<size_t>::max();
583
494
 
584
- // Try to fit in the inline buffer if possible.
585
- size_t inline_length = data_[kMaxInline];
586
- if (inline_length < kMaxInline) {
587
- *region = data_ + inline_length;
588
- *size = kMaxInline - inline_length;
589
- data_[kMaxInline] = kMaxInline;
590
- return;
495
+ if (btree_enabled()) {
496
+ rep = CordRepBtree::Append(ForceBtree(rep), new_node);
497
+ } else {
498
+ rep = Concat(rep, new_node);
591
499
  }
500
+ CommitTree(root, rep, scope, method);
501
+ }
592
502
 
593
- CordRep* root = force_tree(max_length);
594
-
595
- if (PrepareAppendRegion(root, region, size, max_length)) {
596
- return;
503
+ // Computes the memory side of the provided edge which must be a valid data edge
504
+ // for a btrtee, i.e., a FLAT, EXTERNAL or SUBSTRING of a FLAT or EXTERNAL node.
505
+ static bool RepMemoryUsageDataEdge(const CordRep* rep,
506
+ size_t* total_mem_usage) {
507
+ size_t maybe_sub_size = 0;
508
+ if (ABSL_PREDICT_FALSE(rep->IsSubstring())) {
509
+ maybe_sub_size = sizeof(cord_internal::CordRepSubstring);
510
+ rep = rep->substring()->child;
597
511
  }
598
-
599
- // Allocate new node.
600
- CordRep* new_node = NewFlat(root->length);
601
- new_node->length = TagToLength(new_node->tag);
602
- *region = new_node->data;
603
- *size = new_node->length;
604
- replace_tree(Concat(root, new_node));
512
+ if (rep->IsFlat()) {
513
+ *total_mem_usage += maybe_sub_size + rep->flat()->AllocatedSize();
514
+ return true;
515
+ }
516
+ if (rep->IsExternal()) {
517
+ // We don't know anything about the embedded / bound data, but we can safely
518
+ // assume it is 'at least' a word / pointer to data. In the future we may
519
+ // choose to use the 'data' byte as a tag to identify the types of some
520
+ // well-known externals, such as a std::string instance.
521
+ *total_mem_usage += maybe_sub_size +
522
+ sizeof(cord_internal::CordRepExternalImpl<intptr_t>) +
523
+ rep->length;
524
+ return true;
525
+ }
526
+ return false;
605
527
  }
606
528
 
607
529
  // If the rep is a leaf, this will increment the value at total_mem_usage and
608
530
  // will return true.
609
531
  static bool RepMemoryUsageLeaf(const CordRep* rep, size_t* total_mem_usage) {
610
- if (rep->tag >= FLAT) {
611
- *total_mem_usage += TagToAllocatedSize(rep->tag);
532
+ if (rep->IsFlat()) {
533
+ *total_mem_usage += rep->flat()->AllocatedSize();
612
534
  return true;
613
535
  }
614
- if (rep->tag == EXTERNAL) {
615
- *total_mem_usage += sizeof(CordRepConcat) + rep->length;
536
+ if (rep->IsExternal()) {
537
+ // We don't know anything about the embedded / bound data, but we can safely
538
+ // assume it is 'at least' a word / pointer to data. In the future we may
539
+ // choose to use the 'data' byte as a tag to identify the types of some
540
+ // well-known externals, such as a std::string instance.
541
+ *total_mem_usage +=
542
+ sizeof(cord_internal::CordRepExternalImpl<intptr_t>) + rep->length;
616
543
  return true;
617
544
  }
618
545
  return false;
619
546
  }
620
547
 
621
548
  void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
622
- ClearSlow();
549
+ assert(&src != this);
550
+ assert(is_tree() || src.is_tree());
551
+ auto constexpr method = CordzUpdateTracker::kAssignCord;
552
+ if (ABSL_PREDICT_TRUE(!is_tree())) {
553
+ EmplaceTree(CordRep::Ref(src.as_tree()), src.data_, method);
554
+ return;
555
+ }
623
556
 
624
- memcpy(data_, src.data_, sizeof(data_));
625
- if (is_tree()) {
626
- Ref(tree());
557
+ CordRep* tree = as_tree();
558
+ if (CordRep* src_tree = src.tree()) {
559
+ // Leave any existing `cordz_info` in place, and let MaybeTrackCord()
560
+ // decide if this cord should be (or remains to be) sampled or not.
561
+ data_.set_tree(CordRep::Ref(src_tree));
562
+ CordzInfo::MaybeTrackCord(data_, src.data_, method);
563
+ } else {
564
+ CordzInfo::MaybeUntrackCord(data_.cordz_info());
565
+ data_ = src.data_;
627
566
  }
567
+ CordRep::Unref(tree);
628
568
  }
629
569
 
630
- void Cord::InlineRep::ClearSlow() {
570
+ void Cord::InlineRep::UnrefTree() {
631
571
  if (is_tree()) {
632
- Unref(tree());
572
+ CordzInfo::MaybeUntrackCord(data_.cordz_info());
573
+ CordRep::Unref(tree());
633
574
  }
634
- memset(data_, 0, sizeof(data_));
635
575
  }
636
576
 
637
577
  // --------------------------------------------------------------------
638
578
  // Constructors and destructors
639
579
 
640
- Cord::Cord(const Cord& src) : contents_(src.contents_) {
641
- Ref(contents_.tree()); // Does nothing if contents_ has embedded data
642
- }
643
-
644
- Cord::Cord(absl::string_view src) {
580
+ Cord::Cord(absl::string_view src, MethodIdentifier method)
581
+ : contents_(InlineData::kDefaultInit) {
645
582
  const size_t n = src.size();
646
583
  if (n <= InlineRep::kMaxInline) {
647
- contents_.set_data(src.data(), n, false);
584
+ contents_.set_data(src.data(), n, true);
648
585
  } else {
649
- contents_.set_tree(NewTree(src.data(), n, 0));
586
+ CordRep* rep = NewTree(src.data(), n, 0);
587
+ contents_.EmplaceTree(rep, method);
650
588
  }
651
589
  }
652
590
 
653
591
  template <typename T, Cord::EnableIfString<T>>
654
- Cord::Cord(T&& src) {
655
- if (
656
- // String is short: copy data to avoid external block overhead.
657
- src.size() <= kMaxBytesToCopy ||
658
- // String is wasteful: copy data to avoid pinning too much unused memory.
659
- src.size() < src.capacity() / 2
660
- ) {
661
- if (src.size() <= InlineRep::kMaxInline) {
662
- contents_.set_data(src.data(), src.size(), false);
663
- } else {
664
- contents_.set_tree(NewTree(src.data(), src.size(), 0));
665
- }
592
+ Cord::Cord(T&& src) : contents_(InlineData::kDefaultInit) {
593
+ if (src.size() <= InlineRep::kMaxInline) {
594
+ contents_.set_data(src.data(), src.size(), true);
666
595
  } else {
667
- struct StringReleaser {
668
- void operator()(absl::string_view /* data */) {}
669
- std::string data;
670
- };
671
- const absl::string_view original_data = src;
672
- auto* rep = static_cast<
673
- ::absl::cord_internal::CordRepExternalImpl<StringReleaser>*>(
674
- absl::cord_internal::NewExternalRep(
675
- original_data, StringReleaser{std::forward<T>(src)}));
676
- // Moving src may have invalidated its data pointer, so adjust it.
677
- rep->base = rep->template get<0>().data.data();
678
- contents_.set_tree(rep);
596
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
597
+ contents_.EmplaceTree(rep, CordzUpdateTracker::kConstructorString);
679
598
  }
680
599
  }
681
600
 
@@ -684,113 +603,134 @@ template Cord::Cord(std::string&& src);
684
603
  // The destruction code is separate so that the compiler can determine
685
604
  // that it does not need to call the destructor on a moved-from Cord.
686
605
  void Cord::DestroyCordSlow() {
687
- Unref(VerifyTree(contents_.tree()));
606
+ assert(contents_.is_tree());
607
+ CordzInfo::MaybeUntrackCord(contents_.cordz_info());
608
+ CordRep::Unref(VerifyTree(contents_.as_tree()));
688
609
  }
689
610
 
690
611
  // --------------------------------------------------------------------
691
612
  // Mutators
692
613
 
693
614
  void Cord::Clear() {
694
- Unref(contents_.clear());
615
+ if (CordRep* tree = contents_.clear()) {
616
+ CordRep::Unref(tree);
617
+ }
695
618
  }
696
619
 
697
- Cord& Cord::operator=(absl::string_view src) {
620
+ Cord& Cord::AssignLargeString(std::string&& src) {
621
+ auto constexpr method = CordzUpdateTracker::kAssignString;
622
+ assert(src.size() > kMaxBytesToCopy);
623
+ CordRep* rep = CordRepFromString(std::move(src));
624
+ if (CordRep* tree = contents_.tree()) {
625
+ CordzUpdateScope scope(contents_.cordz_info(), method);
626
+ contents_.SetTree(rep, scope);
627
+ CordRep::Unref(tree);
628
+ } else {
629
+ contents_.EmplaceTree(rep, method);
630
+ }
631
+ return *this;
632
+ }
698
633
 
634
+ Cord& Cord::operator=(absl::string_view src) {
635
+ auto constexpr method = CordzUpdateTracker::kAssignString;
699
636
  const char* data = src.data();
700
637
  size_t length = src.size();
701
638
  CordRep* tree = contents_.tree();
702
639
  if (length <= InlineRep::kMaxInline) {
703
- // Embed into this->contents_
640
+ // Embed into this->contents_, which is somewhat subtle:
641
+ // - MaybeUntrackCord must be called before Unref(tree).
642
+ // - MaybeUntrackCord must be called before set_data() clobbers cordz_info.
643
+ // - set_data() must be called before Unref(tree) as it may reference tree.
644
+ if (tree != nullptr) CordzInfo::MaybeUntrackCord(contents_.cordz_info());
704
645
  contents_.set_data(data, length, true);
705
- Unref(tree);
706
- return *this;
707
- }
708
- if (tree != nullptr && tree->tag >= FLAT &&
709
- TagToLength(tree->tag) >= length && tree->refcount.IsOne()) {
710
- // Copy in place if the existing FLAT node is reusable.
711
- memmove(tree->data, data, length);
712
- tree->length = length;
713
- VerifyTree(tree);
646
+ if (tree != nullptr) CordRep::Unref(tree);
714
647
  return *this;
715
648
  }
716
- contents_.set_tree(NewTree(data, length, 0));
717
- Unref(tree);
718
- return *this;
719
- }
720
-
721
- template <typename T, Cord::EnableIfString<T>>
722
- Cord& Cord::operator=(T&& src) {
723
- if (src.size() <= kMaxBytesToCopy) {
724
- *this = absl::string_view(src);
649
+ if (tree != nullptr) {
650
+ CordzUpdateScope scope(contents_.cordz_info(), method);
651
+ if (tree->IsFlat() && tree->flat()->Capacity() >= length &&
652
+ tree->refcount.IsMutable()) {
653
+ // Copy in place if the existing FLAT node is reusable.
654
+ memmove(tree->flat()->Data(), data, length);
655
+ tree->length = length;
656
+ VerifyTree(tree);
657
+ return *this;
658
+ }
659
+ contents_.SetTree(NewTree(data, length, 0), scope);
660
+ CordRep::Unref(tree);
725
661
  } else {
726
- *this = Cord(std::forward<T>(src));
662
+ contents_.EmplaceTree(NewTree(data, length, 0), method);
727
663
  }
728
664
  return *this;
729
665
  }
730
666
 
731
- template Cord& Cord::operator=(std::string&& src);
732
-
733
667
  // TODO(sanjay): Move to Cord::InlineRep section of file. For now,
734
668
  // we keep it here to make diffs easier.
735
- void Cord::InlineRep::AppendArray(const char* src_data, size_t src_size) {
736
- if (src_size == 0) return; // memcpy(_, nullptr, 0) is undefined.
737
- // Try to fit in the inline buffer if possible.
738
- size_t inline_length = data_[kMaxInline];
739
- if (inline_length < kMaxInline && src_size <= kMaxInline - inline_length) {
740
- // Append new data to embedded array
741
- data_[kMaxInline] = static_cast<char>(inline_length + src_size);
742
- memcpy(data_ + inline_length, src_data, src_size);
743
- return;
744
- }
745
-
746
- CordRep* root = tree();
669
+ void Cord::InlineRep::AppendArray(absl::string_view src,
670
+ MethodIdentifier method) {
671
+ if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
747
672
 
748
673
  size_t appended = 0;
749
- if (root) {
674
+ CordRep* rep = tree();
675
+ const CordRep* const root = rep;
676
+ CordzUpdateScope scope(root ? cordz_info() : nullptr, method);
677
+ if (root != nullptr) {
750
678
  char* region;
751
- if (PrepareAppendRegion(root, &region, &appended, src_size)) {
752
- memcpy(region, src_data, appended);
679
+ if (PrepareAppendRegion(rep, &region, &appended, src.size())) {
680
+ memcpy(region, src.data(), appended);
753
681
  }
754
682
  } else {
755
- // It is possible that src_data == data_, but when we transition from an
756
- // InlineRep to a tree we need to assign data_ = root via set_tree. To
757
- // avoid corrupting the source data before we copy it, delay calling
758
- // set_tree until after we've copied data.
759
- // We are going from an inline size to beyond inline size. Make the new size
760
- // either double the inlined size, or the added size + 10%.
761
- const size_t size1 = inline_length * 2 + src_size;
762
- const size_t size2 = inline_length + src_size / 10;
763
- root = NewFlat(std::max<size_t>(size1, size2));
764
- appended = std::min(src_size, TagToLength(root->tag) - inline_length);
765
- memcpy(root->data, data_, inline_length);
766
- memcpy(root->data + inline_length, src_data, appended);
767
- root->length = inline_length + appended;
768
- set_tree(root);
769
- }
770
-
771
- src_data += appended;
772
- src_size -= appended;
773
- if (src_size == 0) {
683
+ // Try to fit in the inline buffer if possible.
684
+ size_t inline_length = inline_size();
685
+ if (src.size() <= kMaxInline - inline_length) {
686
+ // Append new data to embedded array
687
+ memcpy(data_.as_chars() + inline_length, src.data(), src.size());
688
+ set_inline_size(inline_length + src.size());
689
+ return;
690
+ }
691
+
692
+ // Allocate flat to be a perfect fit on first append exceeding inlined size.
693
+ // Subsequent growth will use amortized growth until we reach maximum flat
694
+ // size.
695
+ rep = CordRepFlat::New(inline_length + src.size());
696
+ appended = std::min(src.size(), rep->flat()->Capacity() - inline_length);
697
+ memcpy(rep->flat()->Data(), data_.as_chars(), inline_length);
698
+ memcpy(rep->flat()->Data() + inline_length, src.data(), appended);
699
+ rep->length = inline_length + appended;
700
+ }
701
+
702
+ src.remove_prefix(appended);
703
+ if (src.empty()) {
704
+ CommitTree(root, rep, scope, method);
774
705
  return;
775
706
  }
776
707
 
777
- // Use new block(s) for any remaining bytes that were not handled above.
778
- // Alloc extra memory only if the right child of the root of the new tree is
779
- // going to be a FLAT node, which will permit further inplace appends.
780
- size_t length = src_size;
781
- if (src_size < kMaxFlatLength) {
782
- // The new length is either
783
- // - old size + 10%
784
- // - old_size + src_size
785
- // This will cause a reasonable conservative step-up in size that is still
786
- // large enough to avoid excessive amounts of small fragments being added.
787
- length = std::max<size_t>(root->length / 10, src_size);
708
+ if (btree_enabled()) {
709
+ // TODO(b/192061034): keep legacy 10% growth rate: consider other rates.
710
+ rep = ForceBtree(rep);
711
+ const size_t min_growth = std::max<size_t>(rep->length / 10, src.size());
712
+ rep = CordRepBtree::Append(rep->btree(), src, min_growth - src.size());
713
+ } else {
714
+ // Use new block(s) for any remaining bytes that were not handled above.
715
+ // Alloc extra memory only if the right child of the root of the new tree
716
+ // is going to be a FLAT node, which will permit further inplace appends.
717
+ size_t length = src.size();
718
+ if (src.size() < kMaxFlatLength) {
719
+ // The new length is either
720
+ // - old size + 10%
721
+ // - old_size + src.size()
722
+ // This will cause a reasonable conservative step-up in size that is
723
+ // still large enough to avoid excessive amounts of small fragments
724
+ // being added.
725
+ length = std::max<size_t>(rep->length / 10, src.size());
726
+ }
727
+ rep = Concat(rep, NewTree(src.data(), src.size(), length - src.size()));
788
728
  }
789
- set_tree(Concat(root, NewTree(src_data, src_size, length - src_size)));
729
+ CommitTree(root, rep, scope, method);
790
730
  }
791
731
 
792
732
  inline CordRep* Cord::TakeRep() const& {
793
- return Ref(contents_.tree());
733
+ return CordRep::Ref(contents_.tree());
794
734
  }
795
735
 
796
736
  inline CordRep* Cord::TakeRep() && {
@@ -801,10 +741,17 @@ inline CordRep* Cord::TakeRep() && {
801
741
 
802
742
  template <typename C>
803
743
  inline void Cord::AppendImpl(C&& src) {
744
+ auto constexpr method = CordzUpdateTracker::kAppendCord;
804
745
  if (empty()) {
805
- // In case of an empty destination avoid allocating a new node, do not copy
806
- // data.
807
- *this = std::forward<C>(src);
746
+ // Since destination is empty, we can avoid allocating a node,
747
+ if (src.contents_.is_tree()) {
748
+ // by taking the tree directly
749
+ CordRep* rep = std::forward<C>(src).TakeRep();
750
+ contents_.EmplaceTree(rep, method);
751
+ } else {
752
+ // or copying over inline data
753
+ contents_.data_ = src.contents_.data_;
754
+ }
808
755
  return;
809
756
  }
810
757
 
@@ -814,12 +761,12 @@ inline void Cord::AppendImpl(C&& src) {
814
761
  CordRep* src_tree = src.contents_.tree();
815
762
  if (src_tree == nullptr) {
816
763
  // src has embedded data.
817
- contents_.AppendArray(src.contents_.data(), src_size);
764
+ contents_.AppendArray({src.contents_.data(), src_size}, method);
818
765
  return;
819
766
  }
820
- if (src_tree->tag >= FLAT) {
767
+ if (src_tree->IsFlat()) {
821
768
  // src tree just has one flat node.
822
- contents_.AppendArray(src_tree->data, src_size);
769
+ contents_.AppendArray({src_tree->flat()->Data(), src_size}, method);
823
770
  return;
824
771
  }
825
772
  if (&src == this) {
@@ -834,19 +781,26 @@ inline void Cord::AppendImpl(C&& src) {
834
781
  return;
835
782
  }
836
783
 
837
- contents_.AppendTree(std::forward<C>(src).TakeRep());
784
+ // Guaranteed to be a tree (kMaxBytesToCopy > kInlinedSize)
785
+ CordRep* rep = std::forward<C>(src).TakeRep();
786
+ contents_.AppendTree(rep, CordzUpdateTracker::kAppendCord);
838
787
  }
839
788
 
840
- void Cord::Append(const Cord& src) { AppendImpl(src); }
789
+ void Cord::Append(const Cord& src) {
790
+ AppendImpl(src);
791
+ }
841
792
 
842
- void Cord::Append(Cord&& src) { AppendImpl(std::move(src)); }
793
+ void Cord::Append(Cord&& src) {
794
+ AppendImpl(std::move(src));
795
+ }
843
796
 
844
797
  template <typename T, Cord::EnableIfString<T>>
845
798
  void Cord::Append(T&& src) {
846
799
  if (src.size() <= kMaxBytesToCopy) {
847
800
  Append(absl::string_view(src));
848
801
  } else {
849
- Append(Cord(std::forward<T>(src)));
802
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
803
+ contents_.AppendTree(rep, CordzUpdateTracker::kAppendString);
850
804
  }
851
805
  }
852
806
 
@@ -855,8 +809,8 @@ template void Cord::Append(std::string&& src);
855
809
  void Cord::Prepend(const Cord& src) {
856
810
  CordRep* src_tree = src.contents_.tree();
857
811
  if (src_tree != nullptr) {
858
- Ref(src_tree);
859
- contents_.PrependTree(src_tree);
812
+ CordRep::Ref(src_tree);
813
+ contents_.PrependTree(src_tree, CordzUpdateTracker::kPrependCord);
860
814
  return;
861
815
  }
862
816
 
@@ -865,20 +819,22 @@ void Cord::Prepend(const Cord& src) {
865
819
  return Prepend(src_contents);
866
820
  }
867
821
 
868
- void Cord::Prepend(absl::string_view src) {
822
+ void Cord::PrependArray(absl::string_view src, MethodIdentifier method) {
869
823
  if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
870
- size_t cur_size = contents_.size();
871
- if (!contents_.is_tree() && cur_size + src.size() <= InlineRep::kMaxInline) {
872
- // Use embedded storage.
873
- char data[InlineRep::kMaxInline + 1] = {0};
874
- data[InlineRep::kMaxInline] = cur_size + src.size(); // set size
875
- memcpy(data, src.data(), src.size());
876
- memcpy(data + src.size(), contents_.data(), cur_size);
877
- memcpy(reinterpret_cast<void*>(&contents_), data,
878
- InlineRep::kMaxInline + 1);
879
- } else {
880
- contents_.PrependTree(NewTree(src.data(), src.size(), 0));
824
+ if (!contents_.is_tree()) {
825
+ size_t cur_size = contents_.inline_size();
826
+ if (cur_size + src.size() <= InlineRep::kMaxInline) {
827
+ // Use embedded storage.
828
+ char data[InlineRep::kMaxInline + 1] = {0};
829
+ memcpy(data, src.data(), src.size());
830
+ memcpy(data + src.size(), contents_.data(), cur_size);
831
+ memcpy(contents_.data_.as_chars(), data, InlineRep::kMaxInline + 1);
832
+ contents_.set_inline_size(cur_size + src.size());
833
+ return;
834
+ }
881
835
  }
836
+ CordRep* rep = NewTree(src.data(), src.size(), 0);
837
+ contents_.PrependTree(rep, method);
882
838
  }
883
839
 
884
840
  template <typename T, Cord::EnableIfString<T>>
@@ -886,7 +842,8 @@ inline void Cord::Prepend(T&& src) {
886
842
  if (src.size() <= kMaxBytesToCopy) {
887
843
  Prepend(absl::string_view(src));
888
844
  } else {
889
- Prepend(Cord(std::forward<T>(src)));
845
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
846
+ contents_.PrependTree(rep, CordzUpdateTracker::kPrependString);
890
847
  }
891
848
  }
892
849
 
@@ -894,10 +851,10 @@ template void Cord::Prepend(std::string&& src);
894
851
 
895
852
  static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
896
853
  if (n >= node->length) return nullptr;
897
- if (n == 0) return Ref(node);
854
+ if (n == 0) return CordRep::Ref(node);
898
855
  absl::InlinedVector<CordRep*, kInlinedVectorSize> rhs_stack;
899
856
 
900
- while (node->tag == CONCAT) {
857
+ while (node->IsConcat()) {
901
858
  assert(n <= node->length);
902
859
  if (n < node->concat()->left->length) {
903
860
  // Push right to stack, descend left.
@@ -912,19 +869,19 @@ static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
912
869
  assert(n <= node->length);
913
870
 
914
871
  if (n == 0) {
915
- Ref(node);
872
+ CordRep::Ref(node);
916
873
  } else {
917
874
  size_t start = n;
918
875
  size_t len = node->length - n;
919
- if (node->tag == SUBSTRING) {
876
+ if (node->IsSubstring()) {
920
877
  // Consider in-place update of node, similar to in RemoveSuffixFrom().
921
878
  start += node->substring()->start;
922
879
  node = node->substring()->child;
923
880
  }
924
- node = NewSubstring(Ref(node), start, len);
881
+ node = NewSubstring(CordRep::Ref(node), start, len);
925
882
  }
926
883
  while (!rhs_stack.empty()) {
927
- node = Concat(node, Ref(rhs_stack.back()));
884
+ node = Concat(node, CordRep::Ref(rhs_stack.back()));
928
885
  rhs_stack.pop_back();
929
886
  }
930
887
  return node;
@@ -935,11 +892,11 @@ static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
935
892
  // edited in place iff that node and all its ancestors have a refcount of 1.
936
893
  static CordRep* RemoveSuffixFrom(CordRep* node, size_t n) {
937
894
  if (n >= node->length) return nullptr;
938
- if (n == 0) return Ref(node);
895
+ if (n == 0) return CordRep::Ref(node);
939
896
  absl::InlinedVector<CordRep*, kInlinedVectorSize> lhs_stack;
940
- bool inplace_ok = node->refcount.IsOne();
897
+ bool inplace_ok = node->refcount.IsMutable();
941
898
 
942
- while (node->tag == CONCAT) {
899
+ while (node->IsConcat()) {
943
900
  assert(n <= node->length);
944
901
  if (n < node->concat()->right->length) {
945
902
  // Push left to stack, descend right.
@@ -950,28 +907,28 @@ static CordRep* RemoveSuffixFrom(CordRep* node, size_t n) {
950
907
  n -= node->concat()->right->length;
951
908
  node = node->concat()->left;
952
909
  }
953
- inplace_ok = inplace_ok && node->refcount.IsOne();
910
+ inplace_ok = inplace_ok && node->refcount.IsMutable();
954
911
  }
955
912
  assert(n <= node->length);
956
913
 
957
914
  if (n == 0) {
958
- Ref(node);
959
- } else if (inplace_ok && node->tag != EXTERNAL) {
915
+ CordRep::Ref(node);
916
+ } else if (inplace_ok && !node->IsExternal()) {
960
917
  // Consider making a new buffer if the current node capacity is much
961
918
  // larger than the new length.
962
- Ref(node);
919
+ CordRep::Ref(node);
963
920
  node->length -= n;
964
921
  } else {
965
922
  size_t start = 0;
966
923
  size_t len = node->length - n;
967
- if (node->tag == SUBSTRING) {
924
+ if (node->IsSubstring()) {
968
925
  start = node->substring()->start;
969
926
  node = node->substring()->child;
970
927
  }
971
- node = NewSubstring(Ref(node), start, len);
928
+ node = NewSubstring(CordRep::Ref(node), start, len);
972
929
  }
973
930
  while (!lhs_stack.empty()) {
974
- node = Concat(Ref(lhs_stack.back()), node);
931
+ node = Concat(CordRep::Ref(lhs_stack.back()), node);
975
932
  lhs_stack.pop_back();
976
933
  }
977
934
  return node;
@@ -985,9 +942,18 @@ void Cord::RemovePrefix(size_t n) {
985
942
  if (tree == nullptr) {
986
943
  contents_.remove_prefix(n);
987
944
  } else {
988
- CordRep* newrep = RemovePrefixFrom(tree, n);
989
- Unref(tree);
990
- contents_.replace_tree(VerifyTree(newrep));
945
+ auto constexpr method = CordzUpdateTracker::kRemovePrefix;
946
+ CordzUpdateScope scope(contents_.cordz_info(), method);
947
+ if (tree->IsBtree()) {
948
+ CordRep* old = tree;
949
+ tree = tree->btree()->SubTree(n, tree->length - n);
950
+ CordRep::Unref(old);
951
+ } else {
952
+ CordRep* newrep = RemovePrefixFrom(tree, n);
953
+ CordRep::Unref(tree);
954
+ tree = VerifyTree(newrep);
955
+ }
956
+ contents_.SetTreeOrEmpty(tree, scope);
991
957
  }
992
958
  }
993
959
 
@@ -999,9 +965,16 @@ void Cord::RemoveSuffix(size_t n) {
999
965
  if (tree == nullptr) {
1000
966
  contents_.reduce_size(n);
1001
967
  } else {
1002
- CordRep* newrep = RemoveSuffixFrom(tree, n);
1003
- Unref(tree);
1004
- contents_.replace_tree(VerifyTree(newrep));
968
+ auto constexpr method = CordzUpdateTracker::kRemoveSuffix;
969
+ CordzUpdateScope scope(contents_.cordz_info(), method);
970
+ if (tree->IsBtree()) {
971
+ tree = CordRepBtree::RemoveSuffix(tree->btree(), n);
972
+ } else {
973
+ CordRep* newrep = RemoveSuffixFrom(tree, n);
974
+ CordRep::Unref(tree);
975
+ tree = VerifyTree(newrep);
976
+ }
977
+ contents_.SetTreeOrEmpty(tree, scope);
1005
978
  }
1006
979
  }
1007
980
 
@@ -1033,13 +1006,13 @@ static CordRep* NewSubRange(CordRep* node, size_t pos, size_t n) {
1033
1006
  results.pop_back();
1034
1007
  results.push_back(Concat(left, right));
1035
1008
  } else if (pos == 0 && n == node->length) {
1036
- results.push_back(Ref(node));
1037
- } else if (node->tag != CONCAT) {
1038
- if (node->tag == SUBSTRING) {
1009
+ results.push_back(CordRep::Ref(node));
1010
+ } else if (!node->IsConcat()) {
1011
+ if (node->IsSubstring()) {
1039
1012
  pos += node->substring()->start;
1040
1013
  node = node->substring()->child;
1041
1014
  }
1042
- results.push_back(NewSubstring(Ref(node), pos, n));
1015
+ results.push_back(NewSubstring(CordRep::Ref(node), pos, n));
1043
1016
  } else if (pos + n <= node->concat()->left->length) {
1044
1017
  todo.push_back(SubRange(node->concat()->left, pos, n));
1045
1018
  } else if (pos >= node->concat()->left->length) {
@@ -1061,17 +1034,20 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
1061
1034
  size_t length = size();
1062
1035
  if (pos > length) pos = length;
1063
1036
  if (new_size > length - pos) new_size = length - pos;
1037
+ if (new_size == 0) return sub_cord;
1038
+
1064
1039
  CordRep* tree = contents_.tree();
1065
1040
  if (tree == nullptr) {
1066
1041
  // sub_cord is newly constructed, no need to re-zero-out the tail of
1067
1042
  // contents_ memory.
1068
1043
  sub_cord.contents_.set_data(contents_.data() + pos, new_size, false);
1069
- } else if (new_size == 0) {
1070
- // We want to return empty subcord, so nothing to do.
1071
- } else if (new_size <= InlineRep::kMaxInline) {
1044
+ return sub_cord;
1045
+ }
1046
+
1047
+ if (new_size <= InlineRep::kMaxInline) {
1048
+ char* dest = sub_cord.contents_.data_.as_chars();
1072
1049
  Cord::ChunkIterator it = chunk_begin();
1073
1050
  it.AdvanceBytes(pos);
1074
- char* dest = sub_cord.contents_.data_;
1075
1051
  size_t remaining_size = new_size;
1076
1052
  while (remaining_size > it->size()) {
1077
1053
  cord_internal::SmallMemmove(dest, it->data(), it->size());
@@ -1080,10 +1056,17 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
1080
1056
  ++it;
1081
1057
  }
1082
1058
  cord_internal::SmallMemmove(dest, it->data(), remaining_size);
1083
- sub_cord.contents_.data_[InlineRep::kMaxInline] = new_size;
1059
+ sub_cord.contents_.set_inline_size(new_size);
1060
+ return sub_cord;
1061
+ }
1062
+
1063
+ if (tree->IsBtree()) {
1064
+ tree = tree->btree()->SubTree(pos, new_size);
1084
1065
  } else {
1085
- sub_cord.contents_.set_tree(NewSubRange(tree, pos, new_size));
1066
+ tree = NewSubRange(tree, pos, new_size);
1086
1067
  }
1068
+ sub_cord.contents_.EmplaceTree(tree, contents_.data_,
1069
+ CordzUpdateTracker::kSubCord);
1087
1070
  return sub_cord;
1088
1071
  }
1089
1072
 
@@ -1102,7 +1085,7 @@ class CordForest {
1102
1085
  CordRep* node = pending.back();
1103
1086
  pending.pop_back();
1104
1087
  CheckNode(node);
1105
- if (ABSL_PREDICT_FALSE(node->tag != CONCAT)) {
1088
+ if (ABSL_PREDICT_FALSE(!node->IsConcat())) {
1106
1089
  AddNode(node);
1107
1090
  continue;
1108
1091
  }
@@ -1117,9 +1100,9 @@ class CordForest {
1117
1100
  concat_node->left = concat_freelist_;
1118
1101
  concat_freelist_ = concat_node;
1119
1102
  } else {
1120
- Ref(concat_node->right);
1121
- Ref(concat_node->left);
1122
- Unref(concat_node);
1103
+ CordRep::Ref(concat_node->right);
1104
+ CordRep::Ref(concat_node->left);
1105
+ CordRep::Unref(concat_node);
1123
1106
  }
1124
1107
  } else {
1125
1108
  AddNode(node);
@@ -1196,7 +1179,7 @@ class CordForest {
1196
1179
 
1197
1180
  static void CheckNode(CordRep* node) {
1198
1181
  ABSL_INTERNAL_CHECK(node->length != 0u, "");
1199
- if (node->tag == CONCAT) {
1182
+ if (node->IsConcat()) {
1200
1183
  ABSL_INTERNAL_CHECK(node->concat()->left != nullptr, "");
1201
1184
  ABSL_INTERNAL_CHECK(node->concat()->right != nullptr, "");
1202
1185
  ABSL_INTERNAL_CHECK(node->length == (node->concat()->left->length +
@@ -1216,7 +1199,7 @@ class CordForest {
1216
1199
 
1217
1200
  static CordRep* Rebalance(CordRep* node) {
1218
1201
  VerifyTree(node);
1219
- assert(node->tag == CONCAT);
1202
+ assert(node->IsConcat());
1220
1203
 
1221
1204
  if (node->length == 0) {
1222
1205
  return nullptr;
@@ -1266,25 +1249,33 @@ bool ComputeCompareResult<bool>(int memcmp_res) {
1266
1249
 
1267
1250
  } // namespace
1268
1251
 
1269
- // Helper routine. Locates the first flat chunk of the Cord without
1270
- // initializing the iterator.
1252
+ // Helper routine. Locates the first flat or external chunk of the Cord without
1253
+ // initializing the iterator, and returns a string_view referencing the data.
1271
1254
  inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1272
- size_t n = data_[kMaxInline];
1273
- if (n <= kMaxInline) {
1274
- return absl::string_view(data_, n);
1255
+ if (!is_tree()) {
1256
+ return absl::string_view(data_.as_chars(), data_.inline_size());
1275
1257
  }
1276
1258
 
1277
1259
  CordRep* node = tree();
1278
- if (node->tag >= FLAT) {
1279
- return absl::string_view(node->data, node->length);
1260
+ if (node->IsFlat()) {
1261
+ return absl::string_view(node->flat()->Data(), node->length);
1280
1262
  }
1281
1263
 
1282
- if (node->tag == EXTERNAL) {
1264
+ if (node->IsExternal()) {
1283
1265
  return absl::string_view(node->external()->base, node->length);
1284
1266
  }
1285
1267
 
1268
+ if (node->IsBtree()) {
1269
+ CordRepBtree* tree = node->btree();
1270
+ int height = tree->height();
1271
+ while (--height >= 0) {
1272
+ tree = tree->Edge(CordRepBtree::kFront)->btree();
1273
+ }
1274
+ return tree->Data(tree->begin());
1275
+ }
1276
+
1286
1277
  // Walk down the left branches until we hit a non-CONCAT node.
1287
- while (node->tag == CONCAT) {
1278
+ while (node->IsConcat()) {
1288
1279
  node = node->concat()->left;
1289
1280
  }
1290
1281
 
@@ -1293,16 +1284,16 @@ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1293
1284
  size_t length = node->length;
1294
1285
  assert(length != 0);
1295
1286
 
1296
- if (node->tag == SUBSTRING) {
1287
+ if (node->IsSubstring()) {
1297
1288
  offset = node->substring()->start;
1298
1289
  node = node->substring()->child;
1299
1290
  }
1300
1291
 
1301
- if (node->tag >= FLAT) {
1302
- return absl::string_view(node->data + offset, length);
1292
+ if (node->IsFlat()) {
1293
+ return absl::string_view(node->flat()->Data() + offset, length);
1303
1294
  }
1304
1295
 
1305
- assert((node->tag == EXTERNAL) && "Expect FLAT or EXTERNAL node here");
1296
+ assert(node->IsExternal() && "Expect FLAT or EXTERNAL node here");
1306
1297
 
1307
1298
  return absl::string_view(node->external()->base + offset, length);
1308
1299
  }
@@ -1482,41 +1473,37 @@ void Cord::CopyToArraySlowPath(char* dst) const {
1482
1473
  }
1483
1474
  }
1484
1475
 
1485
- Cord::ChunkIterator& Cord::ChunkIterator::operator++() {
1486
- ABSL_HARDENING_ASSERT(bytes_remaining_ > 0 &&
1487
- "Attempted to iterate past `end()`");
1488
- assert(bytes_remaining_ >= current_chunk_.size());
1489
- bytes_remaining_ -= current_chunk_.size();
1490
-
1491
- if (stack_of_right_children_.empty()) {
1476
+ Cord::ChunkIterator& Cord::ChunkIterator::AdvanceStack() {
1477
+ auto& stack_of_right_children = stack_of_right_children_;
1478
+ if (stack_of_right_children.empty()) {
1492
1479
  assert(!current_chunk_.empty()); // Called on invalid iterator.
1493
1480
  // We have reached the end of the Cord.
1494
1481
  return *this;
1495
1482
  }
1496
1483
 
1497
1484
  // Process the next node on the stack.
1498
- CordRep* node = stack_of_right_children_.back();
1499
- stack_of_right_children_.pop_back();
1485
+ CordRep* node = stack_of_right_children.back();
1486
+ stack_of_right_children.pop_back();
1500
1487
 
1501
1488
  // Walk down the left branches until we hit a non-CONCAT node. Save the
1502
1489
  // right children to the stack for subsequent traversal.
1503
- while (node->tag == CONCAT) {
1504
- stack_of_right_children_.push_back(node->concat()->right);
1490
+ while (node->IsConcat()) {
1491
+ stack_of_right_children.push_back(node->concat()->right);
1505
1492
  node = node->concat()->left;
1506
1493
  }
1507
1494
 
1508
1495
  // Get the child node if we encounter a SUBSTRING.
1509
1496
  size_t offset = 0;
1510
1497
  size_t length = node->length;
1511
- if (node->tag == SUBSTRING) {
1498
+ if (node->IsSubstring()) {
1512
1499
  offset = node->substring()->start;
1513
1500
  node = node->substring()->child;
1514
1501
  }
1515
1502
 
1516
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1503
+ assert(node->IsExternal() || node->IsFlat());
1517
1504
  assert(length != 0);
1518
1505
  const char* data =
1519
- node->tag == EXTERNAL ? node->external()->base : node->data;
1506
+ node->IsExternal() ? node->external()->base : node->flat()->Data();
1520
1507
  current_chunk_ = absl::string_view(data + offset, length);
1521
1508
  current_leaf_ = node;
1522
1509
  return *this;
@@ -1526,6 +1513,7 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1526
1513
  ABSL_HARDENING_ASSERT(bytes_remaining_ >= n &&
1527
1514
  "Attempted to iterate past `end()`");
1528
1515
  Cord subcord;
1516
+ auto constexpr method = CordzUpdateTracker::kCordReader;
1529
1517
 
1530
1518
  if (n <= InlineRep::kMaxInline) {
1531
1519
  // Range to read fits in inline data. Flatten it.
@@ -1544,14 +1532,34 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1544
1532
  }
1545
1533
  return subcord;
1546
1534
  }
1535
+
1536
+ if (btree_reader_) {
1537
+ size_t chunk_size = current_chunk_.size();
1538
+ if (n <= chunk_size && n <= kMaxBytesToCopy) {
1539
+ subcord = Cord(current_chunk_.substr(0, n), method);
1540
+ if (n < chunk_size) {
1541
+ current_chunk_.remove_prefix(n);
1542
+ } else {
1543
+ current_chunk_ = btree_reader_.Next();
1544
+ }
1545
+ } else {
1546
+ CordRep* rep;
1547
+ current_chunk_ = btree_reader_.Read(n, chunk_size, rep);
1548
+ subcord.contents_.EmplaceTree(rep, method);
1549
+ }
1550
+ bytes_remaining_ -= n;
1551
+ return subcord;
1552
+ }
1553
+
1554
+ auto& stack_of_right_children = stack_of_right_children_;
1547
1555
  if (n < current_chunk_.size()) {
1548
1556
  // Range to read is a proper subrange of the current chunk.
1549
1557
  assert(current_leaf_ != nullptr);
1550
- CordRep* subnode = Ref(current_leaf_);
1551
- const char* data =
1552
- subnode->tag == EXTERNAL ? subnode->external()->base : subnode->data;
1558
+ CordRep* subnode = CordRep::Ref(current_leaf_);
1559
+ const char* data = subnode->IsExternal() ? subnode->external()->base
1560
+ : subnode->flat()->Data();
1553
1561
  subnode = NewSubstring(subnode, current_chunk_.data() - data, n);
1554
- subcord.contents_.set_tree(VerifyTree(subnode));
1562
+ subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1555
1563
  RemoveChunkPrefix(n);
1556
1564
  return subcord;
1557
1565
  }
@@ -1559,10 +1567,10 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1559
1567
  // Range to read begins with a proper subrange of the current chunk.
1560
1568
  assert(!current_chunk_.empty());
1561
1569
  assert(current_leaf_ != nullptr);
1562
- CordRep* subnode = Ref(current_leaf_);
1570
+ CordRep* subnode = CordRep::Ref(current_leaf_);
1563
1571
  if (current_chunk_.size() < subnode->length) {
1564
- const char* data =
1565
- subnode->tag == EXTERNAL ? subnode->external()->base : subnode->data;
1572
+ const char* data = subnode->IsExternal() ? subnode->external()->base
1573
+ : subnode->flat()->Data();
1566
1574
  subnode = NewSubstring(subnode, current_chunk_.data() - data,
1567
1575
  current_chunk_.size());
1568
1576
  }
@@ -1572,20 +1580,20 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1572
1580
  // Process the next node(s) on the stack, reading whole subtrees depending on
1573
1581
  // their length and how many bytes we are advancing.
1574
1582
  CordRep* node = nullptr;
1575
- while (!stack_of_right_children_.empty()) {
1576
- node = stack_of_right_children_.back();
1577
- stack_of_right_children_.pop_back();
1583
+ while (!stack_of_right_children.empty()) {
1584
+ node = stack_of_right_children.back();
1585
+ stack_of_right_children.pop_back();
1578
1586
  if (node->length > n) break;
1579
1587
  // TODO(qrczak): This might unnecessarily recreate existing concat nodes.
1580
1588
  // Avoiding that would need pretty complicated logic (instead of
1581
- // current_leaf_, keep current_subtree_ which points to the highest node
1589
+ // current_leaf, keep current_subtree_ which points to the highest node
1582
1590
  // such that the current leaf can be found on the path of left children
1583
1591
  // starting from current_subtree_; delay creating subnode while node is
1584
1592
  // below current_subtree_; find the proper node along the path of left
1585
1593
  // children starting from current_subtree_ if this loop exits while staying
1586
1594
  // below current_subtree_; etc.; alternatively, push parents instead of
1587
1595
  // right children on the stack).
1588
- subnode = Concat(subnode, Ref(node));
1596
+ subnode = Concat(subnode, CordRep::Ref(node));
1589
1597
  n -= node->length;
1590
1598
  bytes_remaining_ -= node->length;
1591
1599
  node = nullptr;
@@ -1594,20 +1602,20 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1594
1602
  if (node == nullptr) {
1595
1603
  // We have reached the end of the Cord.
1596
1604
  assert(bytes_remaining_ == 0);
1597
- subcord.contents_.set_tree(VerifyTree(subnode));
1605
+ subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1598
1606
  return subcord;
1599
1607
  }
1600
1608
 
1601
1609
  // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1602
1610
  // right children to the stack for subsequent traversal.
1603
- while (node->tag == CONCAT) {
1611
+ while (node->IsConcat()) {
1604
1612
  if (node->concat()->left->length > n) {
1605
1613
  // Push right, descend left.
1606
- stack_of_right_children_.push_back(node->concat()->right);
1614
+ stack_of_right_children.push_back(node->concat()->right);
1607
1615
  node = node->concat()->left;
1608
1616
  } else {
1609
1617
  // Read left, descend right.
1610
- subnode = Concat(subnode, Ref(node->concat()->left));
1618
+ subnode = Concat(subnode, CordRep::Ref(node->concat()->left));
1611
1619
  n -= node->concat()->left->length;
1612
1620
  bytes_remaining_ -= node->concat()->left->length;
1613
1621
  node = node->concat()->right;
@@ -1617,22 +1625,24 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1617
1625
  // Get the child node if we encounter a SUBSTRING.
1618
1626
  size_t offset = 0;
1619
1627
  size_t length = node->length;
1620
- if (node->tag == SUBSTRING) {
1628
+ if (node->IsSubstring()) {
1621
1629
  offset = node->substring()->start;
1622
1630
  node = node->substring()->child;
1623
1631
  }
1624
1632
 
1625
1633
  // Range to read ends with a proper (possibly empty) subrange of the current
1626
1634
  // chunk.
1627
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1635
+ assert(node->IsExternal() || node->IsFlat());
1628
1636
  assert(length > n);
1629
- if (n > 0) subnode = Concat(subnode, NewSubstring(Ref(node), offset, n));
1637
+ if (n > 0) {
1638
+ subnode = Concat(subnode, NewSubstring(CordRep::Ref(node), offset, n));
1639
+ }
1630
1640
  const char* data =
1631
- node->tag == EXTERNAL ? node->external()->base : node->data;
1641
+ node->IsExternal() ? node->external()->base : node->flat()->Data();
1632
1642
  current_chunk_ = absl::string_view(data + offset + n, length - n);
1633
1643
  current_leaf_ = node;
1634
1644
  bytes_remaining_ -= n;
1635
- subcord.contents_.set_tree(VerifyTree(subnode));
1645
+ subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1636
1646
  return subcord;
1637
1647
  }
1638
1648
 
@@ -1644,12 +1654,19 @@ void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1644
1654
  n -= current_chunk_.size();
1645
1655
  bytes_remaining_ -= current_chunk_.size();
1646
1656
 
1657
+ if (stack_of_right_children_.empty()) {
1658
+ // We have reached the end of the Cord.
1659
+ assert(bytes_remaining_ == 0);
1660
+ return;
1661
+ }
1662
+
1647
1663
  // Process the next node(s) on the stack, skipping whole subtrees depending on
1648
1664
  // their length and how many bytes we are advancing.
1649
1665
  CordRep* node = nullptr;
1650
- while (!stack_of_right_children_.empty()) {
1651
- node = stack_of_right_children_.back();
1652
- stack_of_right_children_.pop_back();
1666
+ auto& stack_of_right_children = stack_of_right_children_;
1667
+ while (!stack_of_right_children.empty()) {
1668
+ node = stack_of_right_children.back();
1669
+ stack_of_right_children.pop_back();
1653
1670
  if (node->length > n) break;
1654
1671
  n -= node->length;
1655
1672
  bytes_remaining_ -= node->length;
@@ -1664,10 +1681,10 @@ void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1664
1681
 
1665
1682
  // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1666
1683
  // right children to the stack for subsequent traversal.
1667
- while (node->tag == CONCAT) {
1684
+ while (node->IsConcat()) {
1668
1685
  if (node->concat()->left->length > n) {
1669
1686
  // Push right, descend left.
1670
- stack_of_right_children_.push_back(node->concat()->right);
1687
+ stack_of_right_children.push_back(node->concat()->right);
1671
1688
  node = node->concat()->left;
1672
1689
  } else {
1673
1690
  // Skip left, descend right.
@@ -1680,15 +1697,15 @@ void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1680
1697
  // Get the child node if we encounter a SUBSTRING.
1681
1698
  size_t offset = 0;
1682
1699
  size_t length = node->length;
1683
- if (node->tag == SUBSTRING) {
1700
+ if (node->IsSubstring()) {
1684
1701
  offset = node->substring()->start;
1685
1702
  node = node->substring()->child;
1686
1703
  }
1687
1704
 
1688
- assert(node->tag == EXTERNAL || node->tag >= FLAT);
1705
+ assert(node->IsExternal() || node->IsFlat());
1689
1706
  assert(length > n);
1690
1707
  const char* data =
1691
- node->tag == EXTERNAL ? node->external()->base : node->data;
1708
+ node->IsExternal() ? node->external()->base : node->flat()->Data();
1692
1709
  current_chunk_ = absl::string_view(data + offset + n, length - n);
1693
1710
  current_leaf_ = node;
1694
1711
  bytes_remaining_ -= n;
@@ -1704,13 +1721,15 @@ char Cord::operator[](size_t i) const {
1704
1721
  while (true) {
1705
1722
  assert(rep != nullptr);
1706
1723
  assert(offset < rep->length);
1707
- if (rep->tag >= FLAT) {
1724
+ if (rep->IsFlat()) {
1708
1725
  // Get the "i"th character directly from the flat array.
1709
- return rep->data[offset];
1710
- } else if (rep->tag == EXTERNAL) {
1726
+ return rep->flat()->Data()[offset];
1727
+ } else if (rep->IsBtree()) {
1728
+ return rep->btree()->GetCharacter(offset);
1729
+ } else if (rep->IsExternal()) {
1711
1730
  // Get the "i"th character from the external array.
1712
1731
  return rep->external()->base[offset];
1713
- } else if (rep->tag == CONCAT) {
1732
+ } else if (rep->IsConcat()) {
1714
1733
  // Recursively branch to the side of the concatenation that the "i"th
1715
1734
  // character is on.
1716
1735
  size_t left_length = rep->concat()->left->length;
@@ -1722,7 +1741,7 @@ char Cord::operator[](size_t i) const {
1722
1741
  }
1723
1742
  } else {
1724
1743
  // This must be a substring a node, so bypass it to get to the child.
1725
- assert(rep->tag == SUBSTRING);
1744
+ assert(rep->IsSubstring());
1726
1745
  offset += rep->substring()->start;
1727
1746
  rep = rep->substring()->child;
1728
1747
  }
@@ -1730,6 +1749,7 @@ char Cord::operator[](size_t i) const {
1730
1749
  }
1731
1750
 
1732
1751
  absl::string_view Cord::FlattenSlowPath() {
1752
+ assert(contents_.is_tree());
1733
1753
  size_t total_size = size();
1734
1754
  CordRep* new_rep;
1735
1755
  char* new_buffer;
@@ -1737,9 +1757,9 @@ absl::string_view Cord::FlattenSlowPath() {
1737
1757
  // Try to put the contents into a new flat rep. If they won't fit in the
1738
1758
  // biggest possible flat node, use an external rep instead.
1739
1759
  if (total_size <= kMaxFlatLength) {
1740
- new_rep = NewFlat(total_size);
1760
+ new_rep = CordRepFlat::New(total_size);
1741
1761
  new_rep->length = total_size;
1742
- new_buffer = new_rep->data;
1762
+ new_buffer = new_rep->flat()->Data();
1743
1763
  CopyToArraySlowPath(new_buffer);
1744
1764
  } else {
1745
1765
  new_buffer = std::allocator<char>().allocate(total_size);
@@ -1750,29 +1770,35 @@ absl::string_view Cord::FlattenSlowPath() {
1750
1770
  s.size());
1751
1771
  });
1752
1772
  }
1753
- Unref(contents_.tree());
1754
- contents_.set_tree(new_rep);
1773
+ CordzUpdateScope scope(contents_.cordz_info(), CordzUpdateTracker::kFlatten);
1774
+ CordRep::Unref(contents_.as_tree());
1775
+ contents_.SetTree(new_rep, scope);
1755
1776
  return absl::string_view(new_buffer, total_size);
1756
1777
  }
1757
1778
 
1758
1779
  /* static */ bool Cord::GetFlatAux(CordRep* rep, absl::string_view* fragment) {
1759
1780
  assert(rep != nullptr);
1760
- if (rep->tag >= FLAT) {
1761
- *fragment = absl::string_view(rep->data, rep->length);
1781
+ if (rep->IsFlat()) {
1782
+ *fragment = absl::string_view(rep->flat()->Data(), rep->length);
1762
1783
  return true;
1763
- } else if (rep->tag == EXTERNAL) {
1784
+ } else if (rep->IsExternal()) {
1764
1785
  *fragment = absl::string_view(rep->external()->base, rep->length);
1765
1786
  return true;
1766
- } else if (rep->tag == SUBSTRING) {
1787
+ } else if (rep->IsBtree()) {
1788
+ return rep->btree()->IsFlat(fragment);
1789
+ } else if (rep->IsSubstring()) {
1767
1790
  CordRep* child = rep->substring()->child;
1768
- if (child->tag >= FLAT) {
1769
- *fragment =
1770
- absl::string_view(child->data + rep->substring()->start, rep->length);
1791
+ if (child->IsFlat()) {
1792
+ *fragment = absl::string_view(
1793
+ child->flat()->Data() + rep->substring()->start, rep->length);
1771
1794
  return true;
1772
- } else if (child->tag == EXTERNAL) {
1795
+ } else if (child->IsExternal()) {
1773
1796
  *fragment = absl::string_view(
1774
1797
  child->external()->base + rep->substring()->start, rep->length);
1775
1798
  return true;
1799
+ } else if (child->IsBtree()) {
1800
+ return child->btree()->IsFlat(rep->substring()->start, rep->length,
1801
+ fragment);
1776
1802
  }
1777
1803
  }
1778
1804
  return false;
@@ -1781,6 +1807,15 @@ absl::string_view Cord::FlattenSlowPath() {
1781
1807
  /* static */ void Cord::ForEachChunkAux(
1782
1808
  absl::cord_internal::CordRep* rep,
1783
1809
  absl::FunctionRef<void(absl::string_view)> callback) {
1810
+ if (rep->IsBtree()) {
1811
+ ChunkIterator it(rep), end;
1812
+ while (it != end) {
1813
+ callback(*it);
1814
+ ++it;
1815
+ }
1816
+ return;
1817
+ }
1818
+
1784
1819
  assert(rep != nullptr);
1785
1820
  int stack_pos = 0;
1786
1821
  constexpr int stack_max = 128;
@@ -1788,7 +1823,7 @@ absl::string_view Cord::FlattenSlowPath() {
1788
1823
  absl::cord_internal::CordRep* stack[stack_max];
1789
1824
  absl::cord_internal::CordRep* current_node = rep;
1790
1825
  while (true) {
1791
- if (current_node->tag == CONCAT) {
1826
+ if (current_node->IsConcat()) {
1792
1827
  if (stack_pos == stack_max) {
1793
1828
  // There's no more room on our stack array to add another right branch,
1794
1829
  // and the idea is to avoid allocations, so call this function
@@ -1822,9 +1857,9 @@ absl::string_view Cord::FlattenSlowPath() {
1822
1857
  }
1823
1858
  }
1824
1859
 
1825
- static void DumpNode(CordRep* rep, bool include_data, std::ostream* os) {
1860
+ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
1861
+ int indent) {
1826
1862
  const int kIndentStep = 1;
1827
- int indent = 0;
1828
1863
  absl::InlinedVector<CordRep*, kInlinedVectorSize> stack;
1829
1864
  absl::InlinedVector<int, kInlinedVectorSize> indents;
1830
1865
  for (;;) {
@@ -1835,27 +1870,29 @@ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os) {
1835
1870
  *os << "]";
1836
1871
  *os << " " << (IsRootBalanced(rep) ? 'b' : 'u');
1837
1872
  *os << " " << std::setw(indent) << "";
1838
- if (rep->tag == CONCAT) {
1873
+ if (rep->IsConcat()) {
1839
1874
  *os << "CONCAT depth=" << Depth(rep) << "\n";
1840
1875
  indent += kIndentStep;
1841
1876
  indents.push_back(indent);
1842
1877
  stack.push_back(rep->concat()->right);
1843
1878
  rep = rep->concat()->left;
1844
- } else if (rep->tag == SUBSTRING) {
1879
+ } else if (rep->IsSubstring()) {
1845
1880
  *os << "SUBSTRING @ " << rep->substring()->start << "\n";
1846
1881
  indent += kIndentStep;
1847
1882
  rep = rep->substring()->child;
1848
- } else { // Leaf
1849
- if (rep->tag == EXTERNAL) {
1883
+ } else { // Leaf or ring
1884
+ if (rep->IsExternal()) {
1850
1885
  *os << "EXTERNAL [";
1851
1886
  if (include_data)
1852
1887
  *os << absl::CEscape(std::string(rep->external()->base, rep->length));
1853
1888
  *os << "]\n";
1854
- } else {
1855
- *os << "FLAT cap=" << TagToLength(rep->tag) << " [";
1889
+ } else if (rep->IsFlat()) {
1890
+ *os << "FLAT cap=" << rep->flat()->Capacity() << " [";
1856
1891
  if (include_data)
1857
- *os << absl::CEscape(std::string(rep->data, rep->length));
1892
+ *os << absl::CEscape(std::string(rep->flat()->Data(), rep->length));
1858
1893
  *os << "]\n";
1894
+ } else {
1895
+ CordRepBtree::Dump(rep, /*label=*/ "", include_data, *os);
1859
1896
  }
1860
1897
  if (stack.empty()) break;
1861
1898
  rep = stack.back();
@@ -1887,7 +1924,7 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1887
1924
  ABSL_INTERNAL_CHECK(node->length != 0, ReportError(root, node));
1888
1925
  }
1889
1926
 
1890
- if (node->tag == CONCAT) {
1927
+ if (node->IsConcat()) {
1891
1928
  ABSL_INTERNAL_CHECK(node->concat()->left != nullptr,
1892
1929
  ReportError(root, node));
1893
1930
  ABSL_INTERNAL_CHECK(node->concat()->right != nullptr,
@@ -1899,13 +1936,13 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1899
1936
  worklist.push_back(node->concat()->right);
1900
1937
  worklist.push_back(node->concat()->left);
1901
1938
  }
1902
- } else if (node->tag >= FLAT) {
1903
- ABSL_INTERNAL_CHECK(node->length <= TagToLength(node->tag),
1939
+ } else if (node->IsFlat()) {
1940
+ ABSL_INTERNAL_CHECK(node->length <= node->flat()->Capacity(),
1904
1941
  ReportError(root, node));
1905
- } else if (node->tag == EXTERNAL) {
1942
+ } else if (node->IsExternal()) {
1906
1943
  ABSL_INTERNAL_CHECK(node->external()->base != nullptr,
1907
1944
  ReportError(root, node));
1908
- } else if (node->tag == SUBSTRING) {
1945
+ } else if (node->IsSubstring()) {
1909
1946
  ABSL_INTERNAL_CHECK(
1910
1947
  node->substring()->start < node->substring()->child->length,
1911
1948
  ReportError(root, node));
@@ -1934,7 +1971,7 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1934
1971
  while (true) {
1935
1972
  const CordRep* next_node = nullptr;
1936
1973
 
1937
- if (cur_node->tag == CONCAT) {
1974
+ if (cur_node->IsConcat()) {
1938
1975
  total_mem_usage += sizeof(CordRepConcat);
1939
1976
  const CordRep* left = cur_node->concat()->left;
1940
1977
  if (!RepMemoryUsageLeaf(left, &total_mem_usage)) {
@@ -1948,9 +1985,21 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1948
1985
  }
1949
1986
  next_node = right;
1950
1987
  }
1988
+ } else if (cur_node->IsBtree()) {
1989
+ total_mem_usage += sizeof(CordRepBtree);
1990
+ const CordRepBtree* node = cur_node->btree();
1991
+ if (node->height() == 0) {
1992
+ for (const CordRep* edge : node->Edges()) {
1993
+ RepMemoryUsageDataEdge(edge, &total_mem_usage);
1994
+ }
1995
+ } else {
1996
+ for (const CordRep* edge : node->Edges()) {
1997
+ tree_stack.push_back(edge);
1998
+ }
1999
+ }
1951
2000
  } else {
1952
2001
  // Since cur_node is not a leaf or a concat node it must be a substring.
1953
- assert(cur_node->tag == SUBSTRING);
2002
+ assert(cur_node->IsSubstring());
1954
2003
  total_mem_usage += sizeof(CordRepSubstring);
1955
2004
  next_node = cur_node->substring()->child;
1956
2005
  if (RepMemoryUsageLeaf(next_node, &total_mem_usage)) {
@@ -1977,14 +2026,14 @@ std::ostream& operator<<(std::ostream& out, const Cord& cord) {
1977
2026
  }
1978
2027
 
1979
2028
  namespace strings_internal {
1980
- size_t CordTestAccess::FlatOverhead() { return kFlatOverhead; }
1981
- size_t CordTestAccess::MaxFlatLength() { return kMaxFlatLength; }
2029
+ size_t CordTestAccess::FlatOverhead() { return cord_internal::kFlatOverhead; }
2030
+ size_t CordTestAccess::MaxFlatLength() { return cord_internal::kMaxFlatLength; }
1982
2031
  size_t CordTestAccess::FlatTagToLength(uint8_t tag) {
1983
- return TagToLength(tag);
2032
+ return cord_internal::TagToLength(tag);
1984
2033
  }
1985
2034
  uint8_t CordTestAccess::LengthToTag(size_t s) {
1986
2035
  ABSL_INTERNAL_CHECK(s <= kMaxFlatLength, absl::StrCat("Invalid length ", s));
1987
- return AllocatedSizeToTag(s + kFlatOverhead);
2036
+ return cord_internal::AllocatedSizeToTag(s + cord_internal::kFlatOverhead);
1988
2037
  }
1989
2038
  size_t CordTestAccess::SizeofCordRepConcat() { return sizeof(CordRepConcat); }
1990
2039
  size_t CordTestAccess::SizeofCordRepExternal() {