grpc 1.45.0 → 1.53.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 (1842) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +437 -254
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +129 -39
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -16
  11. data/include/grpc/event_engine/port.h +1 -1
  12. data/include/grpc/event_engine/slice.h +306 -0
  13. data/include/grpc/event_engine/slice_buffer.h +159 -0
  14. data/include/grpc/fork.h +25 -1
  15. data/include/grpc/grpc.h +4 -14
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +11 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +5 -83
  25. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  28. data/include/grpc/impl/codegen/grpc_types.h +5 -797
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -699
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +4 -107
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +827 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +5 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  70. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  71. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +6 -4
  72. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  73. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  74. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  75. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  76. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  77. data/src/core/ext/filters/client_channel/client_channel.cc +557 -540
  78. data/src/core/ext/filters/client_channel/client_channel.h +70 -26
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  80. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  81. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  82. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  83. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  84. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  85. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  86. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  87. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  88. data/src/core/ext/filters/client_channel/connector.h +19 -10
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  92. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  93. data/src/core/ext/filters/client_channel/health/health_check_client.cc +137 -582
  94. data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
  95. data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
  96. data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
  97. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  99. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  100. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  102. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  118. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  119. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +478 -479
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -409
  121. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +618 -642
  123. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  124. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  128. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +280 -248
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +251 -187
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +212 -216
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +543 -584
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  138. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  140. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  141. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +579 -376
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  149. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  152. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +86 -224
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  154. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  155. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
  157. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
  158. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +413 -303
  160. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  161. data/src/core/ext/filters/client_channel/retry_filter.cc +184 -166
  162. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  163. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  164. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  165. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  166. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  167. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  168. data/src/core/ext/filters/client_channel/subchannel.cc +336 -388
  169. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  170. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  172. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  174. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  175. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  176. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +154 -372
  178. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
  179. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  180. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  181. data/src/core/ext/filters/http/client/http_client_filter.cc +119 -477
  182. data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
  183. data/src/core/ext/filters/http/client_authority_filter.cc +48 -58
  184. data/src/core/ext/filters/http/client_authority_filter.h +32 -28
  185. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -52
  186. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  187. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -385
  189. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  190. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  191. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  192. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  193. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  195. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  196. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +90 -202
  198. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  202. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  203. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  204. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +186 -241
  206. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +209 -215
  208. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  210. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +31 -30
  212. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +893 -1079
  214. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  215. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  216. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  218. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  219. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  220. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  221. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  222. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  223. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -77
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  234. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +169 -220
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +59 -61
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
  238. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +14 -5
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +114 -542
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -24
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +75 -67
  242. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +70 -48
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  244. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  245. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  246. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  248. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  249. data/src/core/ext/transport/chttp2/transport/internal.h +250 -298
  250. data/src/core/ext/transport/chttp2/transport/parsing.cc +365 -132
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  252. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  253. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  254. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  255. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  256. data/src/core/ext/transport/chttp2/transport/writing.cc +144 -106
  257. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  259. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  261. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +173 -73
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +39 -36
  263. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +210 -85
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +29 -344
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +189 -1489
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  269. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +38 -17
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +9 -7
  271. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +56 -13
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  273. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +24 -2
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  275. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +19 -6
  276. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +15 -2
  278. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  279. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +229 -82
  280. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  281. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +16 -4
  282. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  283. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  284. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  285. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +26 -4
  286. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  287. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +379 -140
  288. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +140 -126
  289. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +824 -301
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +114 -29
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +195 -191
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1042 -412
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +16 -4
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +171 -42
  298. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  299. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +517 -202
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +61 -36
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +333 -66
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +20 -6
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +93 -91
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +615 -213
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +417 -79
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +20 -8
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +16 -93
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +38 -17
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +447 -157
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +98 -66
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +545 -191
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +33 -13
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +108 -87
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +502 -149
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +9 -2
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +42 -17
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +24 -9
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +110 -18
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +64 -26
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +20 -6
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  333. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +118 -49
  334. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +39 -32
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +242 -87
  336. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +226 -105
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +13 -4
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +86 -53
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +475 -141
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +379 -160
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +16 -12
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +77 -16
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +9 -6
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +50 -8
  348. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  349. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +26 -6
  350. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  351. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +253 -102
  352. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  353. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +229 -92
  354. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +74 -55
  355. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +494 -160
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +38 -30
  357. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +232 -124
  358. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +458 -351
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2879 -947
  360. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +67 -22
  362. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +79 -54
  363. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +454 -133
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +5 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +21 -2
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +16 -4
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +38 -14
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +33 -14
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +89 -38
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +13 -4
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +58 -21
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +50 -16
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +9 -8
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +43 -10
  386. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  387. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +16 -8
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +101 -38
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +167 -71
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +16 -8
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +88 -16
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +14 -11
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +71 -17
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +184 -144
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1091 -361
  400. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +56 -48
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +327 -130
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +88 -31
  414. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +83 -56
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +472 -136
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +35 -13
  418. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  419. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  420. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +171 -54
  421. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +917 -134
  422. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  423. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +59 -25
  424. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -33
  425. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +205 -76
  426. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  427. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +23 -8
  428. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  429. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +62 -25
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +36 -8
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +55 -22
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +26 -11
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +30 -11
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +20 -8
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +58 -22
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +82 -29
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +49 -22
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +99 -36
  452. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  453. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +118 -44
  454. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  455. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +120 -40
  456. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  457. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +46 -16
  458. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  459. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +9 -2
  460. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  461. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +25 -8
  462. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  463. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +36 -6
  464. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  465. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  466. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  467. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  468. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
  469. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  470. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +23 -6
  471. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  472. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  473. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  474. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +477 -185
  475. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  476. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +512 -182
  477. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  478. data/src/core/ext/upb-generated/google/api/http.upb.h +134 -49
  479. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  480. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +25 -9
  481. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  482. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -2
  483. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +183 -181
  484. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1332 -488
  485. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  486. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +16 -6
  487. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  489. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  490. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +126 -46
  491. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  492. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +16 -6
  493. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  494. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +81 -18
  495. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  496. data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -9
  497. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  498. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +89 -30
  499. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  500. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +55 -14
  501. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  502. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +424 -169
  503. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  504. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +32 -8
  505. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  506. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +18 -4
  507. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  508. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +204 -76
  509. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  510. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +63 -22
  511. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  512. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  513. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  514. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +115 -16
  515. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  516. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +29 -4
  517. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  518. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  519. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  520. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +33 -8
  521. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  522. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +26 -4
  523. data/src/core/ext/upb-generated/validate/validate.upb.c +264 -253
  524. data/src/core/ext/upb-generated/validate/validate.upb.h +1974 -709
  525. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  526. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +115 -16
  527. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  528. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +29 -4
  529. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  530. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  531. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  532. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +94 -18
  533. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  534. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +26 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  536. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +9 -2
  537. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  538. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  539. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  540. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +50 -16
  541. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  542. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +33 -12
  543. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  544. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +16 -4
  545. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  546. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +27 -10
  547. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  548. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +83 -34
  549. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  550. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +22 -4
  551. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +14 -13
  552. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +84 -28
  553. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  554. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  557. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  558. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  559. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  560. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  561. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  562. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +309 -121
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +31 -12
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +82 -29
  571. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  572. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  573. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  574. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  575. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -4
  576. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +16 -4
  577. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  578. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  579. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  580. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  581. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  582. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  583. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  584. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  585. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  586. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +149 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  588. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  592. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  593. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  595. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  596. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +168 -154
  597. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  599. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  600. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  602. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  603. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  604. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  606. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  607. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  608. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  609. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -68
  611. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  612. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -747
  613. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  615. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +483 -445
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +211 -193
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  632. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  633. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  635. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  636. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  637. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  638. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  639. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  640. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  641. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  642. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  643. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  644. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  645. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  646. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  647. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  648. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  649. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  650. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  651. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  652. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  653. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  655. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  656. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  657. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  658. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  659. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  660. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  661. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  662. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  663. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  664. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  665. data/src/core/ext/xds/certificate_provider_store.h +30 -4
  666. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  667. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  668. data/src/core/ext/xds/upb_utils.h +3 -25
  669. data/src/core/ext/xds/xds_api.cc +106 -192
  670. data/src/core/ext/xds/xds_api.h +41 -39
  671. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  672. data/src/core/ext/xds/xds_bootstrap.h +42 -95
  673. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  674. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  675. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  676. data/src/core/ext/xds/xds_certificate_provider.h +36 -4
  677. data/src/core/ext/xds/xds_channel_args.h +3 -3
  678. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  679. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  680. data/src/core/ext/xds/xds_client.cc +885 -1360
  681. data/src/core/ext/xds/xds_client.h +69 -65
  682. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  683. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  684. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  685. data/src/core/ext/xds/xds_client_stats.h +26 -24
  686. data/src/core/ext/xds/xds_cluster.cc +505 -247
  687. data/src/core/ext/xds/xds_cluster.h +69 -40
  688. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
  689. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
  690. data/src/core/ext/xds/xds_common_types.cc +238 -123
  691. data/src/core/ext/xds/xds_common_types.h +29 -16
  692. data/src/core/ext/xds/xds_endpoint.cc +266 -156
  693. data/src/core/ext/xds/xds_endpoint.h +19 -15
  694. data/src/core/ext/xds/xds_health_status.cc +80 -0
  695. data/src/core/ext/xds/xds_health_status.h +109 -0
  696. data/src/core/ext/xds/xds_http_fault_filter.cc +68 -59
  697. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  698. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  699. data/src/core/ext/xds/xds_http_filters.h +73 -25
  700. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  701. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  702. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  703. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  704. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  705. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  706. data/src/core/ext/xds/xds_listener.cc +573 -481
  707. data/src/core/ext/xds/xds_listener.h +57 -51
  708. data/src/core/ext/xds/xds_resource_type.h +28 -22
  709. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  710. data/src/core/ext/xds/xds_route_config.cc +638 -479
  711. data/src/core/ext/xds/xds_route_config.h +79 -42
  712. data/src/core/ext/xds/xds_routing.cc +21 -7
  713. data/src/core/ext/xds/xds_routing.h +17 -12
  714. data/src/core/ext/xds/xds_server_config_fetcher.cc +244 -200
  715. data/src/core/ext/xds/xds_transport.h +86 -0
  716. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  717. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  718. data/src/core/lib/address_utils/parse_address.cc +52 -52
  719. data/src/core/lib/address_utils/parse_address.h +46 -42
  720. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  721. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  722. data/src/core/lib/avl/avl.h +100 -13
  723. data/src/core/lib/backoff/backoff.cc +19 -21
  724. data/src/core/lib/backoff/backoff.h +21 -21
  725. data/src/core/lib/channel/call_finalization.h +6 -4
  726. data/src/core/lib/channel/call_tracer.h +27 -9
  727. data/src/core/lib/channel/channel_args.cc +268 -101
  728. data/src/core/lib/channel/channel_args.h +461 -56
  729. data/src/core/lib/channel/channel_args_preconditioning.cc +6 -11
  730. data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
  731. data/src/core/lib/channel/channel_fwd.h +26 -0
  732. data/src/core/lib/channel/channel_stack.cc +92 -52
  733. data/src/core/lib/channel/channel_stack.h +186 -140
  734. data/src/core/lib/channel/channel_stack_builder.cc +26 -104
  735. data/src/core/lib/channel/channel_stack_builder.h +45 -31
  736. data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
  737. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  738. data/src/core/lib/channel/channel_trace.cc +29 -36
  739. data/src/core/lib/channel/channel_trace.h +27 -24
  740. data/src/core/lib/channel/channelz.cc +50 -65
  741. data/src/core/lib/channel/channelz.h +50 -33
  742. data/src/core/lib/channel/channelz_registry.cc +28 -36
  743. data/src/core/lib/channel/channelz_registry.h +31 -30
  744. data/src/core/lib/channel/connected_channel.cc +1267 -78
  745. data/src/core/lib/channel/connected_channel.h +22 -23
  746. data/src/core/lib/channel/context.h +25 -21
  747. data/src/core/lib/channel/promise_based_filter.cc +2155 -303
  748. data/src/core/lib/channel/promise_based_filter.h +636 -122
  749. data/src/core/lib/channel/status_util.cc +64 -17
  750. data/src/core/lib/channel/status_util.h +38 -24
  751. data/src/core/lib/compression/compression.cc +24 -19
  752. data/src/core/lib/compression/compression_internal.cc +89 -70
  753. data/src/core/lib/compression/compression_internal.h +28 -27
  754. data/src/core/lib/compression/message_compress.cc +28 -26
  755. data/src/core/lib/compression/message_compress.h +28 -29
  756. data/src/core/lib/config/core_configuration.cc +8 -1
  757. data/src/core/lib/config/core_configuration.h +86 -39
  758. data/src/core/lib/debug/event_log.cc +88 -0
  759. data/src/core/lib/debug/event_log.h +81 -0
  760. data/src/core/lib/debug/histogram_view.cc +69 -0
  761. data/src/core/lib/debug/histogram_view.h +37 -0
  762. data/src/core/lib/debug/stats.cc +48 -152
  763. data/src/core/lib/debug/stats.h +50 -57
  764. data/src/core/lib/debug/stats_data.cc +302 -649
  765. data/src/core/lib/debug/stats_data.h +293 -548
  766. data/src/core/lib/debug/trace.cc +18 -20
  767. data/src/core/lib/debug/trace.h +27 -48
  768. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  769. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  770. data/src/core/lib/event_engine/common_closures.h +71 -0
  771. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  772. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  773. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  774. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  775. data/src/core/lib/event_engine/event_engine.cc +3 -30
  776. data/src/core/lib/event_engine/executor/executor.h +38 -0
  777. data/src/core/lib/event_engine/forkable.cc +106 -0
  778. data/src/core/lib/event_engine/forkable.h +61 -0
  779. data/src/core/lib/event_engine/handle_containers.h +74 -0
  780. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  781. data/src/core/lib/event_engine/poller.h +62 -0
  782. data/src/core/lib/event_engine/posix.h +158 -0
  783. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  784. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  785. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  786. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  787. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  788. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  789. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  790. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  791. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  792. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  793. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  794. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  795. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  796. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  797. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  798. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  799. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  800. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  801. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  802. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  803. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  804. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  805. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  806. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  807. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  808. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  809. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  810. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  811. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  812. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  813. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  814. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  815. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  816. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  817. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  818. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  819. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  820. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  821. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  822. data/src/core/lib/event_engine/shim.cc +56 -0
  823. data/src/core/lib/event_engine/shim.h +33 -0
  824. data/src/core/lib/event_engine/slice.cc +103 -0
  825. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  826. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  827. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  828. data/src/core/lib/event_engine/thread_local.cc +29 -0
  829. data/src/core/lib/event_engine/thread_local.h +32 -0
  830. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  831. data/src/core/lib/event_engine/thread_pool.h +141 -0
  832. data/src/core/lib/event_engine/time_util.cc +30 -0
  833. data/src/core/lib/event_engine/time_util.h +32 -0
  834. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/event_engine/trace.cc} +9 -13
  835. data/src/core/lib/event_engine/trace.h +43 -0
  836. data/src/core/lib/event_engine/utils.cc +44 -0
  837. data/src/core/lib/event_engine/utils.h +44 -0
  838. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  839. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  840. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  841. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  842. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  843. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  844. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  845. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  846. data/src/core/lib/experiments/config.cc +161 -0
  847. data/src/core/lib/experiments/config.h +53 -0
  848. data/src/core/lib/experiments/experiments.cc +81 -0
  849. data/src/core/lib/experiments/experiments.h +117 -0
  850. data/src/core/lib/gpr/alloc.cc +19 -25
  851. data/src/core/lib/gpr/alloc.h +20 -20
  852. data/src/core/lib/gpr/atm.cc +17 -17
  853. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  854. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  855. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  856. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  857. data/src/core/lib/gpr/log.cc +30 -17
  858. data/src/core/lib/gpr/log_android.cc +22 -20
  859. data/src/core/lib/gpr/log_linux.cc +24 -24
  860. data/src/core/lib/gpr/log_posix.cc +20 -19
  861. data/src/core/lib/gpr/log_windows.cc +25 -25
  862. data/src/core/lib/gpr/spinlock.h +20 -20
  863. data/src/core/lib/gpr/string.cc +25 -24
  864. data/src/core/lib/gpr/string.h +61 -61
  865. data/src/core/lib/gpr/string_posix.cc +24 -24
  866. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  867. data/src/core/lib/gpr/string_windows.cc +24 -24
  868. data/src/core/lib/gpr/sync.cc +25 -25
  869. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  870. data/src/core/lib/gpr/sync_posix.cc +22 -34
  871. data/src/core/lib/gpr/sync_windows.cc +29 -27
  872. data/src/core/lib/gpr/time.cc +34 -30
  873. data/src/core/lib/gpr/time_posix.cc +41 -45
  874. data/src/core/lib/gpr/time_precise.cc +22 -22
  875. data/src/core/lib/gpr/time_precise.h +21 -22
  876. data/src/core/lib/gpr/time_windows.cc +35 -29
  877. data/src/core/lib/gpr/tmpfile.h +24 -24
  878. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  879. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  880. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  881. data/src/core/lib/gpr/useful.h +83 -30
  882. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  883. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  884. data/src/core/lib/gprpp/bitset.h +47 -17
  885. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  886. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  887. data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
  888. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  889. data/src/core/lib/gprpp/crash.h +34 -0
  890. data/src/core/lib/gprpp/debug_location.h +60 -31
  891. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  892. data/src/core/lib/gprpp/env.h +53 -0
  893. data/src/core/lib/gprpp/env_linux.cc +80 -0
  894. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
  895. data/src/core/lib/gprpp/env_windows.cc +56 -0
  896. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  897. data/src/core/lib/gprpp/examine_stack.h +21 -22
  898. data/src/core/lib/gprpp/fork.cc +58 -53
  899. data/src/core/lib/gprpp/fork.h +29 -35
  900. data/src/core/lib/gprpp/global_config.h +22 -24
  901. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  902. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  903. data/src/core/lib/gprpp/global_config_env.h +29 -27
  904. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  905. data/src/core/lib/gprpp/host_port.cc +30 -26
  906. data/src/core/lib/gprpp/host_port.h +32 -31
  907. data/src/core/lib/gprpp/load_file.cc +75 -0
  908. data/src/core/lib/gprpp/load_file.h +33 -0
  909. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  910. data/src/core/lib/gprpp/match.h +75 -0
  911. data/src/core/lib/gprpp/memory.h +22 -26
  912. data/src/core/lib/gprpp/mpscq.cc +17 -17
  913. data/src/core/lib/gprpp/mpscq.h +21 -21
  914. data/src/core/lib/gprpp/no_destruct.h +95 -0
  915. data/src/core/lib/gprpp/notification.h +67 -0
  916. data/src/core/lib/gprpp/orphanable.h +22 -25
  917. data/src/core/lib/gprpp/overload.h +59 -0
  918. data/src/core/lib/gprpp/packed_table.h +40 -0
  919. data/src/core/lib/gprpp/per_cpu.h +46 -0
  920. data/src/core/lib/gprpp/ref_counted.h +24 -24
  921. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  922. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  923. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  924. data/src/core/lib/gprpp/stat.h +3 -5
  925. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  926. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  927. data/src/core/lib/gprpp/status_helper.cc +56 -20
  928. data/src/core/lib/gprpp/status_helper.h +13 -5
  929. data/src/core/lib/gprpp/strerror.cc +43 -0
  930. data/src/core/lib/gprpp/strerror.h +29 -0
  931. data/src/core/lib/gprpp/sync.h +26 -24
  932. data/src/core/lib/gprpp/table.h +22 -4
  933. data/src/core/lib/gprpp/tchar.cc +49 -0
  934. data/src/core/lib/gprpp/tchar.h +33 -0
  935. data/src/core/lib/gprpp/thd.h +25 -28
  936. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  937. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  938. data/src/core/lib/gprpp/time.cc +64 -9
  939. data/src/core/lib/gprpp/time.h +79 -5
  940. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  941. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  942. data/src/core/lib/gprpp/time_util.cc +4 -0
  943. data/src/core/lib/gprpp/time_util.h +3 -3
  944. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  945. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  946. data/src/core/lib/gprpp/validation_errors.h +127 -0
  947. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  948. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  949. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  950. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  951. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  952. data/src/core/lib/http/format_request.cc +54 -24
  953. data/src/core/lib/http/format_request.h +23 -21
  954. data/src/core/lib/http/httpcli.cc +139 -141
  955. data/src/core/lib/http/httpcli.h +86 -38
  956. data/src/core/lib/http/httpcli_security_connector.cc +53 -45
  957. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  958. data/src/core/lib/http/parser.cc +144 -85
  959. data/src/core/lib/http/parser.h +51 -35
  960. data/src/core/lib/iomgr/block_annotate.h +23 -23
  961. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  962. data/src/core/lib/iomgr/buffer_list.h +123 -101
  963. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  964. data/src/core/lib/iomgr/call_combiner.h +24 -25
  965. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  966. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  967. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  968. data/src/core/lib/iomgr/closure.h +95 -58
  969. data/src/core/lib/iomgr/combiner.cc +20 -39
  970. data/src/core/lib/iomgr/combiner.h +20 -20
  971. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  972. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  973. data/src/core/lib/iomgr/endpoint.cc +21 -21
  974. data/src/core/lib/iomgr/endpoint.h +53 -51
  975. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  976. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  977. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  978. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
  979. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  980. data/src/core/lib/iomgr/error.cc +51 -834
  981. data/src/core/lib/iomgr/error.h +45 -317
  982. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  983. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  984. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  985. data/src/core/lib/iomgr/ev_apple.h +21 -21
  986. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  987. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  988. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  989. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  990. data/src/core/lib/iomgr/ev_posix.cc +88 -122
  991. data/src/core/lib/iomgr/ev_posix.h +93 -87
  992. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  993. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  994. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  995. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  996. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  997. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  998. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  999. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  1000. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  1001. data/src/core/lib/iomgr/executor.cc +21 -31
  1002. data/src/core/lib/iomgr/executor.h +27 -30
  1003. data/src/core/lib/iomgr/fork_posix.cc +31 -28
  1004. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1005. data/src/core/lib/iomgr/gethostname.h +20 -20
  1006. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1007. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1008. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1009. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1010. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1011. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1012. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  1013. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  1014. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  1015. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  1016. data/src/core/lib/iomgr/iomgr.cc +25 -20
  1017. data/src/core/lib/iomgr/iomgr.h +35 -35
  1018. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1019. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1020. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1021. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  1022. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  1023. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1024. data/src/core/lib/iomgr/load_file.cc +24 -27
  1025. data/src/core/lib/iomgr/load_file.h +22 -22
  1026. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1027. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1028. data/src/core/lib/iomgr/nameser.h +86 -86
  1029. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1030. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1031. data/src/core/lib/iomgr/pollset.cc +17 -17
  1032. data/src/core/lib/iomgr/pollset.h +55 -55
  1033. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1034. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1035. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1036. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1037. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1038. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1039. data/src/core/lib/iomgr/port.h +59 -39
  1040. data/src/core/lib/iomgr/python_util.h +24 -24
  1041. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1042. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1043. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1044. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1045. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1046. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1047. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1048. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1049. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1050. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1051. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1052. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1053. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1054. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1055. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1056. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1057. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1058. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1059. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1060. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1061. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1062. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1063. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1064. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1065. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1066. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1067. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1068. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1069. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1070. data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
  1071. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1072. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1073. data/src/core/lib/iomgr/tcp_posix.cc +562 -361
  1074. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1075. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1076. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1077. data/src/core/lib/iomgr/tcp_server_posix.cc +402 -145
  1078. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1079. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1080. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1081. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1082. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1083. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1084. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1085. data/src/core/lib/iomgr/timer.cc +17 -17
  1086. data/src/core/lib/iomgr/timer.h +68 -68
  1087. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1088. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1089. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1090. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1091. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1092. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1093. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1094. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1095. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1096. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1097. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1098. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1099. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1100. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1101. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1102. data/src/core/lib/json/json.h +23 -27
  1103. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1104. data/src/core/lib/json/json_channel_args.h +42 -0
  1105. data/src/core/lib/json/json_object_loader.cc +217 -0
  1106. data/src/core/lib/json/json_object_loader.h +634 -0
  1107. data/src/core/lib/json/json_reader.cc +123 -90
  1108. data/src/core/lib/json/json_util.cc +14 -34
  1109. data/src/core/lib/json/json_util.h +19 -10
  1110. data/src/core/lib/json/json_writer.cc +62 -57
  1111. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1112. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1113. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1114. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1115. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1116. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1117. data/src/core/lib/matchers/matchers.cc +12 -7
  1118. data/src/core/lib/matchers/matchers.h +5 -3
  1119. data/src/core/lib/promise/activity.cc +23 -8
  1120. data/src/core/lib/promise/activity.h +116 -58
  1121. data/src/core/lib/promise/arena_promise.h +115 -72
  1122. data/src/core/lib/promise/context.h +18 -11
  1123. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1124. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1125. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1126. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1127. data/src/core/lib/promise/detail/status.h +33 -4
  1128. data/src/core/lib/promise/detail/switch.h +21 -21
  1129. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1130. data/src/core/lib/promise/if.h +195 -0
  1131. data/src/core/lib/promise/interceptor_list.h +308 -0
  1132. data/src/core/lib/promise/intra_activity_waiter.h +55 -0
  1133. data/src/core/lib/promise/latch.h +191 -0
  1134. data/src/core/lib/promise/loop.h +13 -9
  1135. data/src/core/lib/promise/map.h +4 -6
  1136. data/src/core/lib/promise/pipe.h +608 -0
  1137. data/src/core/lib/promise/poll.h +129 -11
  1138. data/src/core/lib/promise/promise.h +5 -5
  1139. data/src/core/lib/promise/race.h +6 -10
  1140. data/src/core/lib/promise/seq.h +32 -14
  1141. data/src/core/lib/promise/sleep.cc +58 -42
  1142. data/src/core/lib/promise/sleep.h +44 -26
  1143. data/src/core/lib/promise/trace.cc +20 -0
  1144. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/promise/trace.h} +6 -8
  1145. data/src/core/lib/promise/try_join.h +82 -0
  1146. data/src/core/lib/promise/try_seq.h +41 -23
  1147. data/src/core/lib/resolver/resolver.cc +17 -59
  1148. data/src/core/lib/resolver/resolver.h +21 -18
  1149. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1150. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1151. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1152. data/src/core/lib/resolver/server_address.cc +46 -34
  1153. data/src/core/lib/resolver/server_address.h +36 -35
  1154. data/src/core/lib/resource_quota/api.cc +25 -29
  1155. data/src/core/lib/resource_quota/api.h +14 -5
  1156. data/src/core/lib/resource_quota/arena.cc +85 -27
  1157. data/src/core/lib/resource_quota/arena.h +197 -25
  1158. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1159. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1160. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1161. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1162. data/src/core/lib/resource_quota/resource_quota.h +20 -4
  1163. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1164. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1165. data/src/core/lib/resource_quota/trace.h +3 -3
  1166. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1167. data/src/core/lib/security/authorization/authorization_policy_provider.h +17 -3
  1168. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1169. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1170. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1171. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1172. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1173. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +26 -13
  1174. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +20 -10
  1175. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1176. data/src/core/lib/security/authorization/matchers.h +10 -3
  1177. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1178. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1179. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1180. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1181. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1182. data/src/core/lib/security/context/security_context.cc +27 -25
  1183. data/src/core/lib/security/context/security_context.h +64 -35
  1184. data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
  1185. data/src/core/lib/security/credentials/alts/alts_credentials.h +65 -57
  1186. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1187. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1188. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1189. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1190. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1191. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1192. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1193. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1194. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1195. data/src/core/lib/security/credentials/call_creds_util.cc +13 -3
  1196. data/src/core/lib/security/credentials/call_creds_util.h +6 -5
  1197. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1198. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1199. data/src/core/lib/security/credentials/composite/composite_credentials.cc +46 -41
  1200. data/src/core/lib/security/credentials/composite/composite_credentials.h +51 -38
  1201. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1202. data/src/core/lib/security/credentials/credentials.h +91 -94
  1203. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1204. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1205. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1206. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1207. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1208. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1209. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1210. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1212. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1213. data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -48
  1214. data/src/core/lib/security/credentials/fake/fake_credentials.h +57 -47
  1215. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1216. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +148 -112
  1217. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +35 -29
  1218. data/src/core/lib/security/credentials/iam/iam_credentials.cc +35 -24
  1219. data/src/core/lib/security/credentials/iam/iam_credentials.h +37 -23
  1220. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +32 -29
  1221. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1222. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1223. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1224. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +37 -30
  1225. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -23
  1226. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1227. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1228. data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
  1229. data/src/core/lib/security/credentials/local/local_credentials.h +36 -26
  1230. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +107 -91
  1231. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +56 -27
  1232. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +42 -36
  1233. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +55 -29
  1234. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +48 -44
  1235. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +43 -23
  1236. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1237. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -9
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +69 -98
  1244. data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
  1245. data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -30
  1246. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1247. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1248. data/src/core/lib/security/credentials/xds/xds_credentials.cc +77 -81
  1249. data/src/core/lib/security/credentials/xds/xds_credentials.h +50 -10
  1250. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1251. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1252. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1253. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1254. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1255. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1256. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1257. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1258. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1260. data/src/core/lib/security/security_connector/local/local_security_connector.cc +66 -49
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1262. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1263. data/src/core/lib/security/security_connector/security_connector.h +67 -45
  1264. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +59 -48
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1266. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1267. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1268. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -58
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1272. data/src/core/lib/security/transport/auth_filters.h +59 -30
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +73 -48
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
  1275. data/src/core/lib/security/transport/secure_endpoint.h +29 -28
  1276. data/src/core/lib/security/transport/security_handshaker.cc +142 -110
  1277. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1279. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1280. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1281. data/src/core/lib/security/util/json_util.cc +24 -24
  1282. data/src/core/lib/security/util/json_util.h +21 -23
  1283. data/src/core/lib/service_config/service_config.h +19 -12
  1284. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1285. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1286. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1287. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1288. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1289. data/src/core/lib/slice/b64.cc +26 -26
  1290. data/src/core/lib/slice/b64.h +34 -32
  1291. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1292. data/src/core/lib/slice/percent_encoding.h +28 -34
  1293. data/src/core/lib/slice/slice.cc +59 -46
  1294. data/src/core/lib/slice/slice.h +64 -20
  1295. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1296. data/src/core/lib/slice/slice_buffer.h +168 -0
  1297. data/src/core/lib/slice/slice_internal.h +38 -45
  1298. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1299. data/src/core/lib/slice/slice_refcount.h +53 -19
  1300. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1301. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1302. data/src/core/lib/surface/api_trace.cc +17 -17
  1303. data/src/core/lib/surface/api_trace.h +25 -25
  1304. data/src/core/lib/surface/builtins.cc +7 -2
  1305. data/src/core/lib/surface/builtins.h +3 -3
  1306. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1307. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1308. data/src/core/lib/surface/call.cc +3000 -1131
  1309. data/src/core/lib/surface/call.h +135 -56
  1310. data/src/core/lib/surface/call_details.cc +22 -23
  1311. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1312. data/src/core/lib/surface/call_test_only.h +34 -31
  1313. data/src/core/lib/surface/call_trace.cc +123 -0
  1314. data/src/core/lib/surface/call_trace.h +30 -0
  1315. data/src/core/lib/surface/channel.cc +218 -284
  1316. data/src/core/lib/surface/channel.h +137 -90
  1317. data/src/core/lib/surface/channel_init.cc +19 -20
  1318. data/src/core/lib/surface/channel_init.h +24 -26
  1319. data/src/core/lib/surface/channel_ping.cc +26 -20
  1320. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1321. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1322. data/src/core/lib/surface/completion_queue.cc +200 -222
  1323. data/src/core/lib/surface/completion_queue.h +42 -40
  1324. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1325. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1326. data/src/core/lib/surface/event_string.cc +19 -24
  1327. data/src/core/lib/surface/event_string.h +21 -21
  1328. data/src/core/lib/surface/init.cc +57 -114
  1329. data/src/core/lib/surface/init.h +20 -28
  1330. data/src/core/lib/surface/init_internally.cc +25 -0
  1331. data/src/core/lib/surface/init_internally.h +37 -0
  1332. data/src/core/lib/surface/lame_client.cc +87 -130
  1333. data/src/core/lib/surface/lame_client.h +62 -24
  1334. data/src/core/lib/surface/metadata_array.cc +18 -17
  1335. data/src/core/lib/surface/server.cc +409 -188
  1336. data/src/core/lib/surface/server.h +57 -26
  1337. data/src/core/lib/surface/validate_metadata.cc +34 -48
  1338. data/src/core/lib/surface/validate_metadata.h +24 -21
  1339. data/src/core/lib/surface/version.cc +21 -21
  1340. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1341. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1342. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1343. data/src/core/lib/transport/connectivity_state.h +24 -25
  1344. data/src/core/lib/transport/error_utils.cc +57 -79
  1345. data/src/core/lib/transport/error_utils.h +29 -25
  1346. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1347. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1348. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1349. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1350. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1351. data/src/core/lib/transport/http2_errors.h +22 -22
  1352. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1353. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1354. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1355. data/src/core/lib/transport/metadata_batch.h +269 -302
  1356. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1357. data/src/core/lib/transport/parsed_metadata.h +17 -8
  1358. data/src/core/lib/transport/pid_controller.cc +20 -20
  1359. data/src/core/lib/transport/pid_controller.h +27 -27
  1360. data/src/core/lib/transport/status_conversion.cc +23 -23
  1361. data/src/core/lib/transport/status_conversion.h +24 -24
  1362. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1363. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1364. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1365. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1366. data/src/core/lib/transport/transport.cc +97 -57
  1367. data/src/core/lib/transport/transport.h +252 -207
  1368. data/src/core/lib/transport/transport_fwd.h +20 -0
  1369. data/src/core/lib/transport/transport_impl.h +59 -48
  1370. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1371. data/src/core/lib/uri/uri_parser.cc +12 -4
  1372. data/src/core/lib/uri/uri_parser.h +3 -5
  1373. data/src/core/plugin_registry/grpc_plugin_registry.cc +62 -73
  1374. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1375. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1376. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1377. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1378. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1379. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1380. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1381. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1382. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1383. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1384. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1385. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1386. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1387. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1388. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1389. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1390. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1391. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1392. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1393. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1394. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +53 -45
  1395. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1396. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1397. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1398. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1399. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1400. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1403. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1404. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1405. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1406. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1407. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1409. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1410. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1411. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1412. data/src/core/tsi/fake_transport_security.cc +146 -110
  1413. data/src/core/tsi/fake_transport_security.h +36 -30
  1414. data/src/core/tsi/local_transport_security.cc +43 -38
  1415. data/src/core/tsi/local_transport_security.h +33 -33
  1416. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1417. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1418. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1419. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1420. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1421. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1422. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1423. data/src/core/tsi/ssl_transport_security.cc +356 -390
  1424. data/src/core/tsi/ssl_transport_security.h +210 -201
  1425. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1426. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1427. data/src/core/tsi/ssl_types.h +27 -27
  1428. data/src/core/tsi/transport_security.cc +44 -32
  1429. data/src/core/tsi/transport_security.h +49 -48
  1430. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1431. data/src/core/tsi/transport_security_grpc.h +44 -41
  1432. data/src/core/tsi/transport_security_interface.h +346 -332
  1433. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1434. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1435. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1436. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1437. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1438. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1439. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1440. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1441. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1442. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1443. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1444. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1445. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1446. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1447. data/src/ruby/lib/grpc/errors.rb +1 -1
  1448. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1449. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1450. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1451. data/src/ruby/lib/grpc/version.rb +1 -1
  1452. data/src/ruby/pb/generate_proto_ruby.sh +1 -6
  1453. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1454. data/src/ruby/pb/test/client.rb +769 -0
  1455. data/src/ruby/pb/test/server.rb +252 -0
  1456. data/src/ruby/pb/test/xds_client.rb +415 -0
  1457. data/src/ruby/spec/channel_spec.rb +5 -43
  1458. data/src/ruby/spec/client_server_spec.rb +20 -8
  1459. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1460. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1461. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1462. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1463. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1464. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1465. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1466. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1467. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1468. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1469. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1470. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1471. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1472. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1473. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1474. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1475. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1476. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1477. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1478. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1479. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1480. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1481. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1482. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1483. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1484. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1485. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1486. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1487. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1488. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1489. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1490. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1491. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1492. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1493. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1494. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1495. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1496. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1497. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1498. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1499. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1500. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1501. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1502. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1503. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1504. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1505. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1506. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1507. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1508. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1509. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1510. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1511. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1512. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1513. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1514. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1515. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1516. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1517. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1518. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1519. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1520. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1521. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1522. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1523. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1524. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1525. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1526. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1527. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1528. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1529. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1530. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1531. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1532. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1533. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1534. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1535. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1536. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1537. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1538. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1539. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1540. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1541. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1542. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1543. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1544. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1545. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1546. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1547. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1548. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1549. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1550. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1551. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1552. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1553. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1554. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1555. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1556. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1557. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1558. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1559. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1560. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1561. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1562. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1563. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1564. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1565. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1566. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1567. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1568. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1569. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1570. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1571. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1572. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1573. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1574. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1575. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1576. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1577. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1578. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1579. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1580. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1581. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1582. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1583. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1584. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1585. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1586. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1587. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1588. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1589. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1590. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1591. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1592. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1593. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1594. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1595. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1596. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1597. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1598. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1599. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1600. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1601. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1602. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1603. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1604. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1605. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1606. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1607. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1608. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1609. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1610. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1611. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1612. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1614. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1615. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1616. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1617. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1618. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1619. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1620. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1621. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1622. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1623. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1624. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1625. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1626. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1627. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1628. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1629. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1630. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1631. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1632. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1633. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1634. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1635. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1636. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1637. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1638. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1639. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1640. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1641. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1642. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1643. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1644. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1645. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1646. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1647. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1648. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1649. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1650. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1651. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1652. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1653. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1654. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1655. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1656. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1657. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1658. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1659. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1660. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1661. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1662. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1663. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1664. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1665. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1666. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1667. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1668. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1669. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1670. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1671. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1672. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1673. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1674. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1675. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1676. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1677. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1678. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1679. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1680. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1681. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1682. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1683. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1684. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1685. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1686. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1687. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1688. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1689. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1690. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1691. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1692. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1693. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1694. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1695. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1697. data/third_party/re2/re2/bitstate.cc +3 -3
  1698. data/third_party/re2/re2/dfa.cc +13 -13
  1699. data/third_party/re2/re2/nfa.cc +4 -4
  1700. data/third_party/re2/re2/onepass.cc +2 -2
  1701. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1702. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1703. data/third_party/re2/re2/prog.cc +11 -2
  1704. data/third_party/re2/re2/prog.h +17 -5
  1705. data/third_party/re2/re2/re2.cc +6 -11
  1706. data/third_party/re2/re2/re2.h +1 -1
  1707. data/third_party/re2/re2/regexp.cc +1 -2
  1708. data/third_party/re2/re2/stringpiece.h +10 -7
  1709. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1710. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1711. data/third_party/re2/re2/walker-inl.h +3 -2
  1712. data/third_party/re2/util/mutex.h +4 -4
  1713. data/third_party/upb/upb/arena.c +277 -0
  1714. data/third_party/upb/upb/arena.h +225 -0
  1715. data/third_party/upb/upb/array.c +114 -0
  1716. data/third_party/upb/upb/array.h +83 -0
  1717. data/third_party/upb/upb/collections.h +36 -0
  1718. data/third_party/upb/upb/decode.c +188 -76
  1719. data/third_party/upb/upb/decode.h +1 -0
  1720. data/third_party/upb/upb/decode_fast.c +1 -1
  1721. data/third_party/upb/upb/def.c +128 -57
  1722. data/third_party/upb/upb/def.h +20 -4
  1723. data/third_party/upb/upb/def.hpp +7 -4
  1724. data/third_party/upb/upb/encode.c +43 -28
  1725. data/third_party/upb/upb/encode.h +16 -6
  1726. data/third_party/upb/upb/extension_registry.c +93 -0
  1727. data/third_party/upb/upb/extension_registry.h +84 -0
  1728. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1729. data/third_party/upb/upb/internal/table.h +385 -0
  1730. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1731. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1732. data/third_party/upb/upb/json_decode.c +1512 -0
  1733. data/third_party/upb/upb/json_decode.h +47 -0
  1734. data/third_party/upb/upb/json_encode.c +780 -0
  1735. data/third_party/upb/upb/json_encode.h +65 -0
  1736. data/third_party/upb/upb/map.c +108 -0
  1737. data/third_party/upb/upb/map.h +117 -0
  1738. data/third_party/upb/upb/message_value.h +66 -0
  1739. data/third_party/upb/upb/mini_table.c +1147 -0
  1740. data/third_party/upb/upb/mini_table.h +189 -0
  1741. data/third_party/upb/upb/mini_table.hpp +112 -0
  1742. data/third_party/upb/upb/msg.c +6 -68
  1743. data/third_party/upb/upb/msg.h +2 -46
  1744. data/third_party/upb/upb/msg_internal.h +77 -58
  1745. data/third_party/upb/upb/port_def.inc +10 -1
  1746. data/third_party/upb/upb/port_undef.inc +2 -0
  1747. data/third_party/upb/upb/reflection.c +2 -159
  1748. data/third_party/upb/upb/reflection.h +2 -112
  1749. data/third_party/upb/upb/status.c +86 -0
  1750. data/third_party/upb/upb/status.h +66 -0
  1751. data/third_party/upb/upb/table.c +12 -8
  1752. data/third_party/upb/upb/table_internal.h +3 -350
  1753. data/third_party/upb/upb/text_encode.c +3 -2
  1754. data/third_party/upb/upb/upb.c +4 -290
  1755. data/third_party/upb/upb/upb.h +8 -167
  1756. data/third_party/zlib/compress.c +3 -3
  1757. data/third_party/zlib/crc32.c +975 -292
  1758. data/third_party/zlib/crc32.h +9441 -436
  1759. data/third_party/zlib/deflate.c +183 -129
  1760. data/third_party/zlib/deflate.h +12 -15
  1761. data/third_party/zlib/gzguts.h +3 -2
  1762. data/third_party/zlib/gzlib.c +6 -4
  1763. data/third_party/zlib/gzread.c +8 -12
  1764. data/third_party/zlib/gzwrite.c +26 -14
  1765. data/third_party/zlib/infback.c +12 -8
  1766. data/third_party/zlib/inffast.c +14 -14
  1767. data/third_party/zlib/inflate.c +44 -10
  1768. data/third_party/zlib/inflate.h +3 -2
  1769. data/third_party/zlib/inftrees.c +3 -3
  1770. data/third_party/zlib/inftrees.h +1 -1
  1771. data/third_party/zlib/trees.c +85 -107
  1772. data/third_party/zlib/uncompr.c +2 -2
  1773. data/third_party/zlib/zconf.h +16 -3
  1774. data/third_party/zlib/zlib.h +129 -106
  1775. data/third_party/zlib/zutil.c +11 -9
  1776. data/third_party/zlib/zutil.h +13 -9
  1777. metadata +424 -135
  1778. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1779. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1780. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1781. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1782. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1783. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1784. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1785. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1786. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1787. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  1788. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1789. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1790. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1791. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1792. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  1793. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
  1794. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1795. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1796. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1797. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1798. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1799. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1800. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1801. data/src/core/lib/gpr/env.h +0 -40
  1802. data/src/core/lib/gpr/env_linux.cc +0 -75
  1803. data/src/core/lib/gpr/env_posix.cc +0 -46
  1804. data/src/core/lib/gpr/env_windows.cc +0 -74
  1805. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1806. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1807. data/src/core/lib/gpr/string_windows.h +0 -32
  1808. data/src/core/lib/gpr/tls.h +0 -157
  1809. data/src/core/lib/gprpp/capture.h +0 -76
  1810. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1811. data/src/core/lib/iomgr/error_internal.h +0 -66
  1812. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  1813. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1814. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1815. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1816. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1817. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1818. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1819. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1820. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1821. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1822. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1823. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1824. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1825. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1826. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1827. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1828. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1829. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1830. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1831. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1832. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1833. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1834. data/src/core/lib/profiling/timers.h +0 -94
  1835. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1836. data/src/core/lib/slice/slice_api.cc +0 -39
  1837. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1838. data/src/core/lib/slice/slice_split.cc +0 -100
  1839. data/src/core/lib/slice/slice_split.h +0 -40
  1840. data/src/core/lib/transport/byte_stream.cc +0 -162
  1841. data/src/core/lib/transport/byte_stream.h +0 -166
  1842. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,6 +20,7 @@
