grpc 1.37.1 → 1.38.0.pre1

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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -25,7 +25,7 @@
25
25
  //
26
26
  // Because a Cord consists of these chunks, data can be added to or removed from
27
27
  // a Cord during its lifetime. Chunks may also be shared between Cords. Unlike a
28
- // `std::string`, a Cord can therefore accomodate data that changes over its
28
+ // `std::string`, a Cord can therefore accommodate data that changes over its
29
29
  // lifetime, though it's not quite "mutable"; it can change only in the
30
30
  // attachment, detachment, or rearrangement of chunks of its constituent data.
31
31
  //
@@ -78,7 +78,10 @@
78
78
  #include "absl/functional/function_ref.h"
79
79
  #include "absl/meta/type_traits.h"
80
80
  #include "absl/strings/internal/cord_internal.h"
81
+ #include "absl/strings/internal/cord_rep_ring.h"
82
+ #include "absl/strings/internal/cord_rep_ring_reader.h"
81
83
  #include "absl/strings/internal/resize_uninitialized.h"
84
+ #include "absl/strings/internal/string_constant.h"
82
85
  #include "absl/strings/string_view.h"
83
86
  #include "absl/types/optional.h"
84
87
 
@@ -286,7 +289,7 @@ class Cord {
286
289
  bool StartsWith(const Cord& rhs) const;
287
290
  bool StartsWith(absl::string_view rhs) const;
288
291
 
289
- // Cord::EndsWidth()
292
+ // Cord::EndsWith()
290
293
  //
291
294
  // Determines whether the Cord ends with the passed string data `rhs`.
292
295
  bool EndsWith(absl::string_view rhs) const;
@@ -360,14 +363,38 @@ class Cord {
360
363
  friend class CharIterator;
361
364
 
362
365
  private:
366
+ using CordRep = absl::cord_internal::CordRep;
367
+ using CordRepRing = absl::cord_internal::CordRepRing;
368
+ using CordRepRingReader = absl::cord_internal::CordRepRingReader;
369
+
370
+ // Stack of right children of concat nodes that we have to visit.
371
+ // Keep this at the end of the structure to avoid cache-thrashing.
372
+ // TODO(jgm): Benchmark to see if there's a more optimal value than 47 for
373
+ // the inlined vector size (47 exists for backward compatibility).
374
+ using Stack = absl::InlinedVector<absl::cord_internal::CordRep*, 47>;
375
+
376
+ // Constructs a `begin()` iterator from `tree`. `tree` must not be null.
377
+ explicit ChunkIterator(cord_internal::CordRep* tree);
378
+
363
379
  // Constructs a `begin()` iterator from `cord`.
364
380
  explicit ChunkIterator(const Cord* cord);
365
381
 
382
+ // Initializes this instance from a tree. Invoked by constructors.
383
+ void InitTree(cord_internal::CordRep* tree);
384
+
366
385
  // Removes `n` bytes from `current_chunk_`. Expects `n` to be smaller than
367
386
  // `current_chunk_.size()`.
368
387
  void RemoveChunkPrefix(size_t n);
369
388
  Cord AdvanceAndReadBytes(size_t n);
370
389
  void AdvanceBytes(size_t n);
390
+
391
+ // Stack specific operator++
392
+ ChunkIterator& AdvanceStack();
393
+
394
+ // Ring buffer specific operator++
395
+ ChunkIterator& AdvanceRing();
396
+ void AdvanceBytesRing(size_t n);
397
+
371
398
  // Iterates `n` bytes, where `n` is expected to be greater than or equal to
372
399
  // `current_chunk_.size()`.
373
400
  void AdvanceBytesSlowPath(size_t n);
@@ -381,8 +408,12 @@ class Cord {
381
408
  absl::cord_internal::CordRep* current_leaf_ = nullptr;
382
409
  // The number of bytes left in the `Cord` over which we are iterating.
383
410
  size_t bytes_remaining_ = 0;
384
- absl::InlinedVector<absl::cord_internal::CordRep*, 4>
385
- stack_of_right_children_;
411
+
412
+ // Cord reader for ring buffers. Empty if not traversing a ring buffer.
413
+ CordRepRingReader ring_reader_;
414
+
415
+ // See 'Stack' alias definition.
416
+ Stack stack_of_right_children_;
386
417
  };
387
418
 
388
419
  // Cord::ChunkIterator::chunk_begin()
@@ -624,6 +655,14 @@ class Cord {
624
655
  return c.HashFragmented(std::move(hash_state));
625
656
  }
626
657
 
658
+ // Create a Cord with the contents of StringConstant<T>::value.
659
+ // No allocations will be done and no data will be copied.
660
+ // This is an INTERNAL API and subject to change or removal. This API can only
661
+ // be used by spelling absl::strings_internal::MakeStringConstant, which is
662
+ // also an internal API.
663
+ template <typename T>
664
+ explicit constexpr Cord(strings_internal::StringConstant<T>);
665
+
627
666
  private:
628
667
  friend class CordTestPeer;
629
668
  friend bool operator==(const Cord& lhs, const Cord& rhs);
@@ -644,19 +683,17 @@ class Cord {
644
683
  // InlineRep holds either a tree pointer, or an array of kMaxInline bytes.
645
684
  class InlineRep {
646
685
  public:
647
- static constexpr unsigned char kMaxInline = 15;
686
+ static constexpr unsigned char kMaxInline = cord_internal::kMaxInline;
648
687
  static_assert(kMaxInline >= sizeof(absl::cord_internal::CordRep*), "");
649
- // Tag byte & kMaxInline means we are storing a pointer.
650
- static constexpr unsigned char kTreeFlag = 1 << 4;
651
- // Tag byte & kProfiledFlag means we are profiling the Cord.
652
- static constexpr unsigned char kProfiledFlag = 1 << 5;
653
688
 
654
- constexpr InlineRep() : data_{} {}
689
+ constexpr InlineRep() : data_() {}
655
690
  InlineRep(const InlineRep& src);
656
691
  InlineRep(InlineRep&& src);
657
692
  InlineRep& operator=(const InlineRep& src);
658
693
  InlineRep& operator=(InlineRep&& src) noexcept;
659
694
 
695
+ explicit constexpr InlineRep(cord_internal::InlineData data);
696
+
660
697
  void Swap(InlineRep* rhs);
661
698
  bool empty() const;
662
699
  size_t size() const;
@@ -666,6 +703,7 @@ class Cord {
666
703
  char* set_data(size_t n); // Write data to the result
667
704
  // Returns nullptr if holding bytes
668
705
  absl::cord_internal::CordRep* tree() const;
706
+ absl::cord_internal::CordRep* as_tree() const;
669
707
  // Discards old pointer, if any
670
708
  void set_tree(absl::cord_internal::CordRep* rep);
671
709
  // Replaces a tree with a new root. This is faster than set_tree, but it
@@ -684,16 +722,16 @@ class Cord {
684
722
  void GetAppendRegion(char** region, size_t* size, size_t max_length);
685
723
  void GetAppendRegion(char** region, size_t* size);
686
724
  bool IsSame(const InlineRep& other) const {
687
- return memcmp(data_, other.data_, sizeof(data_)) == 0;
725
+ return memcmp(&data_, &other.data_, sizeof(data_)) == 0;
688
726
  }
689
727
  int BitwiseCompare(const InlineRep& other) const {
690
728
  uint64_t x, y;
691
- // Use memcpy to avoid anti-aliasing issues.
692
- memcpy(&x, data_, sizeof(x));
693
- memcpy(&y, other.data_, sizeof(y));
729
+ // Use memcpy to avoid aliasing issues.
730
+ memcpy(&x, &data_, sizeof(x));
731
+ memcpy(&y, &other.data_, sizeof(y));
694
732
  if (x == y) {
695
- memcpy(&x, data_ + 8, sizeof(x));
696
- memcpy(&y, other.data_ + 8, sizeof(y));
733
+ memcpy(&x, reinterpret_cast<const char*>(&data_) + 8, sizeof(x));
734
+ memcpy(&y, reinterpret_cast<const char*>(&other.data_) + 8, sizeof(y));
697
735
  if (x == y) return 0;
698
736
  }
699
737
  return absl::big_endian::FromHost64(x) < absl::big_endian::FromHost64(y)
@@ -706,16 +744,33 @@ class Cord {
706
744
  // to 15 bytes does not cause a memory allocation.
707
745
  absl::strings_internal::STLStringResizeUninitialized(dst,
708
746
  sizeof(data_) - 1);
709
- memcpy(&(*dst)[0], data_, sizeof(data_) - 1);
747
+ memcpy(&(*dst)[0], &data_, sizeof(data_) - 1);
710
748
  // erase is faster than resize because the logic for memory allocation is
711
749
  // not needed.
712
- dst->erase(data_[kMaxInline]);
750
+ dst->erase(inline_size());
713
751
  }
714
752
 
715
753
  // Copies the inline contents into `dst`. Assumes the cord is not empty.
716
754
  void CopyToArray(char* dst) const;
717
755
 
718
- bool is_tree() const { return data_[kMaxInline] > kMaxInline; }
756
+ bool is_tree() const { return data_.is_tree(); }
757
+
758
+ // Returns true if the Cord is being profiled by cordz.
759
+ bool is_profiled() const { return data_.is_tree() && data_.is_profiled(); }
760
+
761
+ // Returns the profiled CordzInfo, or nullptr if not sampled.
762
+ absl::cord_internal::CordzInfo* cordz_info() const {
763
+ return data_.cordz_info();
764
+ }
765
+
766
+ // Sets the profiled CordzInfo. `cordz_info` must not be null.
767
+ void set_cordz_info(cord_internal::CordzInfo* cordz_info) {
768
+ assert(cordz_info != nullptr);
769
+ data_.set_cordz_info(cordz_info);
770
+ }
771
+
772
+ // Resets the current cordz_info to null / empty.
773
+ void clear_cordz_info() { data_.clear_cordz_info(); }
719
774
 
720
775
  private:
721
776
  friend class Cord;
@@ -724,10 +779,12 @@ class Cord {
724
779
  // Unrefs the tree, stops profiling, and zeroes the contents
725
780
  void ClearSlow();
726
781
 
727
- // If the data has length <= kMaxInline, we store it in data_[0..len-1],
728
- // and store the length in data_[kMaxInline]. Else we store it in a tree
729
- // and store a pointer to that tree in data_[0..sizeof(CordRep*)-1].
730
- alignas(absl::cord_internal::CordRep*) char data_[kMaxInline + 1];
782
+ void ResetToEmpty() { data_ = {}; }
783
+
784
+ void set_inline_size(size_t size) { data_.set_inline_size(size); }
785
+ size_t inline_size() const { return data_.inline_size(); }
786
+
787
+ cord_internal::InlineData data_;
731
788
  };
732
789
  InlineRep contents_;
733
790
 
@@ -878,13 +935,20 @@ Cord MakeCordFromExternal(absl::string_view data, Releaser&& releaser) {
878
935
  return cord;
879
936
  }
880
937
 
881
- inline Cord::InlineRep::InlineRep(const Cord::InlineRep& src) {
882
- cord_internal::SmallMemmove(data_, src.data_, sizeof(data_));
938
+ constexpr Cord::InlineRep::InlineRep(cord_internal::InlineData data)
939
+ : data_(data) {}
940
+
941
+ inline Cord::InlineRep::InlineRep(const Cord::InlineRep& src)
942
+ : data_(src.data_) {
943
+ if (is_tree()) {
944
+ data_.clear_cordz_info();
945
+ absl::cord_internal::CordRep::Ref(as_tree());
946
+ }
883
947
  }
884
948
 
885
949
  inline Cord::InlineRep::InlineRep(Cord::InlineRep&& src) {
886
- memcpy(data_, src.data_, sizeof(data_));
887
- memset(src.data_, 0, sizeof(data_));
950
+ data_ = src.data_;
951
+ src.ResetToEmpty();
888
952
  }
889
953
 
890
954
  inline Cord::InlineRep& Cord::InlineRep::operator=(const Cord::InlineRep& src) {
@@ -892,7 +956,7 @@ inline Cord::InlineRep& Cord::InlineRep::operator=(const Cord::InlineRep& src) {
892
956
  return *this;
893
957
  }
894
958
  if (!is_tree() && !src.is_tree()) {
895
- cord_internal::SmallMemmove(data_, src.data_, sizeof(data_));
959
+ data_ = src.data_;
896
960
  return *this;
897
961
  }
898
962
  AssignSlow(src);
@@ -904,8 +968,8 @@ inline Cord::InlineRep& Cord::InlineRep::operator=(
904
968
  if (is_tree()) {
905
969
  ClearSlow();
906
970
  }
907
- memcpy(data_, src.data_, sizeof(data_));
908
- memset(src.data_, 0, sizeof(data_));
971
+ data_ = src.data_;
972
+ src.ResetToEmpty();
909
973
  return *this;
910
974
  }
911
975
 
@@ -913,44 +977,43 @@ inline void Cord::InlineRep::Swap(Cord::InlineRep* rhs) {
913
977
  if (rhs == this) {
914
978
  return;
915
979
  }
916
-
917
- Cord::InlineRep tmp;
918
- cord_internal::SmallMemmove(tmp.data_, data_, sizeof(data_));
919
- cord_internal::SmallMemmove(data_, rhs->data_, sizeof(data_));
920
- cord_internal::SmallMemmove(rhs->data_, tmp.data_, sizeof(data_));
980
+ std::swap(data_, rhs->data_);
921
981
  }
922
982
 
923
983
  inline const char* Cord::InlineRep::data() const {
924
- return is_tree() ? nullptr : data_;
984
+ return is_tree() ? nullptr : data_.as_chars();
985
+ }
986
+
987
+ inline absl::cord_internal::CordRep* Cord::InlineRep::as_tree() const {
988
+ assert(data_.is_tree());
989
+ return data_.as_tree();
925
990
  }
926
991
 
927
992
  inline absl::cord_internal::CordRep* Cord::InlineRep::tree() const {
928
993
  if (is_tree()) {
929
- absl::cord_internal::CordRep* rep;
930
- memcpy(&rep, data_, sizeof(rep));
931
- return rep;
994
+ return as_tree();
932
995
  } else {
933
996
  return nullptr;
934
997
  }
935
998
  }
936
999
 
937
- inline bool Cord::InlineRep::empty() const { return data_[kMaxInline] == 0; }
1000
+ inline bool Cord::InlineRep::empty() const { return data_.is_empty(); }
938
1001
 
939
1002
  inline size_t Cord::InlineRep::size() const {
940
- const char tag = data_[kMaxInline];
941
- if (tag <= kMaxInline) return tag;
942
- return static_cast<size_t>(tree()->length);
1003
+ return is_tree() ? as_tree()->length : inline_size();
943
1004
  }
944
1005
 
945
1006
  inline void Cord::InlineRep::set_tree(absl::cord_internal::CordRep* rep) {
946
1007
  if (rep == nullptr) {
947
- memset(data_, 0, sizeof(data_));
1008
+ ResetToEmpty();
948
1009
  } else {
949
- bool was_tree = is_tree();
950
- memcpy(data_, &rep, sizeof(rep));
951
- memset(data_ + sizeof(rep), 0, sizeof(data_) - sizeof(rep) - 1);
952
- if (!was_tree) {
953
- data_[kMaxInline] = kTreeFlag;
1010
+ if (data_.is_tree()) {
1011
+ // `data_` already holds a 'tree' value and an optional cordz_info value.
1012
+ // Replace the tree value only, leaving the cordz_info value unchanged.
1013
+ data_.set_tree(rep);
1014
+ } else {
1015
+ // `data_` contains inlined data: initialize data_ to tree value `rep`.
1016
+ data_.make_tree(rep);
954
1017
  }
955
1018
  }
956
1019
  }
@@ -961,34 +1024,41 @@ inline void Cord::InlineRep::replace_tree(absl::cord_internal::CordRep* rep) {
961
1024
  set_tree(rep);
962
1025
  return;
963
1026
  }
964
- memcpy(data_, &rep, sizeof(rep));
965
- memset(data_ + sizeof(rep), 0, sizeof(data_) - sizeof(rep) - 1);
1027
+ data_.set_tree(rep);
966
1028
  }
967
1029
 
968
1030
  inline absl::cord_internal::CordRep* Cord::InlineRep::clear() {
969
- const char tag = data_[kMaxInline];
970
- absl::cord_internal::CordRep* result = nullptr;
971
- if (tag > kMaxInline) {
972
- memcpy(&result, data_, sizeof(result));
973
- }
974
- memset(data_, 0, sizeof(data_)); // Clear the cord
1031
+ absl::cord_internal::CordRep* result = tree();
1032
+ ResetToEmpty();
975
1033
  return result;
976
1034
  }
977
1035
 
978
1036
  inline void Cord::InlineRep::CopyToArray(char* dst) const {
979
1037
  assert(!is_tree());
980
- size_t n = data_[kMaxInline];
1038
+ size_t n = inline_size();
981
1039
  assert(n != 0);
982
- cord_internal::SmallMemmove(dst, data_, n);
1040
+ cord_internal::SmallMemmove(dst, data_.as_chars(), n);
983
1041
  }
984
1042
 
985
1043
  constexpr inline Cord::Cord() noexcept {}
986
1044
 
1045
+ template <typename T>
1046
+ constexpr Cord::Cord(strings_internal::StringConstant<T>)
1047
+ : contents_(strings_internal::StringConstant<T>::value.size() <=
1048
+ cord_internal::kMaxInline
1049
+ ? cord_internal::InlineData(
1050
+ strings_internal::StringConstant<T>::value)
1051
+ : cord_internal::InlineData(
1052
+ &cord_internal::ConstInitExternalStorage<
1053
+ strings_internal::StringConstant<T>>::value)) {}
1054
+
987
1055
  inline Cord& Cord::operator=(const Cord& x) {
988
1056
  contents_ = x.contents_;
989
1057
  return *this;
990
1058
  }
991
1059
 
1060
+ inline Cord::Cord(const Cord& src) : contents_(src.contents_) {}
1061
+
992
1062
  inline Cord::Cord(Cord&& src) noexcept : contents_(std::move(src.contents_)) {}
993
1063
 
994
1064
  inline void Cord::swap(Cord& other) noexcept {
@@ -1072,17 +1142,64 @@ inline bool Cord::StartsWith(absl::string_view rhs) const {
1072
1142
  return EqualsImpl(rhs, rhs_size);
1073
1143
  }
1074
1144
 
1145
+ inline void Cord::ChunkIterator::InitTree(cord_internal::CordRep* tree) {
1146
+ if (tree->tag == cord_internal::RING) {
1147
+ current_chunk_ = ring_reader_.Reset(tree->ring());
1148
+ return;
1149
+ }
1150
+
1151
+ stack_of_right_children_.push_back(tree);
1152
+ operator++();
1153
+ }
1154
+
1155
+ inline Cord::ChunkIterator::ChunkIterator(cord_internal::CordRep* tree)
1156
+ : bytes_remaining_(tree->length) {
1157
+ InitTree(tree);
1158
+ }
1159
+
1075
1160
  inline Cord::ChunkIterator::ChunkIterator(const Cord* cord)
1076
1161
  : bytes_remaining_(cord->size()) {
1077
- if (cord->empty()) return;
1078
1162
  if (cord->contents_.is_tree()) {
1079
- stack_of_right_children_.push_back(cord->contents_.tree());
1080
- operator++();
1163
+ InitTree(cord->contents_.as_tree());
1081
1164
  } else {
1082
- current_chunk_ = absl::string_view(cord->contents_.data(), cord->size());
1165
+ current_chunk_ =
1166
+ absl::string_view(cord->contents_.data(), bytes_remaining_);
1083
1167
  }
1084
1168
  }
1085
1169
 
1170
+ inline Cord::ChunkIterator& Cord::ChunkIterator::AdvanceRing() {
1171
+ current_chunk_ = ring_reader_.Next();
1172
+ return *this;
1173
+ }
1174
+
1175
+ inline void Cord::ChunkIterator::AdvanceBytesRing(size_t n) {
1176
+ assert(n >= current_chunk_.size());
1177
+ bytes_remaining_ -= n;
1178
+ if (bytes_remaining_) {
1179
+ if (n == current_chunk_.size()) {
1180
+ current_chunk_ = ring_reader_.Next();
1181
+ } else {
1182
+ size_t offset = ring_reader_.length() - bytes_remaining_;
1183
+ current_chunk_ = ring_reader_.Seek(offset);
1184
+ }
1185
+ } else {
1186
+ current_chunk_ = {};
1187
+ }
1188
+ }
1189
+
1190
+ inline Cord::ChunkIterator& Cord::ChunkIterator::operator++() {
1191
+ ABSL_HARDENING_ASSERT(bytes_remaining_ > 0 &&
1192
+ "Attempted to iterate past `end()`");
1193
+ assert(bytes_remaining_ >= current_chunk_.size());
1194
+ bytes_remaining_ -= current_chunk_.size();
1195
+ if (bytes_remaining_ > 0) {
1196
+ return ring_reader_ ? AdvanceRing() : AdvanceStack();
1197
+ } else {
1198
+ current_chunk_ = {};
1199
+ }
1200
+ return *this;
1201
+ }
1202
+
1086
1203
  inline Cord::ChunkIterator Cord::ChunkIterator::operator++(int) {
1087
1204
  ChunkIterator tmp(*this);
1088
1205
  operator++();
@@ -1114,10 +1231,11 @@ inline void Cord::ChunkIterator::RemoveChunkPrefix(size_t n) {
1114
1231
  }
1115
1232
 
1116
1233
  inline void Cord::ChunkIterator::AdvanceBytes(size_t n) {
1234
+ assert(bytes_remaining_ >= n);
1117
1235
  if (ABSL_PREDICT_TRUE(n < current_chunk_.size())) {
1118
1236
  RemoveChunkPrefix(n);
1119
1237
  } else if (n != 0) {
1120
- AdvanceBytesSlowPath(n);
1238
+ ring_reader_ ? AdvanceBytesRing(n) : AdvanceBytesSlowPath(n);
1121
1239
  }
1122
1240
  }
1123
1241
 
@@ -137,7 +137,7 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
137
137
  // Copy the escape sequence for the null character
138
138
  const ptrdiff_t octal_size = p + 1 - octal_start;
139
139
  *d++ = '\\';
140
- memcpy(d, octal_start, octal_size);
140
+ memmove(d, octal_start, octal_size);
141
141
  d += octal_size;
142
142
  break;
143
143
  }
@@ -170,7 +170,7 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
170
170
  // Copy the escape sequence for the null character
171
171
  const ptrdiff_t hex_size = p + 1 - hex_start;
172
172
  *d++ = '\\';
173
- memcpy(d, hex_start, hex_size);
173
+ memmove(d, hex_start, hex_size);
174
174
  d += hex_size;
175
175
  break;
176
176
  }
@@ -203,7 +203,7 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
203
203
  if ((rune == 0) && leave_nulls_escaped) {
204
204
  // Copy the escape sequence for the null character
205
205
  *d++ = '\\';
206
- memcpy(d, hex_start, 5); // u0000
206
+ memmove(d, hex_start, 5); // u0000
207
207
  d += 5;
208
208
  break;
209
209
  }
@@ -251,7 +251,7 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
251
251
  if ((rune == 0) && leave_nulls_escaped) {
252
252
  // Copy the escape sequence for the null character
253
253
  *d++ = '\\';
254
- memcpy(d, hex_start, 9); // U00000000
254
+ memmove(d, hex_start, 9); // U00000000
255
255
  d += 9;
256
256
  break;
257
257
  }