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
@@ -34,6 +34,28 @@ ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status) {
34
34
  return hdl;
35
35
  }
36
36
 
37
+ absl::Status ServerMetadataToStatus(ServerMetadata& md) {
38
+ const auto grpc_status =
39
+ md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
40
+ const auto* error_slice = md.get_pointer(GrpcMessageMetadata());
41
+ return grpc_error_set_int(
42
+ absl::Status(static_cast<absl::StatusCode>(grpc_status),
43
+ error_slice->as_string_view()),
44
+ StatusIntProperty::kRpcStatus, grpc_status);
45
+ }
46
+
47
+ void SetServerMetadataFromStatus(ServerMetadata& md,
48
+ const absl::Status& status) {
49
+ grpc_status_code code;
50
+ std::string message;
51
+ grpc_error_get_status(status, Timestamp::InfFuture(), &code, &message,
52
+ nullptr, nullptr);
53
+ md.Set(GrpcStatusMetadata(), code);
54
+ if (!status.ok()) {
55
+ md.Set(GrpcMessageMetadata(), Slice::FromCopiedString(message));
56
+ }
57
+ }
58
+
37
59
  ServerMetadataHandle CancelledServerMetadataFromStatus(
38
60
  const absl::Status& status) {
39
61
  auto hdl = ServerMetadataFromStatus(status);
@@ -32,6 +32,14 @@ using ServerMetadataHandle = Arena::PoolPtr<ServerMetadata>;
32
32
  using ClientMetadata = grpc_metadata_batch;
33
33
  using ClientMetadataHandle = Arena::PoolPtr<ClientMetadata>;
34
34
 
35
+ // Convert absl::Status to ServerMetadata
36
+ ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status);
37
+
38
+ absl::Status ServerMetadataToStatus(ServerMetadata& md);
39
+
40
+ void SetServerMetadataFromStatus(ServerMetadata& md,
41
+ const absl::Status& status);
42
+
35
43
  template <typename T>
36
44
  class ServerMetadataOrHandle {
37
45
  public:
@@ -95,6 +103,22 @@ struct FailureStatusCastImpl<ServerMetadataOrHandle<T>, ServerMetadataHandle&> {
95
103
  }
96
104
  };
97
105
 
106
+ template <>
107
+ struct FailureStatusCastImpl<ServerMetadataOrHandle<ServerMetadata>,
108
+ const absl::Status&> {
109
+ static ServerMetadataOrHandle<ServerMetadata> Cast(const absl::Status& t) {
110
+ return ServerMetadataOrHandle<ServerMetadata>::Failure(
111
+ ServerMetadataFromStatus(t));
112
+ }
113
+ };
114
+
115
+ template <>
116
+ struct FailureStatusCastImpl<absl::Status, ServerMetadataHandle&> {
117
+ static absl::Status Cast(ServerMetadataHandle& t) {
118
+ return ServerMetadataToStatus(*t);
119
+ }
120
+ };
121
+
98
122
  template <>