20
20
  #include <cstdio>
21
21
  #include <cstdlib>
22
22
  #include <iomanip>
23
+ #include <ios>
23
24
  #include <iostream>
24
25
  #include <limits>
25
26
  #include <ostream>
@@ -34,9 +35,13 @@
34
35
  #include "absl/base/port.h"
35
36
  #include "absl/container/fixed_array.h"
36
37
  #include "absl/container/inlined_vector.h"
38
+ #include "absl/crc/internal/crc_cord_state.h"
39
+ #include "absl/strings/cord_buffer.h"
37
40
  #include "absl/strings/escaping.h"
41
+ #include "absl/strings/internal/cord_data_edge.h"
38
42
  #include "absl/strings/internal/cord_internal.h"
39
43
  #include "absl/strings/internal/cord_rep_btree.h"
44
+ #include "absl/strings/internal/cord_rep_crc.h"
40
45
  #include "absl/strings/internal/cord_rep_flat.h"
41
46
  #include "absl/strings/internal/cordz_statistics.h"
42
47
  #include "absl/strings/internal/cordz_update_scope.h"
@@ -52,7 +57,7 @@ ABSL_NAMESPACE_BEGIN
52
57
 
53
58
  using ::absl::cord_internal::CordRep;
54
59
  using ::absl::cord_internal::CordRepBtree;
