grpc 1.74.1 → 1.75.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -14,174 +14,206 @@
14
14
 
15
15
  #include "src/core/util/latent_see.h"
16
16
 
17
- #ifdef GRPC_ENABLE_LATENT_SEE
18
17
  #include <atomic>
19
- #include <chrono>
20
18
  #include <cstdint>
21
- #include <optional>
19
+ #include <memory>
22
20
  #include <string>
23
21
  #include <vector>
24
22
 
23
+ #include "absl/log/log.h"
25
24
  #include "absl/strings/str_cat.h"
26
- #include "absl/strings/str_format.h"
27
- #include "absl/strings/string_view.h"
28
- #include "src/core/util/ring_buffer.h"
25
+ #include "src/core/util/backoff.h"
26
+ #include "src/core/util/notification.h"
29
27
  #include "src/core/util/sync.h"
30
28
 
29
+ namespace grpc_core::latent_see {
30
+
31
+ thread_local std::unique_ptr<Bin> Appender::bin_;
32
+ std::atomic<Sink*> Appender::active_sink_;
33
+
34
+ std::string JsonOutput::MicrosString(int64_t nanos) {
35
+ CHECK_GE(nanos, 0);
36
+ const auto micros = nanos / 1000;
37
+ const auto remainder = nanos % 1000;
38
+ return absl::StrFormat("%d.%03d", micros, remainder);
39
+ }
40
+
41
+ void JsonOutput::Mark(absl::string_view name, int64_t tid, int64_t timestamp) {
42
+ out_ << absl::StrCat(sep_, "{\"name\":\"", name,
43
+ "\",\"ph\":\"i\",\"ts\":", MicrosString(timestamp),
44
+ ",\"pid\":0,\"tid\":", tid, "}");
45
+ sep_ = ",\n";
46
+ }
47
+
48
+ void JsonOutput::FlowBegin(absl::string_view name, int64_t tid,
49
+ int64_t timestamp, int64_t flow_id) {
50
+ out_ << absl::StrCat(sep_, "{\"name\":\"", name,
51
+ "\",\"ph\":\"s\",\"ts\":", MicrosString(timestamp),
52
+ ",\"pid\":0,\"tid\":", tid, ",\"id\":", flow_id, "}");
53
+ sep_ = ",\n";
54
+ }
55
+
56
+ void JsonOutput::FlowEnd(absl::string_view name, int64_t tid, int64_t timestamp,
57
+ int64_t flow_id) {
58
+ out_ << absl::StrCat(sep_, "{\"name\":\"", name,
59
+ "\",\"ph\":\"f\",\"ts\":", MicrosString(timestamp),
60
+ ",\"pid\":0,\"tid\":", tid, ",\"id\":", flow_id, "}");
61
+ sep_ = ",\n";
62
+ }
63
+
64
+ void JsonOutput::Span(absl::string_view name, int64_t tid,
65
+ int64_t timestamp_begin, int64_t duration) {
66
+ out_ << absl::StrCat(sep_, "{\"name\":\"", name,
67
+ "\",\"ph\":\"X\",\"ts\":", MicrosString(timestamp_begin),
68
+ ",\"pid\":0,\"tid\":", tid,
69
+ ",\"dur\":", MicrosString(duration), "}");
70
+ sep_ = ",\n";
71
+ }
72
+
73
+ void JsonOutput::Finish() { out_ << "\n]"; }
74
+ } // namespace grpc_core::latent_see
75
+
76
+ #ifndef GRPC_DISABLE_LATENT_SEE
77
+
31
78
  namespace grpc_core {
32
79
  namespace latent_see {
33
80
 
34
- thread_local uint64_t Log::thread_id_ = Log::Get().next_thread_id_.fetch_add(1);
35
- thread_local Bin* Log::bin_ = nullptr;
36
- thread_local void* Log::bin_owner_ = nullptr;
37
- std::atomic<uint64_t> Flow::next_flow_id_{1};
38
- std::atomic<uintptr_t> Log::free_bins_{0};
39
- const std::chrono::steady_clock::time_point start_time =
40
- std::chrono::steady_clock::now();
41
-
42
- void Log::InstallAtExitHandler() {
43
- atexit([] {
44
- auto& log = Log::Get();
45
- auto json = log.TryGenerateJson();
46
- if (!json.has_value()) {
47
- LOG(INFO) << "Failed to generate latent_see.json (contention with "
48
- "another writer)";
49
- return;
50
- }
51
- if (log.stats_flusher_ != nullptr) {
52
- log.stats_flusher_(*json);
53
- return;
54
- }
55
- LOG(INFO) << "Writing latent_see.json in " << get_current_dir_name();
56
- FILE* f = fopen("latent_see.json", "w");
57
- if (f == nullptr) return;
58
- fprintf(f, "%s", json->c_str());
59
- fclose(f);
60
- });
81
+ namespace {
82
+ const Duration kMaxBackoff = Duration::Milliseconds(300);
83
+ }
84
+
85
+ void Appender::Enable(Sink* sink) {
86
+ active_sink_.store(sink, std::memory_order_release);
61
87
  }
62
88
 
63
- void Log::TryPullEventsAndFlush(
64
- absl::FunctionRef<void(absl::Span<const RecordedEvent>)> callback) {
65
- // Try to lock... if we fail then clear the active events.
66
- // This guarantees freeing up memory even if we're still serializing the
67
- // previous pull.
68
- if (!mu_flushing_.TryLock()) {
69
- for (auto& fragment : fragments_) {
70
- MutexLock lock(&fragment.mu_active);
71
- fragment.active.clear();
89
+ void Appender::Disable() {
90
+ active_sink_.store(nullptr, std::memory_order_relaxed);
91
+ }
92
+
93
+ Sink::Sink() : gatherer_("grpc_latent_see_gatherer", [this]() { Gather(); }) {
94
+ gatherer_.Start();
95
+ }
96
+
97
+ void Sink::Append(std::unique_ptr<Bin> bin) { appending_.Push(bin.release()); }
98
+
99
+ void Sink::Gather() {
100
+ BackOff backoff(BackOff::Options()
101
+ .set_initial_backoff(Duration::Milliseconds(1))
102
+ .set_multiplier(1.1)
103
+ .set_jitter(0.05)
104
+ .set_max_backoff(kMaxBackoff));
105
+ while (true) {
106
+ std::unique_ptr<Bin> bin(static_cast<Bin*>(appending_.Pop()));
107
+ if (bin == nullptr) {
108
+ absl::SleepFor(absl::Milliseconds(backoff.NextAttemptDelay().millis()));
109
+ continue;
72
110
  }
73
- return;
74
- }
75
- // Now we hold the lock; swap all active fragments to flushing.
76
- // This is relatively quick and ensures that we don't stall capture for
77
- // long.
78
- for (auto& fragment : fragments_) {
79
- CHECK_EQ(fragment.flushing.size(), 0);
80
- MutexLock lock(&fragment.mu_active);
81
- fragment.flushing.swap(fragment.active);
111
+ backoff.Reset();
112
+ Record(std::move(bin));
82
113
  }
83
- // Now we've swapped out, call the callback repeatedly with each fragment.
84
- // This is the slow part - there's a lot of copying and transformation that
85
- // happens here.
86
- // We keep the mu_flushing_ held so that we can guarantee only one thread is
87
- // consumed by this at a time.
88
- // Once we've called the callback for each fragment we can clear it, so that
89
- // when we next swap it with the active fragment it will be empty.
90
- // This also retains the memory, so if we're serializing with a regular
91
- // cadence we'll tend to stabilize memory usage for latent_see relatively
92
- // quickly.
93
- for (auto& fragment : fragments_) {
94
- callback(fragment.flushing);
95
- fragment.flushing.clear();
96
- }
97
- mu_flushing_.Unlock();
98
114
  }
99
115
 
100
- std::optional<std::string> Log::TryGenerateJson() {
101
- using Nanos = std::chrono::duration<unsigned long long, std::nano>;
102
- std::string json = "[\n";
103
- bool first = true;
104
- int callbacks = 0;
105
- TryPullEventsAndFlush([&](absl::Span<const RecordedEvent> events) {
106
- ++callbacks;
107
- for (const auto& event : events) {
108
- absl::string_view phase;
109
- bool has_id;
110
- switch (event.event.type) {
111
- case EventType::kBegin:
112
- phase = "B";
113
- has_id = false;
114
- break;
115
- case EventType::kEnd:
116
- phase = "E";
117
- has_id = false;
118
- break;
119
- case EventType::kFlowStart:
120
- phase = "s";
121
- has_id = true;
122
- break;
123
- case EventType::kFlowEnd:
124
- phase = "f";
125
- has_id = true;
126
- break;
127
- case EventType::kMark:
128
- phase = "i";
129
- has_id = false;
130
- break;
131
- }
132
- if (!first) {
133
- absl::StrAppend(&json, ",\n");
134
- }
135
- first = false;
136
- if (event.event.metadata->name[0] != '"') {
137
- absl::StrAppend(
138
- &json, "{\"name\": \"", event.event.metadata->name,
139
- "\", \"ph\": \"", phase, "\", \"ts\": ",
140
- absl::StrFormat(
141
- "%.12g",
142
- Nanos(event.event.timestamp - start_time).count() / 1000.0),
143
- ", \"pid\": 0, \"tid\": ", event.thread_id);
144
- } else {
145
- absl::StrAppend(
146
- &json, "{\"name\": ", event.event.metadata->name, ", \"ph\": \"",
147
- phase, "\", \"ts\": ",
148
- absl::StrFormat(
149
- "%.12g",
150
- Nanos(event.event.timestamp - start_time).count() / 1000.0),
151
- ", \"pid\": 0, \"tid\": ", event.thread_id);
152
- }
116
+ void Sink::Start(size_t max_bins) {
117
+ auto events = std::make_unique<EventDump>();
118
+ MutexLock lock(&mu_);
119
+ max_bins_ = max_bins;
120
+ events_ = std::move(events);
121
+ }
153
122
 
154
- if (has_id) {
155
- absl::StrAppend(&json, ", \"id\": ", event.event.id);
156
- }
157
- if (event.event.type == EventType::kFlowEnd) {
158
- absl::StrAppend(&json, ", \"bp\": \"e\"");
159
- }
160
- absl::StrAppend(&json, ", \"args\": {\"file\": \"",
161
- event.event.metadata->file,
162
- "\", \"line\": ", event.event.metadata->line,
163
- ", \"batch\": ", event.batch_id, "}}");
164
- }
165
- });
166
- if (callbacks == 0) return std::nullopt;
167
- absl::StrAppend(&json, "\n]");
168
- return json;
123
+ std::unique_ptr<Sink::EventDump> Sink::Stop() {
124
+ MutexLock lock(&mu_);
125
+ auto events = std::move(events_);
126
+ events_ = nullptr;
127
+ return events;
128
+ }
129
+
130
+ void Sink::Record(std::unique_ptr<Bin> bin) {
131
+ MutexLock lock(&mu_);
132
+ if (events_ == nullptr) return;
133
+ CHECK_LE(bin->num_events, Bin::kEventsPerBin);
134
+ events_->emplace_back(std::move(bin));
135
+ if (events_->size() > max_bins_) events_->pop_front();
169
136
  }
170
137
 
171
- void Log::FlushBin(Bin* bin) {
172
- if (bin->events.empty()) return;
173
- auto& log = Get();
174
- const auto batch_id =
175
- log.next_batch_id_.fetch_add(1, std::memory_order_relaxed);
176
- auto& fragment = log.fragments_.this_cpu();
177
- const auto thread_id = thread_id_;
178
- {
179
- MutexLock lock(&fragment.mu_active);
180
- for (auto event : bin->events) {
181
- fragment.active.push_back(RecordedEvent{thread_id, batch_id, event});
138
+ void Collect(Notification* n, absl::Duration timeout, size_t memory_limit,
139
+ Output* output) {
140
+ static Sink* sink = new Sink;
141
+ static Mutex* mu = new Mutex;
142
+
143
+ // Collection phase - under a mutex to prevent multiple collections at once.
144
+ mu->Lock();
145
+ // First we enable the appender and then wait for a short time to clear out
146
+ // any backoff
147
+ LOG(INFO) << "Latent-see collection enabling";
148
+ Appender::Enable(sink);
149
+ absl::SleepFor(2 * absl::Milliseconds(kMaxBackoff.millis()));
150
+ // Now we start the collection
151
+ LOG(INFO) << "Latent-see collection recording";
152
+ sink->Start(memory_limit / sizeof(Bin) + 1);
153
+ // If we got a Notification object, use that to sleep until we're notified;
154
+ // if not just sleep.
155
+ if (n == nullptr) {
156
+ absl::SleepFor(timeout);
157
+ } else {
158
+ n->WaitForNotificationWithTimeout(timeout);
159
+ }
160
+ // Grab all events
161
+ LOG(INFO) << "Latent-see collection stopping";
162
+ auto events = sink->Stop();
163
+ // Disable the sink
164
+ Appender::Disable();
165
+ mu->Unlock();
166
+ CHECK(events != nullptr);
167
+ LOG(INFO) << "Latent-see collection stopped: processing " << events->size()
168
+ << " bins";
169
+
170
+ // Next: find the earliest timestamp
171
+ // We save a lot of bytes by subtracting that out
172
+ int64_t earliest_timestamp = std::numeric_limits<int64_t>::max();
173
+ for (const auto& bin : *events) {
174
+ for (const auto& event : *bin) {
175
+ // Exclude negative timestamps as they're used for event type markers
176
+ if (event.timestamp_begin > 0) {
177
+ earliest_timestamp = std::min(
178
+ {earliest_timestamp, event.timestamp_begin, event.timestamp_end});
179
+ } else {
180
+ earliest_timestamp = std::min(earliest_timestamp, -event.timestamp_end);
181
+ }
182
+ }
183
+ }
184
+ std::string json = "[\n";
185
+ // TODO(ctiller): Fuschia Trace Format backend
186
+ absl::flat_hash_map<gpr_thd_id, size_t> thread_id_map;
187
+ for (const auto& bin : *events) {
188
+ size_t displayed_thread_id;
189
+ auto it = thread_id_map.find(bin->thd_id);
190
+ if (it == thread_id_map.end()) {
191
+ displayed_thread_id = thread_id_map.size() + 1;
192
+ thread_id_map[bin->thd_id] = displayed_thread_id;
193
+ } else {
194
+ displayed_thread_id = it->second;
195
+ }
196
+ for (const auto& event : *bin) {
197
+ if (event.timestamp_begin == event.timestamp_end) {
198
+ output->Mark(event.metadata->name, displayed_thread_id,
199
+ event.timestamp_begin - earliest_timestamp);
200
+ } else if (event.timestamp_begin < 0 && event.timestamp_end > 0) {
201
+ output->FlowBegin(event.metadata->name, displayed_thread_id,
202
+ event.timestamp_end - earliest_timestamp,
203
+ -event.timestamp_begin);
204
+ } else if (event.timestamp_begin < 0) {
205
+ output->FlowEnd(event.metadata->name, displayed_thread_id,
206
+ -event.timestamp_end - earliest_timestamp,
207
+ -event.timestamp_begin);
208
+ } else {
209
+ output->Span(event.metadata->name, displayed_thread_id,
210
+ event.timestamp_begin - earliest_timestamp,
211
+ event.timestamp_end - event.timestamp_begin);
212
+ }
182
213
  }
183
214
  }
184
- bin->events.clear();
215
+ output->Finish();
216
+ LOG(INFO) << "Latent-see collection complete";
185
217
  }
186
218
 
187
219
  } // namespace latent_see