99
123
  struct FailureStatusCastImpl<ServerMetadataHandle, ServerMetadataHandle&> {
100
124
  static ServerMetadataHandle Cast(ServerMetadataHandle& t) {
@@ -156,8 +180,6 @@ inline bool IsStatusOk(const ServerMetadataHandle& m) {
156
180
  GRPC_STATUS_OK;
157
181
  }
158
182
 
159
- // Convert absl::Status to ServerMetadata
160
- ServerMetadataHandle ServerMetadataFromStatus(const absl::Status& status);
161
183
  // Convert absl::Status to ServerMetadata, and set GrpcCallWasCancelled() to
162
184
  // true
163
185
  ServerMetadataHandle CancelledServerMetadataFromStatus(
@@ -206,6 +206,8 @@ void BaseNode::SerializeEntity(grpc_channelz_v2_Entity* entity,
206
206
  data_source->AddData(make_data_sink());
207
207
  }
208
208
  }
209
+ make_data_sink().AddData("v1_compatibility",
210
+ PropertyList().Set("name", name()));
209
211
  bool completed =
210
212
  done->WaitForNotificationWithTimeout(absl::Milliseconds(100));
211
213
  sink_impl->Finalize(!completed, entity, arena);
@@ -442,7 +444,7 @@ void ChannelNode::AddNodeSpecificData(DataSink sink) {
442
444
  .Set("target", target_)
443
445
  .Set("connectivity_state", connectivity_state()));
444
446
  sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
445
- sink.AddData("channel_args", channel_args_.ToPropertyList());
447
+ sink.AddData("channel_args", channel_args().ToPropertyList());
446
448
  }
447
449
 
448
450
  void ChannelNode::PopulateChildRefs(Json::Object* json) {
@@ -491,12 +493,6 @@ void SubchannelNode::UpdateConnectivityState(grpc_connectivity_state state) {
491
493
  connectivity_state_.store(state, std::memory_order_relaxed);
492
494
  }
493
495
 
494
- void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) {
495
- MutexLock lock(&socket_mu_);
496
- child_socket_ =
497
- socket == nullptr ? nullptr : socket->WeakRefAsSubclass<SocketNode>();
498
- }
499
-
500
496
  std::string SubchannelNode::connectivity_state() const {
501
497
  grpc_connectivity_state state =
502
498
  connectivity_state_.load(std::memory_order_relaxed);
@@ -526,16 +522,13 @@ Json SubchannelNode::RenderJson() {
526
522
  {"data", Json::FromObject(std::move(data))},
527
523
  };
528
524
  // Populate the child socket.
529
- WeakRefCountedPtr<SocketNode> child_socket;
530
- {
531
- MutexLock lock(&socket_mu_);
532
- child_socket = child_socket_;
533
- }
534
- if (child_socket != nullptr && child_socket->uuid() != 0) {
525
+ auto [children, _] = ChannelzRegistry::GetChildrenOfType(
526
+ 0, this, BaseNode::EntityType::kSocket, 1);
527
+ if (!children.empty()) {
535
528
  object["socketRef"] = Json::FromArray({
536
529
  Json::FromObject({
537
- {"socketId", Json::FromString(absl::StrCat(child_socket->uuid()))},
538
- {"name", Json::FromString(child_socket->name())},
530
+ {"socketId", Json::FromString(absl::StrCat(children[0]->uuid()))},
531
+ {"name", Json::FromString(children[0]->name())},
539
532
  }),
540
533
  });
541
534
  }
@@ -548,7 +541,7 @@ void SubchannelNode::AddNodeSpecificData(DataSink sink) {
548
541
  .Set("target", target_)
549
542
  .Set("connectivity_state", connectivity_state()));
550
543
  sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
551
- sink.AddData("channel_args", channel_args_.ToPropertyList());
544
+ sink.AddData("channel_args", channel_args().ToPropertyList());
552
545
  }
553
546
 
554
547
  //
@@ -620,7 +613,7 @@ Json ServerNode::RenderJson() {
620
613
 
621
614
  void ServerNode::AddNodeSpecificData(DataSink sink) {
622
615
  sink.AddData("call_counts", call_counter_.GetCallCounts().ToPropertyList());
623
- sink.AddData("channel_args", channel_args_.ToPropertyList());
616
+ sink.AddData("channel_args", channel_args().ToPropertyList());
624
617
  }
625
618
 
626
619
  std::map<intptr_t, WeakRefCountedPtr<ListenSocketNode>>
@@ -105,6 +105,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
105
105
  kListenSocket,
106
106
  kSocket,
107
107
  kCall,
108
+ kResourceQuota,
108
109
  };
109
110
 
110
111
  static absl::string_view EntityTypeString(EntityType type) {
@@ -123,6 +124,8 @@ class BaseNode : public DualRefCounted<BaseNode> {
123
124
  return "socket";
124
125
  case EntityType::kCall:
125
126
  return "call";
127
+ case EntityType::kResourceQuota:
128
+ return "resource_quota";
126
129
  }
127
130
  return "unknown";
128
131
  }
@@ -143,6 +146,8 @@ class BaseNode : public DualRefCounted<BaseNode> {
143
146
  return "socket";
144
147
  case EntityType::kCall:
145
148
  return "call";
149
+ case EntityType::kResourceQuota:
150
+ return "resource_quota";
146
151
  }
147
152
  }
148
153
 
@@ -154,6 +159,7 @@ class BaseNode : public DualRefCounted<BaseNode> {
154
159
  if (kind == "listen_socket") return EntityType::kListenSocket;
155
160
  if (kind == "socket") return EntityType::kSocket;
156
161
  if (kind == "call") return EntityType::kCall;
162
+ if (kind == "resource_quota") return EntityType::kResourceQuota;
157
163
  return std::nullopt;
158
164
  }
159
165
 
@@ -371,6 +377,7 @@ class DataSource {
371
377
  protected:
372
378
  ~DataSource();
373
379
  RefCountedPtr<BaseNode> channelz_node() { return node_; }
380
+ const BaseNode* channelz_node() const { return node_.get(); }
374
381
 
375
382
  // This method must be called in the most derived class's constructor.
376
383
  // It adds this data source to the node's list of data sources.
@@ -462,7 +469,11 @@ class ChannelNode final : public BaseNode {
462
469
  bool is_internal_channel);
463
470
 
464
471
  void Orphaned() override {
465
- channel_args_ = ChannelArgs();
472
+ ChannelArgs to_destroy;
473
+ {
474
+ MutexLock lock(&channel_args_mu_);
475
+ std::swap(channel_args_, to_destroy);
476
+ }
466
477
  BaseNode::Orphaned();
467
478
  }
468
479
 
@@ -481,6 +492,9 @@ class ChannelNode final : public BaseNode {
481
492
 
482
493
  // proxy methods to composed classes.
483
494
  void SetChannelArgs(const ChannelArgs& channel_args) {
495
+ ChannelArgs to_destroy;
496
+ MutexLock lock(&channel_args_mu_);
497
+ std::swap(channel_args_, to_destroy);
484
498
  channel_args_ = channel_args;
485
499
  }
486
500
  void RecordCallStarted() { call_counter_.RecordCallStarted(); }
@@ -494,7 +508,10 @@ class ChannelNode final : public BaseNode {
494
508
  CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
495
509
  std::set<intptr_t> child_channels() const;
496
510
  std::set<intptr_t> child_subchannels() const;
497
- const ChannelArgs& channel_args() const { return channel_args_; }
511
+ ChannelArgs channel_args() const {
512
+ MutexLock lock(&channel_args_mu_);
513
+ return channel_args_;
514
+ }
498
515
 
499
516
  private:
500
517
  void PopulateChildRefs(Json::Object* json);
@@ -504,7 +521,8 @@ class ChannelNode final : public BaseNode {
504
521
  CallCountingHelper call_counter_;
505
522
  // TODO(ctiller): keeping channel args here can create odd circular references
506
523
  // that are hard to reason about. Consider moving this to a DataSource.
507
- ChannelArgs channel_args_;
524
+ mutable Mutex channel_args_mu_;
525
+ ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
508
526
 
509
527
  // Least significant bit indicates whether the value is set. Remaining
510
528
  // bits are a grpc_connectivity_state value.
@@ -518,22 +536,24 @@ class SubchannelNode final : public BaseNode {
518
536
  ~SubchannelNode() override;
519
537
 
520
538
  void Orphaned() override {
521
- channel_args_ = ChannelArgs();
539
+ ChannelArgs to_destroy;
540
+ {
541
+ MutexLock lock(&channel_args_mu_);
542
+ std::swap(channel_args_, to_destroy);
543
+ }
522
544
  BaseNode::Orphaned();
523
545
  }
524
546
 
525
547
  // Sets the subchannel's connectivity state without health checking.
526
548
  void UpdateConnectivityState(grpc_connectivity_state state);
527
549
 
528
- // Used when the subchannel's child socket changes. This should be set when
529
- // the subchannel's transport is created and set to nullptr when the
530
- // subchannel unrefs the transport.
531
- void SetChildSocket(RefCountedPtr<SocketNode> socket);
532
-
533
550
  Json RenderJson() override;
534
551
 
535
552
  // proxy methods to composed classes.
536
553
  void SetChannelArgs(const ChannelArgs& channel_args) {
554
+ ChannelArgs to_destroy;
555
+ MutexLock lock(&channel_args_mu_);
556
+ std::swap(channel_args_, to_destroy);
537
557
  channel_args_ = channel_args;
538
558
  }
539
559
  void RecordCallStarted() { call_counter_.RecordCallStarted(); }
@@ -543,11 +563,10 @@ class SubchannelNode final : public BaseNode {
543
563
  const std::string& target() const { return target_; }
544
564
  std::string connectivity_state() const;
545
565
  CallCounts GetCallCounts() const { return call_counter_.GetCallCounts(); }
546
- WeakRefCountedPtr<SocketNode> child_socket() const {
547
- MutexLock lock(&socket_mu_);
548
- return child_socket_;
566
+ ChannelArgs channel_args() const {
567
+ MutexLock lock(&channel_args_mu_);
568
+ return channel_args_;
549
569
  }
550
- const ChannelArgs& channel_args() const { return channel_args_; }
551
570
 
552
571
  private:
553
572
  void AddNodeSpecificData(DataSink sink) override;
@@ -556,13 +575,12 @@ class SubchannelNode final : public BaseNode {
556
575
  friend class testing::SubchannelNodePeer;
557
576
 
558
577
  std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
559
- mutable Mutex socket_mu_;
560
- WeakRefCountedPtr<SocketNode> child_socket_ ABSL_GUARDED_BY(socket_mu_);
561
578
  std::string target_;
562
579
  CallCountingHelper call_counter_;
563
580
  // TODO(ctiller): keeping channel args here can create odd circular references
564
581
  // that are hard to reason about. Consider moving this to a DataSource.
565
- ChannelArgs channel_args_;
582
+ mutable Mutex channel_args_mu_;
583
+ ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
566
584
  };
567
585
 
568
586
  // Handles channelz bookkeeping for servers
@@ -573,7 +591,11 @@ class ServerNode final : public BaseNode {
573
591
  ~ServerNode() override;
574
592
 
575
593
  void Orphaned() override {
576
- channel_args_ = ChannelArgs();
594
+ ChannelArgs to_destroy;
595
+ {
596
+ MutexLock lock(&channel_args_mu_);
597
+ std::swap(channel_args_, to_destroy);
598
+ }
577
599
  BaseNode::Orphaned();
578
600
  }
579
601
 
@@ -584,6 +606,9 @@ class ServerNode final : public BaseNode {
584
606
 
585
607
  // proxy methods to composed classes.
586
608
  void SetChannelArgs(const ChannelArgs& channel_args) {
609
+ ChannelArgs to_destroy;
610
+ MutexLock lock(&channel_args_mu_);
611
+ std::swap(channel_args_, to_destroy);
587
612
  channel_args_ = channel_args;
588
613
  }
589
614
  void RecordCallStarted() { call_counter_.RecordCallStarted(); }
@@ -596,7 +621,10 @@ class ServerNode final : public BaseNode {
596
621
  const;
597
622
  std::map<intptr_t, WeakRefCountedPtr<SocketNode>> child_sockets() const;
598
623
 
599
- const ChannelArgs& channel_args() const { return channel_args_; }
624
+ ChannelArgs channel_args() const {
625
+ MutexLock lock(&channel_args_mu_);
626
+ return channel_args_;
627
+ }
600
628
 
601
629
  private:
602
630
  void AddNodeSpecificData(DataSink sink) override;
@@ -604,7 +632,8 @@ class ServerNode final : public BaseNode {
604
632
  PerCpuCallCountingHelper call_counter_;
605
633
  // TODO(ctiller): keeping channel args here can create odd circular references
606
634
  // that are hard to reason about. Consider moving this to a DataSource.
607
- ChannelArgs channel_args_;
635
+ mutable Mutex channel_args_mu_;
636
+ ChannelArgs channel_args_ ABSL_GUARDED_BY(channel_args_mu_);
608
637
  };
609
638
 
610
639
  #define GRPC_ARG_CHANNELZ_SECURITY "grpc.internal.channelz_security"
@@ -751,6 +780,16 @@ class CallNode final : public BaseNode {
751
780
  Json RenderJson() override;
752
781
  };
753
782
 
783
+ class ResourceQuotaNode final : public BaseNode {
784
+ public:
785
+ explicit ResourceQuotaNode(std::string name)
786
+ : BaseNode(EntityType::kResourceQuota, 0, std::move(name)) {
787
+ NodeConstructed();
788
+ }
789
+
790
+ Json RenderJson() override { return Json::FromString("ResourceQuota"); }
791
+ };
792
+
754
793
  } // namespace channelz
755
794
  } // namespace grpc_core
756
795
 
@@ -47,61 +47,6 @@
47
47
  namespace grpc_core {
48
48
  namespace channelz {
49
49
 
50
- namespace {
51
- template <typename T>
52
- std::string RenderArray(std::tuple<T, bool> values_and_end,
53
- const std::string& key) {
54
- auto& [values, end] = values_and_end;
55
- Json::Object object;
56
- if (!values.empty()) {
57
- // Create list of channels.
58
- Json::Array array;
59
- for (size_t i = 0; i < values.size(); ++i) {
60
- array.emplace_back(values[i]->RenderJson());
61
- }
62
- object[key] = Json::FromArray(std::move(array));
63
- }
64
- if (end) {
65
- object["end"] = Json::FromBool(true);
66
- }
67
- return JsonDump(Json::FromObject(std::move(object)));
68
- }
69
-
70
- Json RemoveAdditionalInfo(const Json& json) {
71
- switch (json.type()) {
72
- case Json::Type::kArray: {
73
- Json::Array out;
74
- for (const auto& node : json.array()) {
75
- out.emplace_back(RemoveAdditionalInfo(node));
76
- }
77
- return Json::FromArray(std::move(out));
78
- } break;
79
- case Json::Type::kObject: {
80
- Json::Object out;
81
- for (const auto& [key, value] : json.object()) {
82
- if (key == "additionalInfo") continue;
83
- out[key] = RemoveAdditionalInfo(value);
84
- }
85
- return Json::FromObject(std::move(out));
86
- } break;
87
- default:
88
- return json;
89
- }
90
- }
91
-
92
- // TODO(ctiller): Temporary hack to remove fields that are objectionable to the
93
- // protobuf parser (because we've not published them in protobuf yet).
94
- char* ApplyHacks(const std::string& json_str) {
95
- return gpr_strdup(StripAdditionalInfoFromJson(json_str).c_str());
96
- }
97
- } // namespace
98
-
99
- std::string StripAdditionalInfoFromJson(absl::string_view json_str) {
100
- auto json = JsonParse(json_str);
101
- if (!json.ok()) return gpr_strdup(std::string(json_str).c_str());
102
- return JsonDump(RemoveAdditionalInfo(*json));
103
- }
104
-
105
50
  ChannelzRegistry* ChannelzRegistry::Default() {
106
51
  static ChannelzRegistry* singleton = new ChannelzRegistry();
107
52
  return singleton;
@@ -121,14 +66,6 @@ void ChannelzRegistry::InternalLogAllEntities() {
121
66
  }
122
67
  }
123
68
 
124
- std::string ChannelzRegistry::GetTopChannelsJson(intptr_t start_channel_id) {
125
- return RenderArray(GetTopChannels(start_channel_id), "channel");
126
- }
127
-
128
- std::string ChannelzRegistry::GetServersJson(intptr_t start_server_id) {
129
- return RenderArray(GetServers(start_server_id), "server");
130
- }
131
-
132
69
  void ChannelzRegistry::InternalRegister(BaseNode* node) {
133
70
  DCHECK_EQ(node->uuid_, -1);
134
71
  const size_t node_shard_index = NodeShardIndex(node);
@@ -379,102 +316,3 @@ void ChannelzRegistry::TestOnlyReset() {
379
316
 
380
317
  } // namespace channelz
381
318
  } // namespace grpc_core
382
-
383
- char* grpc_channelz_get_top_channels(intptr_t start_channel_id) {
384
- grpc_core::ExecCtx exec_ctx;
385
- return grpc_core::channelz::ApplyHacks(
386
- grpc_core::channelz::ChannelzRegistry::GetTopChannelsJson(
387
- start_channel_id)
388
- .c_str());
389
- }
390
-
391
- char* grpc_channelz_get_servers(intptr_t start_server_id) {
392
- grpc_core::ExecCtx exec_ctx;
393
- return grpc_core::channelz::ApplyHacks(
394
- grpc_core::channelz::ChannelzRegistry::GetServersJson(start_server_id)
395
- .c_str());
396
- }
397
-
398
- char* grpc_channelz_get_server(intptr_t server_id) {
399
- grpc_core::ExecCtx exec_ctx;
400
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> server_node =
401
- grpc_core::channelz::ChannelzRegistry::Get(server_id);
402
- if (server_node == nullptr ||
403
- server_node->type() !=
404
- grpc_core::channelz::BaseNode::EntityType::kServer) {
405
- return nullptr;
406
- }
407
- grpc_core::Json json = grpc_core::Json::FromObject({
408
- {"server", server_node->RenderJson()},
409
- });
410
- return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
411
- }
412
-
413
- char* grpc_channelz_get_server_sockets(intptr_t server_id,
414
- intptr_t start_socket_id,
415
- intptr_t max_results) {
416
- grpc_core::ExecCtx exec_ctx;
417
- // Validate inputs before handing them of to the renderer.
418
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> base_node =
419
- grpc_core::channelz::ChannelzRegistry::Get(server_id);
420
- if (base_node == nullptr ||
421
- base_node->type() != grpc_core::channelz::BaseNode::EntityType::kServer ||
422
- start_socket_id < 0 || max_results < 0) {
423
- return nullptr;
424
- }
425
- // This cast is ok since we have just checked to make sure base_node is
426
- // actually a server node.
427
- grpc_core::channelz::ServerNode* server_node =
428
- static_cast<grpc_core::channelz::ServerNode*>(base_node.get());
429
- return grpc_core::channelz::ApplyHacks(
430
- server_node->RenderServerSockets(start_socket_id, max_results).c_str());
431
- }
432
-
433
- char* grpc_channelz_get_channel(intptr_t channel_id) {
434
- grpc_core::ExecCtx exec_ctx;
435
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> channel_node =
436
- grpc_core::channelz::ChannelzRegistry::Get(channel_id);
437
- if (channel_node == nullptr ||
438
- (channel_node->type() !=
439
- grpc_core::channelz::BaseNode::EntityType::kTopLevelChannel &&
440
- channel_node->type() !=
441
- grpc_core::channelz::BaseNode::EntityType::kInternalChannel)) {
442
- return nullptr;
443
- }
444
- grpc_core::Json json = grpc_core::Json::FromObject({
445
- {"channel", channel_node->RenderJson()},
446
- });
447
- return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
448
- }
449
-
450
- char* grpc_channelz_get_subchannel(intptr_t subchannel_id) {
451
- grpc_core::ExecCtx exec_ctx;
452
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> subchannel_node =
453
- grpc_core::channelz::ChannelzRegistry::Get(subchannel_id);
454
- if (subchannel_node == nullptr ||
455
- subchannel_node->type() !=
456
- grpc_core::channelz::BaseNode::EntityType::kSubchannel) {
457
- return nullptr;
458
- }
459
- grpc_core::Json json = grpc_core::Json::FromObject({
460
- {"subchannel", subchannel_node->RenderJson()},
461
- });
462
- return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
463
- }
464
-
465
- char* grpc_channelz_get_socket(intptr_t socket_id) {
466
- grpc_core::ExecCtx exec_ctx;
467
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> socket_node =
468
- grpc_core::channelz::ChannelzRegistry::Get(socket_id);
469
- if (socket_node == nullptr ||
470
- (socket_node->type() !=
471
- grpc_core::channelz::BaseNode::EntityType::kSocket &&
472
- socket_node->type() !=
473
- grpc_core::channelz::BaseNode::EntityType::kListenSocket)) {
474
- return nullptr;
475
- }
476
- grpc_core::Json json = grpc_core::Json::FromObject({
477
- {"socket", socket_node->RenderJson()},
478
- });
479
- return grpc_core::channelz::ApplyHacks(grpc_core::JsonDump(json).c_str());
480
- }
@@ -95,9 +95,6 @@ class ChannelzRegistry final {
95
95
  start_socket_id);
96
96
  }
97
97
 
98
- static std::string GetTopChannelsJson(intptr_t start_channel_id);
99
- static std::string GetServersJson(intptr_t start_server_id);
100
-
101
98
  // Returns the allocated JSON string that represents the proto
102
99
  // GetServersResponse as per channelz.proto.
103
100
  static auto GetServers(intptr_t start_server_id) {
@@ -106,6 +103,11 @@ class ChannelzRegistry final {
106
103
  start_server_id);
107
104
  }
108
105
 
106
+ static std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool> GetChildren(
107
+ const BaseNode* parent, intptr_t start_node, size_t max_results) {
108
+ return Default()->InternalGetChildren(parent, start_node, max_results);
109
+ }
110
+
109
111
  static std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
110
112
  GetChildrenOfType(intptr_t start_node, const BaseNode* parent,
111
113
  BaseNode::EntityType type, size_t max_results) {
@@ -215,6 +217,15 @@ class ChannelzRegistry final {
215
217
  absl::FunctionRef<bool(const BaseNode*)> discriminator,
216
218
  size_t max_results);
217
219
 
220
+ std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
221
+ InternalGetChildren(const BaseNode* parent, intptr_t start_node,
222
+ size_t max_results) {
223
+ return QueryNodes(
224
+ start_node,
225
+ [parent](const BaseNode* n) { return n->HasParent(parent); },
226
+ max_results);
227
+ }
228
+
218
229
  std::tuple<std::vector<WeakRefCountedPtr<BaseNode>>, bool>
219
230
  InternalGetChildrenOfType(intptr_t start_node, const BaseNode* parent,
220
231
  BaseNode::EntityType type, size_t max_results) {
@@ -273,10 +284,6 @@ class ChannelzRegistry final {
273
284
  size_t max_orphaned_per_shard_;
274
285
  };
275
286
 
276
- // `additionalInfo` section is not yet in the protobuf format, so we
277
- // provide a utility to strip it for compatibility.
278
- std::string StripAdditionalInfoFromJson(absl::string_view json);
279
-
280
287
  } // namespace channelz
281
288
  } // namespace grpc_core
282
289
 
@@ -119,15 +119,13 @@ grpc_channelz_v2_PropertyValue* ToUpbProto(const PropertyValue& value,
119
119
  void PropertyList::SetInternal(absl::string_view key,
120
120
  std::optional<PropertyValue> value) {
121
121
  if (value.has_value()) {
122
- property_list_.insert_or_assign(key, *std::move(value));
123
- } else {
124
- property_list_.erase(std::string(key));
122
+ property_list_.emplace_back(std::string(key), *std::move(value));
125
123
  }
126
124
  }
127
125
 
128
126
  PropertyList& PropertyList::Merge(PropertyList other) {
129
127
  for (auto& [key, value] : other.property_list_) {
130
- SetInternal(key, value);
128
+ SetInternal(key, std::move(value));
131
129
  }
132
130
  return *this;
133
131
  }
@@ -135,16 +133,24 @@ PropertyList& PropertyList::Merge(PropertyList other) {
135
133
  Json::Object PropertyList::TakeJsonObject() {
136
134
  Json::Object json;
137
135
  for (auto& [key, value] : property_list_) {
138
- json.emplace(key, ToJson(value));
136
+ json.emplace(std::string(key), ToJson(value));
139
137
  }
140
138
  return json;
141
139
  }
142
140
 
143
141
  void PropertyList::FillUpbProto(grpc_channelz_v2_PropertyList* proto,
144
142
  upb_Arena* arena) {
143
+ auto* elements = grpc_channelz_v2_PropertyList_resize_properties(
144
+ proto, property_list_.size(), arena);
145
+ size_t i = 0;
145
146
  for (auto& [key, value] : property_list_) {
146
- grpc_channelz_v2_PropertyList_properties_set(
147
- proto, StdStringToUpbString(key), ToUpbProto(value, arena), arena);
147
+ auto* element = grpc_channelz_v2_PropertyList_Element_new(arena);
148
+ grpc_channelz_v2_PropertyList_Element_set_key(
149
+ element, CopyStdStringToUpbString(key, arena));
150
+ grpc_channelz_v2_PropertyList_Element_set_value(element,
151
+ ToUpbProto(value, arena));
152
+ elements[i] = element;
153
+ i++;
148
154
  }
149
155
  }
150
156
 
@@ -244,28 +250,18 @@ void PropertyGrid::SetInternal(absl::string_view column, absl::string_view row,
244
250
  PropertyGrid& PropertyGrid::SetColumn(absl::string_view column,
245
251
  PropertyList values) {
246
252
  int c = GetIndex(columns_, column);
247
- std::vector<std::string> keys;
248
- for (const auto& [key, value] : values.property_list_) {
249
- keys.push_back(key);
250
- }
251
- std::sort(keys.begin(), keys.end());
252
- for (const auto& key : keys) {
253
- grid_.emplace(std::pair(c, GetIndex(rows_, key)),
254
- std::move(values.property_list_.at(key)));
253
+ for (auto& [key, value] : values.property_list_) {
254
+ grid_.emplace(std::pair(c, GetIndex(rows_, std::move(key))),
255
+ std::move(value));
255
256
  }
256
257
  return *this;
257
258
  }
258
259
 
259
260
  PropertyGrid& PropertyGrid::SetRow(absl::string_view row, PropertyList values) {
260
261
  int r = GetIndex(rows_, row);
261
- std::vector<std::string> keys;
262
- for (const auto& [key, value] : values.property_list_) {
263
- keys.push_back(key);
264
- }
265
- std::sort(keys.begin(), keys.end());
266
- for (const auto& key : keys) {
267
- grid_.emplace(std::pair(GetIndex(columns_, key), r),
268
- std::move(values.property_list_.at(key)));
262
+ for (auto& [key, value] : values.property_list_) {
263
+ grid_.emplace(std::pair(GetIndex(columns_, std::move(key)), r),
264
+ std::move(value));
269
265
  }
270
266
  return *this;
271
267
  }
@@ -17,6 +17,8 @@
17
17
 
18
18
  #include <cstddef>
19
19
  #include <type_traits>
20
+ #include <utility>
21
+ #include <vector>
20
22
 
21
23
  #include "absl/container/flat_hash_map.h"
22
24
  #include "absl/status/status.h"
@@ -139,7 +141,7 @@ class PropertyList final : public OtherPropertyValue {
139
141
  friend class PropertyGrid;
140
142
  friend class PropertyTable;
141
143
 
142
- absl::flat_hash_map<std::string, PropertyValue> property_list_;
144
+ std::vector<std::pair<std::string, PropertyValue>> property_list_;
143
145
  };
144
146
 
145
147
  // PropertyGrid is much the same as PropertyList, but it is two dimensional.