55
- using ::absl::cord_internal::CordRepConcat;
60
+ using ::absl::cord_internal::CordRepCrc;
56
61
  using ::absl::cord_internal::CordRepExternal;
57
62
  using ::absl::cord_internal::CordRepFlat;
58
63
  using ::absl::cord_internal::CordRepSubstring;
@@ -64,56 +69,6 @@ using ::absl::cord_internal::kMinFlatLength;
64
69
  using ::absl::cord_internal::kInlinedVectorSize;
65
70
  using ::absl::cord_internal::kMaxBytesToCopy;
66
71
 
67
- constexpr uint64_t Fibonacci(unsigned char n, uint64_t a = 0, uint64_t b = 1) {
68
- return n == 0 ? a : Fibonacci(n - 1, b, a + b);
69
- }
70
-
71
- static_assert(Fibonacci(63) == 6557470319842,
72
- "Fibonacci values computed incorrectly");
73
-
74
- // Minimum length required for a given depth tree -- a tree is considered
75
- // balanced if
76
- // length(t) >= min_length[depth(t)]
77
- // The root node depth is allowed to become twice as large to reduce rebalancing
78
- // for larger strings (see IsRootBalanced).
79
- static constexpr uint64_t min_length[] = {
80
- Fibonacci(2), Fibonacci(3), Fibonacci(4), Fibonacci(5),
81
- Fibonacci(6), Fibonacci(7), Fibonacci(8), Fibonacci(9),
82
- Fibonacci(10), Fibonacci(11), Fibonacci(12), Fibonacci(13),
83
- Fibonacci(14), Fibonacci(15), Fibonacci(16), Fibonacci(17),
84
- Fibonacci(18), Fibonacci(19), Fibonacci(20), Fibonacci(21),
85
- Fibonacci(22), Fibonacci(23), Fibonacci(24), Fibonacci(25),
86
- Fibonacci(26), Fibonacci(27), Fibonacci(28), Fibonacci(29),
87
- Fibonacci(30), Fibonacci(31), Fibonacci(32), Fibonacci(33),
88
- Fibonacci(34), Fibonacci(35), Fibonacci(36), Fibonacci(37),
89
- Fibonacci(38), Fibonacci(39), Fibonacci(40), Fibonacci(41),
90
- Fibonacci(42), Fibonacci(43), Fibonacci(44), Fibonacci(45),
91
- Fibonacci(46), Fibonacci(47),
92
- 0xffffffffffffffffull, // Avoid overflow
93
- };
94
-
95
- static const int kMinLengthSize = ABSL_ARRAYSIZE(min_length);
96
-
97
- static inline bool btree_enabled() {
98
- return cord_internal::cord_btree_enabled.load(
99
- std::memory_order_relaxed);
100
- }
101
-
102
- static inline bool IsRootBalanced(CordRep* node) {
103
- if (!node->IsConcat()) {
104
- return true;
105
- } else if (node->concat()->depth() <= 15) {
106
- return true;
107
- } else if (node->concat()->depth() > kMinLengthSize) {
108
- return false;
109
- } else {
110
- // Allow depth to become twice as large as implied by fibonacci rule to
111
- // reduce rebalancing for larger strings.
112
- return (node->length >= min_length[node->concat()->depth() / 2]);
113
- }
114
- }
115
-
116
- static CordRep* Rebalance(CordRep* node);
117
72
  static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
118
73
  int indent = 0);
119
74
  static bool VerifyNode(CordRep* root, CordRep* start_node,
@@ -135,75 +90,6 @@ static inline CordRep* VerifyTree(CordRep* node) {
135
90
  return node;
136
91
  }
137
92
 
138
- // Return the depth of a node
139
- static int Depth(const CordRep* rep) {
140
- if (rep->IsConcat()) {
141
- return rep->concat()->depth();
142
- } else {
143
- return 0;
144
- }
145
- }
146
-
147
- static void SetConcatChildren(CordRepConcat* concat, CordRep* left,
148
- CordRep* right) {
149
- concat->left = left;
150
- concat->right = right;
151
-
152
- concat->length = left->length + right->length;
153
- concat->set_depth(1 + std::max(Depth(left), Depth(right)));
154
- }
155
-
156
- // Create a concatenation of the specified nodes.
157
- // Does not change the refcounts of "left" and "right".
158
- // The returned node has a refcount of 1.
159
- static CordRep* RawConcat(CordRep* left, CordRep* right) {
160
- // Avoid making degenerate concat nodes (one child is empty)
161
- if (left == nullptr) return right;
162
- if (right == nullptr) return left;
163
- if (left->length == 0) {
164
- CordRep::Unref(left);
165
- return right;
166
- }
167
- if (right->length == 0) {
168
- CordRep::Unref(right);
169
- return left;
170
- }
171
-
172
- CordRepConcat* rep = new CordRepConcat();
173
- rep->tag = cord_internal::CONCAT;
174
- SetConcatChildren(rep, left, right);
175
-
176
- return rep;
177
- }
178
-
179
- static CordRep* Concat(CordRep* left, CordRep* right) {
180
- CordRep* rep = RawConcat(left, right);
181
- if (rep != nullptr && !IsRootBalanced(rep)) {
182
- rep = Rebalance(rep);
183
- }
184
- return VerifyTree(rep);
185
- }
186
-
187
- // Make a balanced tree out of an array of leaf nodes.
188
- static CordRep* MakeBalancedTree(CordRep** reps, size_t n) {
189
- // Make repeated passes over the array, merging adjacent pairs
190
- // until we are left with just a single node.
191
- while (n > 1) {
192
- size_t dst = 0;
193
- for (size_t src = 0; src < n; src += 2) {
194
- if (src + 1 < n) {
195
- reps[dst] = Concat(reps[src], reps[src + 1]);
196
- } else {
197
- reps[dst] = reps[src];
198
- }
199
- dst++;
200
- }
201
- n = dst;
202
- }
203
-
204
- return reps[0];
205
- }
206
-
207
93
  static CordRepFlat* CreateFlat(const char* data, size_t length,
208
94
  size_t alloc_hint) {
209
95
  CordRepFlat* flat = CordRepFlat::New(length + alloc_hint);
@@ -229,21 +115,7 @@ static CordRep* NewBtree(const char* data, size_t length, size_t alloc_hint) {
229
115
  // The returned node has a refcount of 1.
230
116
  static CordRep* NewTree(const char* data, size_t length, size_t alloc_hint) {
231
117
  if (length == 0) return nullptr;
232
- if (btree_enabled()) {
233
- return NewBtree(data, length, alloc_hint);
234
- }
235
- absl::FixedArray<CordRep*> reps((length - 1) / kMaxFlatLength + 1);
236
- size_t n = 0;
237
- do {
238
- const size_t len = std::min(length, kMaxFlatLength);
239
- CordRepFlat* rep = CordRepFlat::New(len + alloc_hint);
240
- rep->length = len;
241
- memcpy(rep->Data(), data, len);
242
- reps[n++] = VerifyTree(rep);
243
- data += len;
244
- length -= len;
245
- } while (length != 0);
246
- return MakeBalancedTree(reps.data(), n);
118
+ return NewBtree(data, length, alloc_hint);
247
119
  }
248
120
 
249
121
  namespace cord_internal {
@@ -258,22 +130,6 @@ void InitializeCordRepExternal(absl::string_view data, CordRepExternal* rep) {
258
130
 
259
131
  } // namespace cord_internal
260
132
 
261
- static CordRep* NewSubstring(CordRep* child, size_t offset, size_t length) {
262
- // Never create empty substring nodes
263
- if (length == 0) {
264
- CordRep::Unref(child);
265
- return nullptr;
266
- } else {
267
- CordRepSubstring* rep = new CordRepSubstring();
268
- assert((offset + length) <= child->length);
269
- rep->length = length;
270
- rep->tag = cord_internal::SUBSTRING;
271
- rep->start = offset;
272
- rep->child = child;
273
- return VerifyTree(rep);
274
- }
275
- }
276
-
277
133
  // Creates a CordRep from the provided string. If the string is large enough,
278
134
  // and not wasteful, we move the string into an external cord rep, preserving
279
135
  // the already allocated string contents.
@@ -306,14 +162,13 @@ static CordRep* CordRepFromString(std::string&& src) {
306
162
  // --------------------------------------------------------------------
307
163
  // Cord::InlineRep functions
308
164
 
165
+ #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
309
166
  constexpr unsigned char Cord::InlineRep::kMaxInline;
167
+ #endif
310
168
 
311
- inline void Cord::InlineRep::set_data(const char* data, size_t n,
312
- bool nullify_tail) {
169
+ inline void Cord::InlineRep::set_data(const char* data, size_t n) {
313
170
  static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15");
314
-
315
- cord_internal::SmallMemmove(data_.as_chars(), data, n, nullify_tail);
316
- set_inline_size(n);
171
+ data_.set_inline_data(data, n);
317
172
  }
318
173
 
319
174
  inline char* Cord::InlineRep::set_data(size_t n) {
@@ -329,7 +184,7 @@ inline void Cord::InlineRep::reduce_size(size_t n) {
329
184
  assert(tag >= n);
330
185
  tag -= n;
331
186
  memset(data_.as_chars() + tag, 0, n);
332
- set_inline_size(static_cast<char>(tag));
187
+ set_inline_size(tag);
333
188
  }
334
189
 
335
190
  inline void Cord::InlineRep::remove_prefix(size_t n) {
@@ -341,7 +196,9 @@ inline void Cord::InlineRep::remove_prefix(size_t n) {
341
196
  // Returns `rep` converted into a CordRepBtree.
342
197
  // Directly returns `rep` if `rep` is already a CordRepBtree.
343
198
  static CordRepBtree* ForceBtree(CordRep* rep) {
344
- return rep->IsBtree() ? rep->btree() : CordRepBtree::Create(rep);
199
+ return rep->IsBtree()
200
+ ? rep->btree()
201
+ : CordRepBtree::Create(cord_internal::RemoveCrcNode(rep));
345
202
  }
346
203
 
347
204
  void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
@@ -349,11 +206,7 @@ void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
349
206
  assert(!is_tree());
350
207
  if (!data_.is_empty()) {
351
208
  CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
352
- if (btree_enabled()) {
353
- tree = CordRepBtree::Append(CordRepBtree::Create(flat), tree);
354
- } else {
355
- tree = Concat(flat, tree);
356
- }
209
+ tree = CordRepBtree::Append(CordRepBtree::Create(flat), tree);
357
210
  }
358
211
  EmplaceTree(tree, method);
359
212
  }
@@ -361,16 +214,14 @@ void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
361
214
  void Cord::InlineRep::AppendTreeToTree(CordRep* tree, MethodIdentifier method) {
362
215
  assert(is_tree());
363
216
  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
- }
217
+ tree = CordRepBtree::Append(ForceBtree(data_.as_tree()), tree);
369
218
  SetTree(tree, scope);
370
219
  }
371
220
 
372
221
  void Cord::InlineRep::AppendTree(CordRep* tree, MethodIdentifier method) {
373
- if (tree == nullptr) return;
222
+ assert(tree != nullptr);
223
+ assert(tree->length != 0);
224
+ assert(!tree->IsCrc());
374
225
  if (data_.is_tree()) {
375
226
  AppendTreeToTree(tree, method);
376
227
  } else {
@@ -383,11 +234,7 @@ void Cord::InlineRep::PrependTreeToInlined(CordRep* tree,
383
234
  assert(!is_tree());
384
235
  if (!data_.is_empty()) {
385
236
  CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
386
- if (btree_enabled()) {
387
- tree = CordRepBtree::Prepend(CordRepBtree::Create(flat), tree);
388
- } else {
389
- tree = Concat(tree, flat);
390
- }
237
+ tree = CordRepBtree::Prepend(CordRepBtree::Create(flat), tree);
391
238
  }
392
239
  EmplaceTree(tree, method);
393
240
  }
@@ -396,16 +243,14 @@ void Cord::InlineRep::PrependTreeToTree(CordRep* tree,
396
243
  MethodIdentifier method) {
397
244
  assert(is_tree());
398
245
  const CordzUpdateScope scope(data_.cordz_info(), method);
399
- if (btree_enabled()) {
400
- tree = CordRepBtree::Prepend(ForceBtree(data_.as_tree()), tree);
401
- } else {
402
- tree = Concat(tree, data_.as_tree());
403
- }
246
+ tree = CordRepBtree::Prepend(ForceBtree(data_.as_tree()), tree);
404
247
  SetTree(tree, scope);
405
248
  }
406
249
 
407
250
  void Cord::InlineRep::PrependTree(CordRep* tree, MethodIdentifier method) {
408
251
  assert(tree != nullptr);
252
+ assert(tree->length != 0);
253
+ assert(!tree->IsCrc());
409
254
  if (data_.is_tree()) {
410
255
  PrependTreeToTree(tree, method);
411
256
  } else {
@@ -419,7 +264,7 @@ void Cord::InlineRep::PrependTree(CordRep* tree, MethodIdentifier method) {
419
264
  // written to region and the actual size increase will be written to size.
420
265
  static inline bool PrepareAppendRegion(CordRep* root, char** region,
421
266
  size_t* size, size_t max_length) {
422
- if (root->IsBtree() && root->refcount.IsMutable()) {
267
+ if (root->IsBtree() && root->refcount.IsOne()) {
423
268
  Span<char> span = root->btree()->GetAppendBuffer(max_length);
424
269
  if (!span.empty()) {
425
270
  *region = span.data();
@@ -428,13 +273,8 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
428
273
  }
429
274
  }
430
275
 
431
- // Search down the right-hand path for a non-full FLAT node.
432
276
  CordRep* dst = root;
433
- while (dst->IsConcat() && dst->refcount.IsMutable()) {
434
- dst = dst->concat()->right;
435
- }
436
-
437
- if (!dst->IsFlat() || !dst->refcount.IsMutable()) {
277
+ if (!dst->IsFlat() || !dst->refcount.IsOne()) {
438
278
  *region = nullptr;
439
279
  *size = 0;
440
280
  return false;
@@ -448,12 +288,7 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
448
288
  return false;
449
289
  }
450
290
 
451
- size_t size_increase = std::min(capacity - in_use, max_length);
452
-
453
- // We need to update the length fields for all nodes, including the leaf node.
454
- for (CordRep* rep = root; rep != dst; rep = rep->concat()->right) {
455
- rep->length += size_increase;
456
- }
291
+ const size_t size_increase = std::min(capacity - in_use, max_length);
457
292
  dst->length += size_increase;
458
293
 
459
294
  *region = dst->flat()->Data() + in_use;
@@ -461,90 +296,6 @@ static inline bool PrepareAppendRegion(CordRep* root, char** region,
461
296
  return true;
462
297
  }
463
298
 
464
- template <bool has_length>
465
- void Cord::InlineRep::GetAppendRegion(char** region, size_t* size,
466
- size_t length) {
467
- auto constexpr method = CordzUpdateTracker::kGetAppendRegion;
468
-
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
- }
479
- }
480
-
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);
486
- return;
487
- }
488
-
489
- // Allocate new node.
490
- CordRepFlat* new_node = CordRepFlat::New(extra);
491
- new_node->length = std::min(new_node->Capacity(), length);
492
- *region = new_node->Data();
493
- *size = new_node->length;
494
-
495
- if (btree_enabled()) {
496
- rep = CordRepBtree::Append(ForceBtree(rep), new_node);
497
- } else {
498
- rep = Concat(rep, new_node);
499
- }
500
- CommitTree(root, rep, scope, method);
501
- }
502
-
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;
511
- }
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;
527
- }
528
-
529
- // If the rep is a leaf, this will increment the value at total_mem_usage and
530
- // will return true.
531
- static bool RepMemoryUsageLeaf(const CordRep* rep, size_t* total_mem_usage) {
532
- if (rep->IsFlat()) {
533
- *total_mem_usage += rep->flat()->AllocatedSize();
534
- return true;
535
- }
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;
543
- return true;
544
- }
545
- return false;
546
- }
547
-
548
299
  void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
549
300
  assert(&src != this);
550
301
  assert(is_tree() || src.is_tree());
@@ -581,7 +332,7 @@ Cord::Cord(absl::string_view src, MethodIdentifier method)
581
332
  : contents_(InlineData::kDefaultInit) {
582
333
  const size_t n = src.size();
583
334
  if (n <= InlineRep::kMaxInline) {
584
- contents_.set_data(src.data(), n, true);
335
+ contents_.set_data(src.data(), n);
585
336
  } else {
586
337
  CordRep* rep = NewTree(src.data(), n, 0);
587
338
  contents_.EmplaceTree(rep, method);
@@ -591,7 +342,7 @@ Cord::Cord(absl::string_view src, MethodIdentifier method)
591
342
  template <typename T, Cord::EnableIfString<T>>
592
343
  Cord::Cord(T&& src) : contents_(InlineData::kDefaultInit) {
593
344
  if (src.size() <= InlineRep::kMaxInline) {
594
- contents_.set_data(src.data(), src.size(), true);
345
+ contents_.set_data(src.data(), src.size());
595
346
  } else {
596
347
  CordRep* rep = CordRepFromString(std::forward<T>(src));
597
348
  contents_.EmplaceTree(rep, CordzUpdateTracker::kConstructorString);
@@ -642,14 +393,14 @@ Cord& Cord::operator=(absl::string_view src) {
642
393
  // - MaybeUntrackCord must be called before set_data() clobbers cordz_info.
643
394
  // - set_data() must be called before Unref(tree) as it may reference tree.
644
395
  if (tree != nullptr) CordzInfo::MaybeUntrackCord(contents_.cordz_info());
645
- contents_.set_data(data, length, true);
396
+ contents_.set_data(data, length);
646
397
  if (tree != nullptr) CordRep::Unref(tree);
647
398
  return *this;
648
399
  }
649
400
  if (tree != nullptr) {
650
401
  CordzUpdateScope scope(contents_.cordz_info(), method);
651
402
  if (tree->IsFlat() && tree->flat()->Capacity() >= length &&
652
- tree->refcount.IsMutable()) {
403
+ tree->refcount.IsOne()) {
653
404
  // Copy in place if the existing FLAT node is reusable.
654
405
  memmove(tree->flat()->Data(), data, length);
655
406
  tree->length = length;
@@ -668,6 +419,7 @@ Cord& Cord::operator=(absl::string_view src) {
668
419
  // we keep it here to make diffs easier.
669
420
  void Cord::InlineRep::AppendArray(absl::string_view src,
670
421
  MethodIdentifier method) {
422
+ MaybeRemoveEmptyCrcNode();
671
423
  if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
672
424
 
673
425
  size_t appended = 0;
@@ -675,6 +427,7 @@ void Cord::InlineRep::AppendArray(absl::string_view src,
675
427
  const CordRep* const root = rep;
676
428
  CordzUpdateScope scope(root ? cordz_info() : nullptr, method);
677
429
  if (root != nullptr) {
430
+ rep = cord_internal::RemoveCrcNode(rep);
678
431
  char* region;
679
432
  if (PrepareAppendRegion(rep, &region, &appended, src.size())) {
680
433
  memcpy(region, src.data(), appended);
@@ -684,8 +437,8 @@ void Cord::InlineRep::AppendArray(absl::string_view src,
684
437
  size_t inline_length = inline_size();
685
438
  if (src.size() <= kMaxInline - inline_length) {
686
439
  // Append new data to embedded array
687
- memcpy(data_.as_chars() + inline_length, src.data(), src.size());
688
440
  set_inline_size(inline_length + src.size());
441
+ memcpy(data_.as_chars() + inline_length, src.data(), src.size());
689
442
  return;
690
443
  }
691
444
 
@@ -705,27 +458,11 @@ void Cord::InlineRep::AppendArray(absl::string_view src,
705
458
  return;
706
459
  }
707
460
 
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()));
728
- }
461
+ // TODO(b/192061034): keep legacy 10% growth rate: consider other rates.
462
+ rep = ForceBtree(rep);
463
+ const size_t min_growth = std::max<size_t>(rep->length / 10, src.size());
464
+ rep = CordRepBtree::Append(rep->btree(), src, min_growth - src.size());
465
+
729
466
  CommitTree(root, rep, scope, method);
730
467
  }
731
468
 
@@ -742,11 +479,16 @@ inline CordRep* Cord::TakeRep() && {
742
479
  template <typename C>
743
480
  inline void Cord::AppendImpl(C&& src) {
744
481
  auto constexpr method = CordzUpdateTracker::kAppendCord;
482
+
483
+ contents_.MaybeRemoveEmptyCrcNode();
484
+ if (src.empty()) return;
485
+
745
486
  if (empty()) {
746
487
  // Since destination is empty, we can avoid allocating a node,
747
488
  if (src.contents_.is_tree()) {
748
489
  // by taking the tree directly
749
- CordRep* rep = std::forward<C>(src).TakeRep();
490
+ CordRep* rep =
491
+ cord_internal::RemoveCrcNode(std::forward<C>(src).TakeRep());
750
492
  contents_.EmplaceTree(rep, method);
751
493
  } else {
752
494
  // or copying over inline data
@@ -782,10 +524,56 @@ inline void Cord::AppendImpl(C&& src) {
782
524
  }
783
525
 
784
526
  // Guaranteed to be a tree (kMaxBytesToCopy > kInlinedSize)
785
- CordRep* rep = std::forward<C>(src).TakeRep();
527
+ CordRep* rep = cord_internal::RemoveCrcNode(std::forward<C>(src).TakeRep());
786
528
  contents_.AppendTree(rep, CordzUpdateTracker::kAppendCord);
787
529
  }
788
530
 
531
+ static CordRep::ExtractResult ExtractAppendBuffer(CordRep* rep,
532
+ size_t min_capacity) {
533
+ switch (rep->tag) {
534
+ case cord_internal::BTREE:
535
+ return CordRepBtree::ExtractAppendBuffer(rep->btree(), min_capacity);
536
+ default:
537
+ if (rep->IsFlat() && rep->refcount.IsOne() &&
538
+ rep->flat()->Capacity() - rep->length >= min_capacity) {
539
+ return {nullptr, rep};
540
+ }
541
+ return {rep, nullptr};
542
+ }
543
+ }
544
+
545
+ static CordBuffer CreateAppendBuffer(InlineData& data, size_t block_size,
546
+ size_t capacity) {
547
+ // Watch out for overflow, people can ask for size_t::max().
548
+ const size_t size = data.inline_size();
549
+ const size_t max_capacity = std::numeric_limits<size_t>::max() - size;
550
+ capacity = (std::min)(max_capacity, capacity) + size;
551
+ CordBuffer buffer =
552
+ block_size ? CordBuffer::CreateWithCustomLimit(block_size, capacity)
553
+ : CordBuffer::CreateWithDefaultLimit(capacity);
554
+ cord_internal::SmallMemmove(buffer.data(), data.as_chars(), size);
555
+ buffer.SetLength(size);
556
+ data = {};
557
+ return buffer;
558
+ }
559
+
560
+ CordBuffer Cord::GetAppendBufferSlowPath(size_t block_size, size_t capacity,
561
+ size_t min_capacity) {
562
+ auto constexpr method = CordzUpdateTracker::kGetAppendBuffer;
563
+ CordRep* tree = contents_.tree();
564
+ if (tree != nullptr) {
565
+ CordzUpdateScope scope(contents_.cordz_info(), method);
566
+ CordRep::ExtractResult result = ExtractAppendBuffer(tree, min_capacity);
567
+ if (result.extracted != nullptr) {
568
+ contents_.SetTreeOrEmpty(result.tree, scope);
569
+ return CordBuffer(result.extracted->flat());
570
+ }
571
+ return block_size ? CordBuffer::CreateWithCustomLimit(block_size, capacity)
572
+ : CordBuffer::CreateWithDefaultLimit(capacity);
573
+ }
574
+ return CreateAppendBuffer(contents_.data_, block_size, capacity);
575
+ }
576
+
789
577
  void Cord::Append(const Cord& src) {
790
578
  AppendImpl(src);
791
579
  }
@@ -807,10 +595,14 @@ void Cord::Append(T&& src) {
807
595
  template void Cord::Append(std::string&& src);
808
596
 
809
597
  void Cord::Prepend(const Cord& src) {
598
+ contents_.MaybeRemoveEmptyCrcNode();
599
+ if (src.empty()) return;
600
+
810
601
  CordRep* src_tree = src.contents_.tree();
811
602
  if (src_tree != nullptr) {
812
603
  CordRep::Ref(src_tree);
813
- contents_.PrependTree(src_tree, CordzUpdateTracker::kPrependCord);
604
+ contents_.PrependTree(cord_internal::RemoveCrcNode(src_tree),
605
+ CordzUpdateTracker::kPrependCord);
814
606
  return;
815
607
  }
816
608
 
@@ -820,16 +612,18 @@ void Cord::Prepend(const Cord& src) {
820
612
  }
821
613
 
822
614
  void Cord::PrependArray(absl::string_view src, MethodIdentifier method) {
615
+ contents_.MaybeRemoveEmptyCrcNode();
823
616
  if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
617
+
824
618
  if (!contents_.is_tree()) {
825
619
  size_t cur_size = contents_.inline_size();
826
620
  if (cur_size + src.size() <= InlineRep::kMaxInline) {
827
621
  // 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());
622
+ InlineData data;
623
+ data.set_inline_size(cur_size + src.size());
624
+ memcpy(data.as_chars(), src.data(), src.size());
625
+ memcpy(data.as_chars() + src.size(), contents_.data(), cur_size);
626
+ contents_.data_ = data;
833
627
  return;
834
628
  }
835
629
  }
@@ -837,121 +631,71 @@ void Cord::PrependArray(absl::string_view src, MethodIdentifier method) {
837
631
  contents_.PrependTree(rep, method);
838
632
  }
839
633
 
840
- template <typename T, Cord::EnableIfString<T>>
841
- inline void Cord::Prepend(T&& src) {
842
- if (src.size() <= kMaxBytesToCopy) {
843
- Prepend(absl::string_view(src));
634
+ void Cord::AppendPrecise(absl::string_view src, MethodIdentifier method) {
635
+ assert(!src.empty());
636
+ assert(src.size() <= cord_internal::kMaxFlatLength);
637
+ if (contents_.remaining_inline_capacity() >= src.size()) {
638
+ const size_t inline_length = contents_.inline_size();
639
+ contents_.set_inline_size(inline_length + src.size());
640
+ memcpy(contents_.data_.as_chars() + inline_length, src.data(), src.size());
844
641
  } else {
845
- CordRep* rep = CordRepFromString(std::forward<T>(src));
846
- contents_.PrependTree(rep, CordzUpdateTracker::kPrependString);
642
+ contents_.AppendTree(CordRepFlat::Create(src), method);
847
643
  }
848
644
  }
849
645
 
850
- template void Cord::Prepend(std::string&& src);
851
-
852
- static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
853
- if (n >= node->length) return nullptr;
854
- if (n == 0) return CordRep::Ref(node);
855
- absl::InlinedVector<CordRep*, kInlinedVectorSize> rhs_stack;
856
-
857
- while (node->IsConcat()) {
858
- assert(n <= node->length);
859
- if (n < node->concat()->left->length) {
860
- // Push right to stack, descend left.
861
- rhs_stack.push_back(node->concat()->right);
862
- node = node->concat()->left;
863
- } else {
864
- // Drop left, descend right.
865
- n -= node->concat()->left->length;
866
- node = node->concat()->right;
867
- }
868
- }
869
- assert(n <= node->length);
870
-
871
- if (n == 0) {
872
- CordRep::Ref(node);
646
+ void Cord::PrependPrecise(absl::string_view src, MethodIdentifier method) {
647
+ assert(!src.empty());
648
+ assert(src.size() <= cord_internal::kMaxFlatLength);
649
+ if (contents_.remaining_inline_capacity() >= src.size()) {
650
+ const size_t cur_size = contents_.inline_size();
651
+ InlineData data;
652
+ data.set_inline_size(cur_size + src.size());
653
+ memcpy(data.as_chars(), src.data(), src.size());
654
+ memcpy(data.as_chars() + src.size(), contents_.data(), cur_size);
655
+ contents_.data_ = data;
873
656
  } else {
874
- size_t start = n;
875
- size_t len = node->length - n;
876
- if (node->IsSubstring()) {
877
- // Consider in-place update of node, similar to in RemoveSuffixFrom().
878
- start += node->substring()->start;
879
- node = node->substring()->child;
880
- }
881
- node = NewSubstring(CordRep::Ref(node), start, len);
657
+ contents_.PrependTree(CordRepFlat::Create(src), method);
882
658
  }
883
- while (!rhs_stack.empty()) {
884
- node = Concat(node, CordRep::Ref(rhs_stack.back()));
885
- rhs_stack.pop_back();
886
- }
887
- return node;
888
659
  }
889
660
 
890
- // RemoveSuffixFrom() is very similar to RemovePrefixFrom(), with the
891
- // exception that removing a suffix has an optimization where a node may be
892
- // edited in place iff that node and all its ancestors have a refcount of 1.
893
- static CordRep* RemoveSuffixFrom(CordRep* node, size_t n) {
894
- if (n >= node->length) return nullptr;
895
- if (n == 0) return CordRep::Ref(node);
896
- absl::InlinedVector<CordRep*, kInlinedVectorSize> lhs_stack;
897
- bool inplace_ok = node->refcount.IsMutable();
898
-
899
- while (node->IsConcat()) {
900
- assert(n <= node->length);
901
- if (n < node->concat()->right->length) {
902
- // Push left to stack, descend right.
903
- lhs_stack.push_back(node->concat()->left);
904
- node = node->concat()->right;
905
- } else {
906
- // Drop right, descend left.
907
- n -= node->concat()->right->length;
908
- node = node->concat()->left;
909
- }
910
- inplace_ok = inplace_ok && node->refcount.IsMutable();
911
- }
912
- assert(n <= node->length);
913
-
914
- if (n == 0) {
915
- CordRep::Ref(node);
916
- } else if (inplace_ok && !node->IsExternal()) {
917
- // Consider making a new buffer if the current node capacity is much
918
- // larger than the new length.
919
- CordRep::Ref(node);
920
- node->length -= n;
661
+ template <typename T, Cord::EnableIfString<T>>
662
+ inline void Cord::Prepend(T&& src) {
663
+ if (src.size() <= kMaxBytesToCopy) {
664
+ Prepend(absl::string_view(src));
921
665
  } else {
922
- size_t start = 0;
923
- size_t len = node->length - n;
924
- if (node->IsSubstring()) {
925
- start = node->substring()->start;
926
- node = node->substring()->child;
927
- }
928
- node = NewSubstring(CordRep::Ref(node), start, len);
929
- }
930
- while (!lhs_stack.empty()) {
931
- node = Concat(CordRep::Ref(lhs_stack.back()), node);
932
- lhs_stack.pop_back();
666
+ CordRep* rep = CordRepFromString(std::forward<T>(src));
667
+ contents_.PrependTree(rep, CordzUpdateTracker::kPrependString);
933
668
  }
934
- return node;
935
669
  }
936
670
 
671
+ template void Cord::Prepend(std::string&& src);
672
+
937
673
  void Cord::RemovePrefix(size_t n) {
938
674
  ABSL_INTERNAL_CHECK(n <= size(),
939
675
  absl::StrCat("Requested prefix size ", n,
940
676
  " exceeds Cord's size ", size()));
677
+ contents_.MaybeRemoveEmptyCrcNode();
941
678
  CordRep* tree = contents_.tree();
942
679
  if (tree == nullptr) {
943
680
  contents_.remove_prefix(n);
944
681
  } else {
945
682
  auto constexpr method = CordzUpdateTracker::kRemovePrefix;
946
683
  CordzUpdateScope scope(contents_.cordz_info(), method);
947
- if (tree->IsBtree()) {
684
+ tree = cord_internal::RemoveCrcNode(tree);
685
+ if (n >= tree->length) {
686
+ CordRep::Unref(tree);
687
+ tree = nullptr;
688
+ } else if (tree->IsBtree()) {
948
689
  CordRep* old = tree;
949
690
  tree = tree->btree()->SubTree(n, tree->length - n);
950
691
  CordRep::Unref(old);
692
+ } else if (tree->IsSubstring() && tree->refcount.IsOne()) {
693
+ tree->substring()->start += n;
694
+ tree->length -= n;
951
695
  } else {
952
- CordRep* newrep = RemovePrefixFrom(tree, n);
696
+ CordRep* rep = CordRepSubstring::Substring(tree, n, tree->length - n);
953
697
  CordRep::Unref(tree);
954
- tree = VerifyTree(newrep);
698
+ tree = rep;
955
699
  }
956
700
  contents_.SetTreeOrEmpty(tree, scope);
957
701
  }
@@ -961,74 +705,31 @@ void Cord::RemoveSuffix(size_t n) {
961
705
  ABSL_INTERNAL_CHECK(n <= size(),
962
706
  absl::StrCat("Requested suffix size ", n,
963
707
  " exceeds Cord's size ", size()));
708
+ contents_.MaybeRemoveEmptyCrcNode();
964
709
  CordRep* tree = contents_.tree();
965
710
  if (tree == nullptr) {
966
711
  contents_.reduce_size(n);
967
712
  } else {
968
713
  auto constexpr method = CordzUpdateTracker::kRemoveSuffix;
969
714
  CordzUpdateScope scope(contents_.cordz_info(), method);
970
- if (tree->IsBtree()) {
715
+ tree = cord_internal::RemoveCrcNode(tree);
716
+ if (n >= tree->length) {
717
+ CordRep::Unref(tree);
718
+ tree = nullptr;
719
+ } else if (tree->IsBtree()) {
971
720
  tree = CordRepBtree::RemoveSuffix(tree->btree(), n);
721
+ } else if (!tree->IsExternal() && tree->refcount.IsOne()) {
722
+ assert(tree->IsFlat() || tree->IsSubstring());
723
+ tree->length -= n;
972
724
  } else {
973
- CordRep* newrep = RemoveSuffixFrom(tree, n);
725
+ CordRep* rep = CordRepSubstring::Substring(tree, 0, tree->length - n);
974
726
  CordRep::Unref(tree);
975
- tree = VerifyTree(newrep);
727
+ tree = rep;
976
728
  }
977
729
  contents_.SetTreeOrEmpty(tree, scope);
978
730
  }
979
731
  }
980
732
 
981
- // Work item for NewSubRange().
982
- struct SubRange {
983
- SubRange(CordRep* a_node, size_t a_pos, size_t a_n)
984
- : node(a_node), pos(a_pos), n(a_n) {}
985
- CordRep* node; // nullptr means concat last 2 results.
986
- size_t pos;
987
- size_t n;
988
- };
989
-
990
- static CordRep* NewSubRange(CordRep* node, size_t pos, size_t n) {
991
- absl::InlinedVector<CordRep*, kInlinedVectorSize> results;
992
- absl::InlinedVector<SubRange, kInlinedVectorSize> todo;
993
- todo.push_back(SubRange(node, pos, n));
994
- do {
995
- const SubRange& sr = todo.back();
996
- node = sr.node;
997
- pos = sr.pos;
998
- n = sr.n;
999
- todo.pop_back();
1000
-
1001
- if (node == nullptr) {
1002
- assert(results.size() >= 2);
1003
- CordRep* right = results.back();
1004
- results.pop_back();
1005
- CordRep* left = results.back();
1006
- results.pop_back();
1007
- results.push_back(Concat(left, right));
1008
- } else if (pos == 0 && n == node->length) {
1009
- results.push_back(CordRep::Ref(node));
1010
- } else if (!node->IsConcat()) {
1011
- if (node->IsSubstring()) {
1012
- pos += node->substring()->start;
1013
- node = node->substring()->child;
1014
- }
1015
- results.push_back(NewSubstring(CordRep::Ref(node), pos, n));
1016
- } else if (pos + n <= node->concat()->left->length) {
1017
- todo.push_back(SubRange(node->concat()->left, pos, n));
1018
- } else if (pos >= node->concat()->left->length) {
1019
- pos -= node->concat()->left->length;
1020
- todo.push_back(SubRange(node->concat()->right, pos, n));
1021
- } else {
1022
- size_t left_n = node->concat()->left->length - pos;
1023
- todo.push_back(SubRange(nullptr, 0, 0)); // Concat()
1024
- todo.push_back(SubRange(node->concat()->right, 0, n - left_n));
1025
- todo.push_back(SubRange(node->concat()->left, pos, left_n));
1026
- }
1027
- } while (!todo.empty());
1028
- assert(results.size() == 1);
1029
- return results[0];
1030
- }
1031
-
1032
733
  Cord Cord::Subcord(size_t pos, size_t new_size) const {
1033
734
  Cord sub_cord;
1034
735
  size_t length = size();
@@ -1038,13 +739,12 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
1038
739
 
1039
740
  CordRep* tree = contents_.tree();
1040
741
  if (tree == nullptr) {
1041
- // sub_cord is newly constructed, no need to re-zero-out the tail of
1042
- // contents_ memory.
1043
- sub_cord.contents_.set_data(contents_.data() + pos, new_size, false);
742
+ sub_cord.contents_.set_data(contents_.data() + pos, new_size);
1044
743
  return sub_cord;
1045
744
  }
1046
745
 
1047
746
  if (new_size <= InlineRep::kMaxInline) {
747
+ sub_cord.contents_.set_inline_size(new_size);
1048
748
  char* dest = sub_cord.contents_.data_.as_chars();
1049
749
  Cord::ChunkIterator it = chunk_begin();
1050
750
  it.AdvanceBytes(pos);
@@ -1056,160 +756,20 @@ Cord Cord::Subcord(size_t pos, size_t new_size) const {
1056
756
  ++it;
1057
757
  }
1058
758
  cord_internal::SmallMemmove(dest, it->data(), remaining_size);
1059
- sub_cord.contents_.set_inline_size(new_size);
1060
759
  return sub_cord;
1061
760
  }
1062
761
 
762
+ tree = cord_internal::SkipCrcNode(tree);
1063
763
  if (tree->IsBtree()) {
1064
764
  tree = tree->btree()->SubTree(pos, new_size);
1065
765
  } else {
1066
- tree = NewSubRange(tree, pos, new_size);
766
+ tree = CordRepSubstring::Substring(tree, pos, new_size);
1067
767
  }
1068
768
  sub_cord.contents_.EmplaceTree(tree, contents_.data_,
1069
769
  CordzUpdateTracker::kSubCord);
1070
770
  return sub_cord;
1071
771
  }
1072
772
 
1073
- // --------------------------------------------------------------------
1074
- // Balancing
1075
-
1076
- class CordForest {
1077
- public:
1078
- explicit CordForest(size_t length)
1079
- : root_length_(length), trees_(kMinLengthSize, nullptr) {}
1080
-
1081
- void Build(CordRep* cord_root) {
1082
- std::vector<CordRep*> pending = {cord_root};
1083
-
1084
- while (!pending.empty()) {
1085
- CordRep* node = pending.back();
1086
- pending.pop_back();
1087
- CheckNode(node);
1088
- if (ABSL_PREDICT_FALSE(!node->IsConcat())) {
1089
- AddNode(node);
1090
- continue;
1091
- }
1092
-
1093
- CordRepConcat* concat_node = node->concat();
1094
- if (concat_node->depth() >= kMinLengthSize ||
1095
- concat_node->length < min_length[concat_node->depth()]) {
1096
- pending.push_back(concat_node->right);
1097
- pending.push_back(concat_node->left);
1098
-
1099
- if (concat_node->refcount.IsOne()) {
1100
- concat_node->left = concat_freelist_;
1101
- concat_freelist_ = concat_node;
1102
- } else {
1103
- CordRep::Ref(concat_node->right);
1104
- CordRep::Ref(concat_node->left);
1105
- CordRep::Unref(concat_node);
1106
- }
1107
- } else {
1108
- AddNode(node);
1109
- }
1110
- }
1111
- }
1112
-
1113
- CordRep* ConcatNodes() {
1114
- CordRep* sum = nullptr;
1115
- for (auto* node : trees_) {
1116
- if (node == nullptr) continue;
1117
-
1118
- sum = PrependNode(node, sum);
1119
- root_length_ -= node->length;
1120
- if (root_length_ == 0) break;
1121
- }
1122
- ABSL_INTERNAL_CHECK(sum != nullptr, "Failed to locate sum node");
1123
- return VerifyTree(sum);
1124
- }
1125
-
1126
- private:
1127
- CordRep* AppendNode(CordRep* node, CordRep* sum) {
1128
- return (sum == nullptr) ? node : MakeConcat(sum, node);
1129
- }
1130
-
1131
- CordRep* PrependNode(CordRep* node, CordRep* sum) {
1132
- return (sum == nullptr) ? node : MakeConcat(node, sum);
1133
- }
1134
-
1135
- void AddNode(CordRep* node) {
1136
- CordRep* sum = nullptr;
1137
-
1138
- // Collect together everything with which we will merge with node
1139
- int i = 0;
1140
- for (; node->length > min_length[i + 1]; ++i) {
1141
- auto& tree_at_i = trees_[i];
1142
-
1143
- if (tree_at_i == nullptr) continue;
1144
- sum = PrependNode(tree_at_i, sum);
1145
- tree_at_i = nullptr;
1146
- }
1147
-
1148
- sum = AppendNode(node, sum);
1149
-
1150
- // Insert sum into appropriate place in the forest
1151
- for (; sum->length >= min_length[i]; ++i) {
1152
- auto& tree_at_i = trees_[i];
1153
- if (tree_at_i == nullptr) continue;
1154
-
1155
- sum = MakeConcat(tree_at_i, sum);
1156
- tree_at_i = nullptr;
1157
- }
1158
-
1159
- // min_length[0] == 1, which means sum->length >= min_length[0]
1160
- assert(i > 0);
1161
- trees_[i - 1] = sum;
1162
- }
1163
-
1164
- // Make concat node trying to resue existing CordRepConcat nodes we
1165
- // already collected in the concat_freelist_.
1166
- CordRep* MakeConcat(CordRep* left, CordRep* right) {
1167
- if (concat_freelist_ == nullptr) return RawConcat(left, right);
1168
-
1169
- CordRepConcat* rep = concat_freelist_;
1170
- if (concat_freelist_->left == nullptr) {
1171
- concat_freelist_ = nullptr;
1172
- } else {
1173
- concat_freelist_ = concat_freelist_->left->concat();
1174
- }
1175
- SetConcatChildren(rep, left, right);
1176
-
1177
- return rep;
1178
- }
1179
-
1180
- static void CheckNode(CordRep* node) {
1181
- ABSL_INTERNAL_CHECK(node->length != 0u, "");
1182
- if (node->IsConcat()) {
1183
- ABSL_INTERNAL_CHECK(node->concat()->left != nullptr, "");
1184
- ABSL_INTERNAL_CHECK(node->concat()->right != nullptr, "");
1185
- ABSL_INTERNAL_CHECK(node->length == (node->concat()->left->length +
1186
- node->concat()->right->length),
1187
- "");
1188
- }
1189
- }
1190
-
1191
- size_t root_length_;
1192
-
1193
- // use an inlined vector instead of a flat array to get bounds checking
1194
- absl::InlinedVector<CordRep*, kInlinedVectorSize> trees_;
1195
-
1196
- // List of concat nodes we can re-use for Cord balancing.
1197
- CordRepConcat* concat_freelist_ = nullptr;
1198
- };
1199
-
1200
- static CordRep* Rebalance(CordRep* node) {
1201
- VerifyTree(node);
1202
- assert(node->IsConcat());
1203
-
1204
- if (node->length == 0) {
1205
- return nullptr;
1206
- }
1207
-
1208
- CordForest forest(node->length);
1209
- forest.Build(node);
1210
- return forest.ConcatNodes();
1211
- }
1212
-
1213
773
  // --------------------------------------------------------------------
1214
774
  // Comparators
1215
775
 
@@ -1256,7 +816,7 @@ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1256
816
  return absl::string_view(data_.as_chars(), data_.inline_size());
1257
817
  }
1258
818
 
1259
- CordRep* node = tree();
819
+ CordRep* node = cord_internal::SkipCrcNode(tree());
1260
820
  if (node->IsFlat()) {
1261
821
  return absl::string_view(node->flat()->Data(), node->length);
1262
822
  }
@@ -1274,11 +834,6 @@ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1274
834
  return tree->Data(tree->begin());
1275
835
  }
1276
836
 
1277
- // Walk down the left branches until we hit a non-CONCAT node.
1278
- while (node->IsConcat()) {
1279
- node = node->concat()->left;
1280
- }
1281
-
1282
837
  // Get the child node if we encounter a SUBSTRING.
1283
838
  size_t offset = 0;
1284
839
  size_t length = node->length;
@@ -1298,6 +853,46 @@ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1298
853
  return absl::string_view(node->external()->base + offset, length);
1299
854
  }
1300
855
 
856
+ void Cord::SetCrcCordState(crc_internal::CrcCordState state) {
857
+ auto constexpr method = CordzUpdateTracker::kSetExpectedChecksum;
858
+ if (empty()) {
859
+ contents_.MaybeRemoveEmptyCrcNode();
860
+ CordRep* rep = CordRepCrc::New(nullptr, std::move(state));
861
+ contents_.EmplaceTree(rep, method);
862
+ } else if (!contents_.is_tree()) {
863
+ CordRep* rep = contents_.MakeFlatWithExtraCapacity(0);
864
+ rep = CordRepCrc::New(rep, std::move(state));
865
+ contents_.EmplaceTree(rep, method);
866
+ } else {
867
+ const CordzUpdateScope scope(contents_.data_.cordz_info(), method);
868
+ CordRep* rep = CordRepCrc::New(contents_.data_.as_tree(), std::move(state));
869
+ contents_.SetTree(rep, scope);
870
+ }
871
+ }
872
+
873
+ void Cord::SetExpectedChecksum(uint32_t crc) {
874
+ // Construct a CrcCordState with a single chunk.
875
+ crc_internal::CrcCordState state;
876
+ state.mutable_rep()->prefix_crc.push_back(
877
+ crc_internal::CrcCordState::PrefixCrc(size(), absl::crc32c_t{crc}));
878
+ SetCrcCordState(std::move(state));
879
+ }
880
+
881
+ const crc_internal::CrcCordState* Cord::MaybeGetCrcCordState() const {
882
+ if (!contents_.is_tree() || !contents_.tree()->IsCrc()) {
883
+ return nullptr;
884
+ }
885
+ return &contents_.tree()->crc()->crc_cord_state;
886
+ }
887
+
888
+ absl::optional<uint32_t> Cord::ExpectedChecksum() const {
889
+ if (!contents_.is_tree() || !contents_.tree()->IsCrc()) {
890
+ return absl::nullopt;
891
+ }
892
+ return static_cast<uint32_t>(
893
+ contents_.tree()->crc()->crc_cord_state.Checksum());
894
+ }
895
+
1301
896
  inline int Cord::CompareSlowPath(absl::string_view rhs, size_t compared_size,
1302
897
  size_t size_to_compare) const {
1303
898
  auto advance = [](Cord::ChunkIterator* it, absl::string_view* chunk) {
@@ -1363,6 +958,7 @@ inline int Cord::CompareSlowPath(const Cord& rhs, size_t compared_size,
1363
958
  }
1364
959
 
1365
960
  inline absl::string_view Cord::GetFirstChunk(const Cord& c) {
961
+ if (c.empty()) return {};
1366
962
  return c.contents_.FindFlatStartPiece();
1367
963
  }
1368
964
  inline absl::string_view Cord::GetFirstChunk(absl::string_view sv) {
@@ -1473,42 +1069,6 @@ void Cord::CopyToArraySlowPath(char* dst) const {
1473
1069
  }
1474
1070
  }
1475
1071
 
1476
- Cord::ChunkIterator& Cord::ChunkIterator::AdvanceStack() {
1477
- auto& stack_of_right_children = stack_of_right_children_;
1478
- if (stack_of_right_children.empty()) {
1479
- assert(!current_chunk_.empty()); // Called on invalid iterator.
1480
- // We have reached the end of the Cord.
1481
- return *this;
1482
- }
1483
-
1484
- // Process the next node on the stack.
1485
- CordRep* node = stack_of_right_children.back();
1486
- stack_of_right_children.pop_back();
1487
-
1488
- // Walk down the left branches until we hit a non-CONCAT node. Save the
1489
- // right children to the stack for subsequent traversal.
1490
- while (node->IsConcat()) {
1491
- stack_of_right_children.push_back(node->concat()->right);
1492
- node = node->concat()->left;
1493
- }
1494
-
1495
- // Get the child node if we encounter a SUBSTRING.
1496
- size_t offset = 0;
1497
- size_t length = node->length;
1498
- if (node->IsSubstring()) {
1499
- offset = node->substring()->start;
1500
- node = node->substring()->child;
1501
- }
1502
-
1503
- assert(node->IsExternal() || node->IsFlat());
1504
- assert(length != 0);
1505
- const char* data =
1506
- node->IsExternal() ? node->external()->base : node->flat()->Data();
1507
- current_chunk_ = absl::string_view(data + offset, length);
1508
- current_leaf_ = node;
1509
- return *this;
1510
- }
1511
-
1512
1072
  Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1513
1073
  ABSL_HARDENING_ASSERT(bytes_remaining_ >= n &&
1514
1074
  "Attempted to iterate past `end()`");
@@ -1551,166 +1111,33 @@ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1551
1111
  return subcord;
1552
1112
  }
1553
1113
 
1554
- auto& stack_of_right_children = stack_of_right_children_;
1555
- if (n < current_chunk_.size()) {
1556
- // Range to read is a proper subrange of the current chunk.
1557
- assert(current_leaf_ != nullptr);
1558
- CordRep* subnode = CordRep::Ref(current_leaf_);
1559
- const char* data = subnode->IsExternal() ? subnode->external()->base
1560
- : subnode->flat()->Data();
1561
- subnode = NewSubstring(subnode, current_chunk_.data() - data, n);
1562
- subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1563
- RemoveChunkPrefix(n);
1564
- return subcord;
1565
- }
1566
-
1567
- // Range to read begins with a proper subrange of the current chunk.
1568
- assert(!current_chunk_.empty());
1114
+ // Short circuit if reading the entire data edge.
1569
1115
  assert(current_leaf_ != nullptr);
1570
- CordRep* subnode = CordRep::Ref(current_leaf_);
1571
- if (current_chunk_.size() < subnode->length) {
1572
- const char* data = subnode->IsExternal() ? subnode->external()->base
1573
- : subnode->flat()->Data();
1574
- subnode = NewSubstring(subnode, current_chunk_.data() - data,
1575
- current_chunk_.size());
1576
- }
1577
- n -= current_chunk_.size();
1578
- bytes_remaining_ -= current_chunk_.size();
1579
-
1580
- // Process the next node(s) on the stack, reading whole subtrees depending on
1581
- // their length and how many bytes we are advancing.
1582
- CordRep* node = nullptr;
1583
- while (!stack_of_right_children.empty()) {
1584
- node = stack_of_right_children.back();
1585
- stack_of_right_children.pop_back();
1586
- if (node->length > n) break;
1587
- // TODO(qrczak): This might unnecessarily recreate existing concat nodes.
1588
- // Avoiding that would need pretty complicated logic (instead of
1589
- // current_leaf, keep current_subtree_ which points to the highest node
1590
- // such that the current leaf can be found on the path of left children
1591
- // starting from current_subtree_; delay creating subnode while node is
1592
- // below current_subtree_; find the proper node along the path of left
1593
- // children starting from current_subtree_ if this loop exits while staying
1594
- // below current_subtree_; etc.; alternatively, push parents instead of
1595
- // right children on the stack).
1596
- subnode = Concat(subnode, CordRep::Ref(node));
1597
- n -= node->length;
1598
- bytes_remaining_ -= node->length;
1599
- node = nullptr;
1600
- }
1601
-
1602
- if (node == nullptr) {
1603
- // We have reached the end of the Cord.
1604
- assert(bytes_remaining_ == 0);
1605
- subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1116
+ if (n == current_leaf_->length) {
1117
+ bytes_remaining_ = 0;
1118
+ current_chunk_ = {};
1119
+ CordRep* tree = CordRep::Ref(current_leaf_);
1120
+ subcord.contents_.EmplaceTree(VerifyTree(tree), method);
1606
1121
  return subcord;
1607
1122
  }
1608
1123
 
1609
- // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1610
- // right children to the stack for subsequent traversal.
1611
- while (node->IsConcat()) {
1612
- if (node->concat()->left->length > n) {
1613
- // Push right, descend left.
1614
- stack_of_right_children.push_back(node->concat()->right);
1615
- node = node->concat()->left;
1616
- } else {
1617
- // Read left, descend right.
1618
- subnode = Concat(subnode, CordRep::Ref(node->concat()->left));
1619
- n -= node->concat()->left->length;
1620
- bytes_remaining_ -= node->concat()->left->length;
1621
- node = node->concat()->right;
1622
- }
1623
- }
1624
-
1625
- // Get the child node if we encounter a SUBSTRING.
1626
- size_t offset = 0;
1627
- size_t length = node->length;
1628
- if (node->IsSubstring()) {
1629
- offset = node->substring()->start;
1630
- node = node->substring()->child;
1631
- }
1124
+ // From this point on, we need a partial substring node.
1125
+ // Get pointer to the underlying flat or external data payload and
1126
+ // compute data pointer and offset into current flat or external.
1127
+ CordRep* payload = current_leaf_->IsSubstring()
1128
+ ? current_leaf_->substring()->child
1129
+ : current_leaf_;
1130
+ const char* data = payload->IsExternal() ? payload->external()->base
1131
+ : payload->flat()->Data();
1132
+ const size_t offset = static_cast<size_t>(current_chunk_.data() - data);
1632
1133
 
1633
- // Range to read ends with a proper (possibly empty) subrange of the current
1634
- // chunk.
1635
- assert(node->IsExternal() || node->IsFlat());
1636
- assert(length > n);
1637
- if (n > 0) {
1638
- subnode = Concat(subnode, NewSubstring(CordRep::Ref(node), offset, n));
1639
- }
1640
- const char* data =
1641
- node->IsExternal() ? node->external()->base : node->flat()->Data();
1642
- current_chunk_ = absl::string_view(data + offset + n, length - n);
1643
- current_leaf_ = node;
1134
+ auto* tree = CordRepSubstring::Substring(payload, offset, n);
1135
+ subcord.contents_.EmplaceTree(VerifyTree(tree), method);
1644
1136
  bytes_remaining_ -= n;
1645
- subcord.contents_.EmplaceTree(VerifyTree(subnode), method);
1137
+ current_chunk_.remove_prefix(n);
1646
1138
  return subcord;
1647
1139
  }
1648
1140
 
1649
- void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1650
- assert(bytes_remaining_ >= n && "Attempted to iterate past `end()`");
1651
- assert(n >= current_chunk_.size()); // This should only be called when
1652
- // iterating to a new node.
1653
-
1654
- n -= current_chunk_.size();
1655
- bytes_remaining_ -= current_chunk_.size();
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
-
1663
- // Process the next node(s) on the stack, skipping whole subtrees depending on
1664
- // their length and how many bytes we are advancing.
1665
- CordRep* node = nullptr;
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();
1670
- if (node->length > n) break;
1671
- n -= node->length;
1672
- bytes_remaining_ -= node->length;
1673
- node = nullptr;
1674
- }
1675
-
1676
- if (node == nullptr) {
1677
- // We have reached the end of the Cord.
1678
- assert(bytes_remaining_ == 0);
1679
- return;
1680
- }
1681
-
1682
- // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1683
- // right children to the stack for subsequent traversal.
1684
- while (node->IsConcat()) {
1685
- if (node->concat()->left->length > n) {
1686
- // Push right, descend left.
1687
- stack_of_right_children.push_back(node->concat()->right);
1688
- node = node->concat()->left;
1689
- } else {
1690
- // Skip left, descend right.
1691
- n -= node->concat()->left->length;
1692
- bytes_remaining_ -= node->concat()->left->length;
1693
- node = node->concat()->right;
1694
- }
1695
- }
1696
-
1697
- // Get the child node if we encounter a SUBSTRING.
1698
- size_t offset = 0;
1699
- size_t length = node->length;
1700
- if (node->IsSubstring()) {
1701
- offset = node->substring()->start;
1702
- node = node->substring()->child;
1703
- }
1704
-
1705
- assert(node->IsExternal() || node->IsFlat());
1706
- assert(length > n);
1707
- const char* data =
1708
- node->IsExternal() ? node->external()->base : node->flat()->Data();
1709
- current_chunk_ = absl::string_view(data + offset + n, length - n);
1710
- current_leaf_ = node;
1711
- bytes_remaining_ -= n;
1712
- }
1713
-
1714
1141
  char Cord::operator[](size_t i) const {
1715
1142
  ABSL_HARDENING_ASSERT(i < size());
1716
1143
  size_t offset = i;
@@ -1718,6 +1145,7 @@ char Cord::operator[](size_t i) const {
1718
1145
  if (rep == nullptr) {
1719
1146
  return contents_.data()[i];
1720
1147
  }
1148
+ rep = cord_internal::SkipCrcNode(rep);
1721
1149
  while (true) {
1722
1150
  assert(rep != nullptr);
1723
1151
  assert(offset < rep->length);
@@ -1729,16 +1157,6 @@ char Cord::operator[](size_t i) const {
1729
1157
  } else if (rep->IsExternal()) {
1730
1158
  // Get the "i"th character from the external array.
1731
1159
  return rep->external()->base[offset];
1732
- } else if (rep->IsConcat()) {
1733
- // Recursively branch to the side of the concatenation that the "i"th
1734
- // character is on.
1735
- size_t left_length = rep->concat()->left->length;
1736
- if (offset < left_length) {
1737
- rep = rep->concat()->left;
1738
- } else {
1739
- offset -= left_length;
1740
- rep = rep->concat()->right;
1741
- }
1742
1160
  } else {
1743
1161
  // This must be a substring a node, so bypass it to get to the child.
1744
1162
  assert(rep->IsSubstring());
@@ -1778,6 +1196,11 @@ absl::string_view Cord::FlattenSlowPath() {
1778
1196
 
1779
1197
  /* static */ bool Cord::GetFlatAux(CordRep* rep, absl::string_view* fragment) {
1780
1198
  assert(rep != nullptr);
1199
+ if (rep->length == 0) {
1200
+ *fragment = absl::string_view();
1201
+ return true;
1202
+ }
1203
+ rep = cord_internal::SkipCrcNode(rep);
1781
1204
  if (rep->IsFlat()) {
1782
1205
  *fragment = absl::string_view(rep->flat()->Data(), rep->length);
1783
1206
  return true;
@@ -1807,6 +1230,10 @@ absl::string_view Cord::FlattenSlowPath() {
1807
1230
  /* static */ void Cord::ForEachChunkAux(
1808
1231
  absl::cord_internal::CordRep* rep,
1809
1232
  absl::FunctionRef<void(absl::string_view)> callback) {
1233
+ assert(rep != nullptr);
1234
+ if (rep->length == 0) return;
1235
+ rep = cord_internal::SkipCrcNode(rep);
1236
+
1810
1237
  if (rep->IsBtree()) {
1811
1238
  ChunkIterator it(rep), end;
1812
1239
  while (it != end) {
@@ -1816,44 +1243,13 @@ absl::string_view Cord::FlattenSlowPath() {
1816
1243
  return;
1817
1244
  }
1818
1245
 
1819
- assert(rep != nullptr);
1820
- int stack_pos = 0;
1821
- constexpr int stack_max = 128;
1822
- // Stack of right branches for tree traversal
1823
- absl::cord_internal::CordRep* stack[stack_max];
1824
- absl::cord_internal::CordRep* current_node = rep;
1825
- while (true) {
1826
- if (current_node->IsConcat()) {
1827
- if (stack_pos == stack_max) {
1828
- // There's no more room on our stack array to add another right branch,
1829
- // and the idea is to avoid allocations, so call this function
1830
- // recursively to navigate this subtree further. (This is not something
1831
- // we expect to happen in practice).
1832
- ForEachChunkAux(current_node, callback);
1833
-
1834
- // Pop the next right branch and iterate.
1835
- current_node = stack[--stack_pos];
1836
- continue;
1837
- } else {
1838
- // Save the right branch for later traversal and continue down the left
1839
- // branch.
1840
- stack[stack_pos++] = current_node->concat()->right;
1841
- current_node = current_node->concat()->left;
1842
- continue;
1843
- }
1844
- }
1845
- // This is a leaf node, so invoke our callback.
1846
- absl::string_view chunk;
1847
- bool success = GetFlatAux(current_node, &chunk);
1848
- assert(success);
1849
- if (success) {
1850
- callback(chunk);
1851
- }
1852
- if (stack_pos == 0) {
1853
- // end of traversal
1854
- return;
1855
- }
1856
- current_node = stack[--stack_pos];
1246
+ // This is a leaf node, so invoke our callback.
1247
+ absl::cord_internal::CordRep* current_node = cord_internal::SkipCrcNode(rep);
1248
+ absl::string_view chunk;
1249
+ bool success = GetFlatAux(current_node, &chunk);
1250
+ assert(success);
1251
+ if (success) {
1252
+ callback(chunk);
1857
1253
  }
1858
1254
  }
1859
1255
 
@@ -1868,19 +1264,21 @@ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
1868
1264
  *os << " [";
1869
1265
  if (include_data) *os << static_cast<void*>(rep);
1870
1266
  *os << "]";
1871
- *os << " " << (IsRootBalanced(rep) ? 'b' : 'u');
1872
1267
  *os << " " << std::setw(indent) << "";
1873
- if (rep->IsConcat()) {
1874
- *os << "CONCAT depth=" << Depth(rep) << "\n";
1268
+ bool leaf = false;
1269
+ if (rep == nullptr) {
1270
+ *os << "NULL\n";
1271
+ leaf = true;
1272
+ } else if (rep->IsCrc()) {
1273
+ *os << "CRC crc=" << rep->crc()->crc_cord_state.Checksum() << "\n";
1875
1274
  indent += kIndentStep;
1876
- indents.push_back(indent);
1877
- stack.push_back(rep->concat()->right);
1878
- rep = rep->concat()->left;
1275
+ rep = rep->crc()->child;
1879
1276
  } else if (rep->IsSubstring()) {
1880
1277
  *os << "SUBSTRING @ " << rep->substring()->start << "\n";
1881
1278
  indent += kIndentStep;
1882
1279
  rep = rep->substring()->child;
1883
1280
  } else { // Leaf or ring
1281
+ leaf = true;
1884
1282
  if (rep->IsExternal()) {
1885
1283
  *os << "EXTERNAL [";
1886
1284
  if (include_data)
@@ -1894,6 +1292,8 @@ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
1894
1292
  } else {
1895
1293
  CordRepBtree::Dump(rep, /*label=*/ "", include_data, *os);
1896
1294
  }
1295
+ }
1296
+ if (leaf) {
1897
1297
  if (stack.empty()) break;
1898
1298
  rep = stack.back();
1899
1299
  stack.pop_back();
@@ -1912,7 +1312,7 @@ static std::string ReportError(CordRep* root, CordRep* node) {
1912
1312
  }
1913
1313
 
1914
1314
  static bool VerifyNode(CordRep* root, CordRep* start_node,
1915
- bool full_validation) {
1315
+ bool /* full_validation */) {
1916
1316
  absl::InlinedVector<CordRep*, 2> worklist;
1917
1317
  worklist.push_back(start_node);
1918
1318
  do {
@@ -1922,21 +1322,10 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1922
1322
  ABSL_INTERNAL_CHECK(node != nullptr, ReportError(root, node));
1923
1323
  if (node != root) {
1924
1324
  ABSL_INTERNAL_CHECK(node->length != 0, ReportError(root, node));
1325
+ ABSL_INTERNAL_CHECK(!node->IsCrc(), ReportError(root, node));
1925
1326
  }
1926
1327
 
1927
- if (node->IsConcat()) {
1928
- ABSL_INTERNAL_CHECK(node->concat()->left != nullptr,
1929
- ReportError(root, node));
1930
- ABSL_INTERNAL_CHECK(node->concat()->right != nullptr,
1931
- ReportError(root, node));
1932
- ABSL_INTERNAL_CHECK((node->length == node->concat()->left->length +
1933
- node->concat()->right->length),
1934
- ReportError(root, node));
1935
- if (full_validation) {
1936
- worklist.push_back(node->concat()->right);
1937
- worklist.push_back(node->concat()->left);
1938
- }
1939
- } else if (node->IsFlat()) {
1328
+ if (node->IsFlat()) {
1940
1329
  ABSL_INTERNAL_CHECK(node->length <= node->flat()->Capacity(),
1941
1330
  ReportError(root, node));
1942
1331
  } else if (node->IsExternal()) {
@@ -1949,78 +1338,23 @@ static bool VerifyNode(CordRep* root, CordRep* start_node,
1949
1338
  ABSL_INTERNAL_CHECK(node->substring()->start + node->length <=
1950
1339
  node->substring()->child->length,
1951
1340
  ReportError(root, node));
1341
+ } else if (node->IsCrc()) {
1342
+ ABSL_INTERNAL_CHECK(
1343
+ node->crc()->child != nullptr || node->crc()->length == 0,
1344
+ ReportError(root, node));
1345
+ if (node->crc()->child != nullptr) {
1346
+ ABSL_INTERNAL_CHECK(node->crc()->length == node->crc()->child->length,
1347
+ ReportError(root, node));
1348
+ worklist.push_back(node->crc()->child);
1349
+ }
1952
1350
  }
1953
1351
  } while (!worklist.empty());
1954
1352
  return true;
1955
1353
  }
1956
1354
 
1957
- // Traverses the tree and computes the total memory allocated.
1958
- /* static */ size_t Cord::MemoryUsageAux(const CordRep* rep) {
1959
- size_t total_mem_usage = 0;
1960
-
1961
- // Allow a quick exit for the common case that the root is a leaf.
1962
- if (RepMemoryUsageLeaf(rep, &total_mem_usage)) {
1963
- return total_mem_usage;
1964
- }
1965
-
1966
- // Iterate over the tree. cur_node is never a leaf node and leaf nodes will
1967
- // never be appended to tree_stack. This reduces overhead from manipulating
1968
- // tree_stack.
1969
- absl::InlinedVector<const CordRep*, kInlinedVectorSize> tree_stack;
1970
- const CordRep* cur_node = rep;
1971
- while (true) {
1972
- const CordRep* next_node = nullptr;
1973
-
1974
- if (cur_node->IsConcat()) {
1975
- total_mem_usage += sizeof(CordRepConcat);
1976
- const CordRep* left = cur_node->concat()->left;
1977
- if (!RepMemoryUsageLeaf(left, &total_mem_usage)) {
1978
- next_node = left;
1979
- }
1980
-
1981
- const CordRep* right = cur_node->concat()->right;
1982
- if (!RepMemoryUsageLeaf(right, &total_mem_usage)) {
1983
- if (next_node) {
1984
- tree_stack.push_back(next_node);
1985
- }
1986
- next_node = right;
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
- }
2000
- } else {
2001
- // Since cur_node is not a leaf or a concat node it must be a substring.
2002
- assert(cur_node->IsSubstring());
2003
- total_mem_usage += sizeof(CordRepSubstring);
2004
- next_node = cur_node->substring()->child;
2005
- if (RepMemoryUsageLeaf(next_node, &total_mem_usage)) {
2006
- next_node = nullptr;
2007
- }
2008
- }
2009
-
2010
- if (!next_node) {
2011
- if (tree_stack.empty()) {
2012
- return total_mem_usage;
2013
- }
2014
- next_node = tree_stack.back();
2015
- tree_stack.pop_back();
2016
- }
2017
- cur_node = next_node;
2018
- }
2019
- }
2020
-
2021
1355
  std::ostream& operator<<(std::ostream& out, const Cord& cord) {
2022
1356
  for (absl::string_view chunk : cord.Chunks()) {
2023
- out.write(chunk.data(), chunk.size());
1357
+ out.write(chunk.data(), static_cast<std::streamsize>(chunk.size()));
2024
1358
  }
2025
1359
  return out;
2026
1360
  }
@@ -2035,7 +1369,6 @@ uint8_t CordTestAccess::LengthToTag(size_t s) {
2035
1369
  ABSL_INTERNAL_CHECK(s <= kMaxFlatLength, absl::StrCat("Invalid length ", s));
2036
1370
  return cord_internal::AllocatedSizeToTag(s + cord_internal::kFlatOverhead);
2037
1371
  }
2038
- size_t CordTestAccess::SizeofCordRepConcat() { return sizeof(CordRepConcat); }
2039
1372
  size_t CordTestAccess::SizeofCordRepExternal() {
2040
1373
  return sizeof(CordRepExternal);
2041
1374
  }