grpc 1.78.0 → 1.80.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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +22 -8
  3. data/include/grpc/credentials.h +47 -37
  4. data/include/grpc/credentials_cpp.h +39 -0
  5. data/include/grpc/event_engine/event_engine.h +8 -3
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/impl/call.h +9 -0
  8. data/include/grpc/impl/channel_arg_names.h +7 -0
  9. data/include/grpc/module.modulemap +2 -0
  10. data/include/grpc/private_key_signer.h +104 -0
  11. data/include/grpc/support/port_platform.h +6 -0
  12. data/src/core/call/call_filters.h +101 -78
  13. data/src/core/call/call_spine.h +91 -68
  14. data/src/core/call/call_state.h +60 -4
  15. data/src/core/call/client_call.cc +9 -9
  16. data/src/core/call/client_call.h +1 -1
  17. data/src/core/call/metadata_batch.cc +2 -0
  18. data/src/core/call/metadata_batch.h +48 -1
  19. data/src/core/call/metadata_info.cc +35 -0
  20. data/src/core/call/metadata_info.h +2 -0
  21. data/src/core/call/simple_slice_based_metadata.h +2 -1
  22. data/src/core/channelz/channelz.cc +9 -6
  23. data/src/core/channelz/channelz.h +7 -4
  24. data/src/core/channelz/property_list.h +5 -0
  25. data/src/core/channelz/v2tov1/convert.cc +1 -1
  26. data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
  27. data/src/core/client_channel/buffered_call.cc +7 -3
  28. data/src/core/client_channel/buffered_call.h +11 -5
  29. data/src/core/client_channel/client_channel.cc +106 -44
  30. data/src/core/client_channel/client_channel.h +3 -6
  31. data/src/core/client_channel/client_channel_filter.cc +90 -64
  32. data/src/core/client_channel/client_channel_filter.h +3 -6
  33. data/src/core/client_channel/client_channel_internal.h +5 -0
  34. data/src/core/client_channel/config_selector.h +17 -12
  35. data/src/core/client_channel/dynamic_filters.cc +8 -7
  36. data/src/core/client_channel/dynamic_filters.h +7 -5
  37. data/src/core/client_channel/retry_filter.cc +1 -1
  38. data/src/core/client_channel/retry_filter.h +2 -2
  39. data/src/core/client_channel/subchannel.cc +1682 -266
  40. data/src/core/client_channel/subchannel.h +411 -134
  41. data/src/core/client_channel/subchannel_stream_client.cc +22 -18
  42. data/src/core/client_channel/subchannel_stream_client.h +8 -9
  43. data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
  44. data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
  45. data/src/core/config/config_vars.cc +9 -1
  46. data/src/core/config/config_vars.h +6 -0
  47. data/src/core/credentials/call/call_creds_registry.h +51 -22
  48. data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
  49. data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
  50. data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
  51. data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
  52. data/src/core/credentials/transport/channel_creds_registry.h +71 -20
  53. data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
  54. data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
  55. data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
  56. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
  57. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
  58. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
  59. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
  62. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
  63. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
  64. data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
  65. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
  66. data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
  67. data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
  68. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
  69. data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
  70. data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
  73. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
  74. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
  77. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
  78. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  79. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
  83. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
  84. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  85. data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
  86. data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
  87. data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
  88. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
  89. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  90. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
  91. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
  94. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
  95. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
  96. data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
  97. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
  98. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
  99. data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
  100. data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
  101. data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
  102. data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
  103. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
  104. data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
  105. data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
  106. data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
  107. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
  108. data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
  109. data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
  110. data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
  111. data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
  113. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
  114. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
  115. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
  116. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
  117. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
  118. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
  119. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
  120. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
  121. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
  122. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
  123. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
  124. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
  125. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
  126. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
  127. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
  128. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
  134. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
  135. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
  136. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
  137. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
  138. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
  139. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
  140. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
  141. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
  142. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
  143. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
  144. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
  145. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
  146. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
  147. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
  148. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
  149. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
  150. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
  151. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
  152. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
  153. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  154. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
  155. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
  156. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
  157. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
  158. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
  159. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
  160. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  161. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
  162. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
  163. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
  164. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
  165. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
  166. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
  167. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
  168. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
  169. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
  170. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
  171. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
  172. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
  173. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
  174. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
  175. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
  176. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
  177. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
  178. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
  179. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
  180. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
  181. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
  182. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
  183. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
  184. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
  185. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
  186. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
  187. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
  188. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
  189. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
  190. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
  191. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
  192. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
  193. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
  194. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
  195. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
  196. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
  197. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
  198. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
  199. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
  200. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
  201. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
  202. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
  203. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
  204. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
  205. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
  206. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
  207. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
  208. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
  209. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
  210. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
  211. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
  212. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
  213. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
  214. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
  215. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
  216. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
  217. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
  218. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
  219. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
  220. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
  221. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
  222. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
  223. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
  224. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
  225. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
  235. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
  236. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
  237. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
  238. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  239. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
  240. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
  241. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
  242. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
  243. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
  244. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
  245. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
  246. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
  247. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
  248. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
  249. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
  250. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
  251. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
  252. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
  253. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
  254. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  255. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
  256. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
  257. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
  258. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
  259. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
  260. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
  261. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
  262. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
  263. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
  264. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
  267. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
  268. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
  269. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
  270. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
  271. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
  272. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
  273. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
  274. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
  275. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
  276. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
  277. data/src/core/filter/filter_chain.h +95 -0
  278. data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
  279. data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
  280. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  282. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
  283. data/src/core/handshaker/security/secure_endpoint.cc +282 -68
  284. data/src/core/handshaker/security/secure_endpoint.h +0 -7
  285. data/src/core/lib/channel/channel_args.h +1 -1
  286. data/src/core/lib/channel/promise_based_filter.cc +17 -4
  287. data/src/core/lib/channel/promise_based_filter.h +3 -2
  288. data/src/core/lib/debug/trace_flags.cc +2 -0
  289. data/src/core/lib/debug/trace_flags.h +1 -0
  290. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
  291. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
  292. data/src/core/lib/event_engine/event_engine.cc +9 -0
  293. data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
  294. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
  295. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
  296. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
  297. data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
  298. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
  299. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
  300. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
  301. data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
  302. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
  303. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
  304. data/src/core/lib/experiments/experiments.cc +309 -201
  305. data/src/core/lib/experiments/experiments.h +141 -80
  306. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  307. data/src/core/lib/iomgr/resolve_address.h +0 -2
  308. data/src/core/lib/iomgr/resolved_address.h +0 -2
  309. data/src/core/lib/iomgr/tcp_posix.cc +13 -5
  310. data/src/core/lib/iomgr/tcp_server.cc +0 -5
  311. data/src/core/lib/iomgr/tcp_server.h +0 -7
  312. data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
  313. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
  315. data/src/core/lib/promise/all_ok.h +17 -12
  316. data/src/core/lib/promise/cancel_callback.h +12 -13
  317. data/src/core/lib/promise/detail/join_state.h +626 -0
  318. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  319. data/src/core/lib/promise/for_each.h +32 -8
  320. data/src/core/lib/promise/if.h +9 -7
  321. data/src/core/lib/promise/loop.h +18 -16
  322. data/src/core/lib/promise/map.h +54 -47
  323. data/src/core/lib/promise/mpsc.h +11 -10
  324. data/src/core/lib/promise/observable.h +6 -6
  325. data/src/core/lib/promise/party.h +25 -19
  326. data/src/core/lib/promise/poll.h +5 -5
  327. data/src/core/lib/promise/prioritized_race.h +10 -7
  328. data/src/core/lib/promise/promise.h +16 -11
  329. data/src/core/lib/promise/race.h +6 -5
  330. data/src/core/lib/promise/seq.h +109 -74
  331. data/src/core/lib/promise/try_join.h +14 -6
  332. data/src/core/lib/promise/try_seq.h +76 -60
  333. data/src/core/lib/resource_quota/api.cc +7 -0
  334. data/src/core/lib/resource_quota/arena.h +1 -1
  335. data/src/core/lib/resource_quota/memory_quota.cc +4 -1
  336. data/src/core/lib/resource_quota/resource_quota.cc +2 -1
  337. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  338. data/src/core/lib/resource_quota/stream_quota.cc +77 -1
  339. data/src/core/lib/resource_quota/stream_quota.h +64 -1
  340. data/src/core/lib/resource_quota/telemetry.h +1 -1
  341. data/src/core/lib/surface/call.cc +13 -0
  342. data/src/core/lib/surface/call_utils.h +58 -43
  343. data/src/core/lib/surface/channel.h +1 -4
  344. data/src/core/lib/surface/completion_queue.cc +13 -6
  345. data/src/core/lib/surface/validate_metadata.cc +20 -15
  346. data/src/core/lib/surface/validate_metadata.h +3 -1
  347. data/src/core/lib/surface/version.cc +2 -2
  348. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  349. data/src/core/lib/transport/promise_endpoint.h +1 -1
  350. data/src/core/lib/transport/transport.h +5 -0
  351. data/src/core/load_balancing/health_check_client.cc +1 -15
  352. data/src/core/load_balancing/health_check_client_internal.h +0 -2
  353. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  354. data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
  355. data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
  356. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
  357. data/src/core/resolver/xds/xds_resolver.cc +162 -116
  358. data/src/core/server/server.cc +18 -1
  359. data/src/core/server/server.h +2 -0
  360. data/src/core/server/xds_server_config_fetcher.cc +4 -4
  361. data/src/core/telemetry/call_tracer.cc +87 -2
  362. data/src/core/telemetry/call_tracer.h +46 -8
  363. data/src/core/telemetry/instrument.cc +102 -40
  364. data/src/core/telemetry/instrument.h +246 -65
  365. data/src/core/tsi/fake_transport_security.cc +3 -1
  366. data/src/core/tsi/ssl_transport_security.cc +516 -137
  367. data/src/core/tsi/ssl_transport_security.h +28 -22
  368. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  369. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  370. data/src/core/util/bitset.h +6 -0
  371. data/src/core/util/function_signature.h +3 -1
  372. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  373. data/src/core/util/json/json_reader.cc +0 -4
  374. data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
  375. data/src/core/xds/grpc/certificate_provider_store.h +3 -17
  376. data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
  377. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
  378. data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
  379. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
  380. data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
  381. data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
  382. data/src/core/xds/grpc/xds_client_grpc.h +10 -7
  383. data/src/core/xds/grpc/xds_cluster.cc +18 -4
  384. data/src/core/xds/grpc/xds_cluster.h +17 -2
  385. data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
  386. data/src/core/xds/grpc/xds_common_types.cc +45 -0
  387. data/src/core/xds/grpc/xds_common_types.h +31 -0
  388. data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
  389. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  390. data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
  391. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
  392. data/src/core/xds/grpc/xds_http_filter.cc +38 -0
  393. data/src/core/xds/grpc/xds_http_filter.h +70 -47
  394. data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
  395. data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
  396. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
  397. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
  398. data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
  399. data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
  400. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
  401. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
  402. data/src/core/xds/grpc/xds_listener.cc +4 -1
  403. data/src/core/xds/grpc/xds_listener.h +10 -2
  404. data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
  405. data/src/core/xds/grpc/xds_matcher.cc +40 -5
  406. data/src/core/xds/grpc/xds_matcher.h +13 -0
  407. data/src/core/xds/grpc/xds_matcher_action.h +1 -1
  408. data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
  409. data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
  410. data/src/core/xds/grpc/xds_route_config.cc +12 -1
  411. data/src/core/xds/grpc/xds_route_config.h +15 -2
  412. data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
  413. data/src/core/xds/grpc/xds_routing.cc +181 -6
  414. data/src/core/xds/grpc/xds_routing.h +57 -0
  415. data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
  416. data/src/core/xds/grpc/xds_server_grpc.h +13 -6
  417. data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
  418. data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
  419. data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
  420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
  422. data/src/ruby/lib/grpc/grpc.rb +7 -9
  423. data/src/ruby/lib/grpc/version.rb +1 -1
  424. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  425. data/src/ruby/spec/client_server_spec.rb +1 -1
  426. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  427. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  428. data/src/ruby/spec/spec_helper.rb +1 -1
  429. metadata +64 -14
  430. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  431. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -37,6 +37,16 @@
37
37
  namespace grpc_core {
38
38
  namespace channelz {
39
39
  namespace v2tov1 {
40
+
41
+ std::string StripAdditionalInfoFromJson(absl::string_view json_str) {
42
+ auto json = JsonParse(json_str);
43
+ if (!json.ok()) return std::string(json_str);
44
+ if (json->type() != Json::Type::kObject) return std::string(json_str);
45
+ Json::Object object = json->object();
46
+ object.erase("additionalInfo");
47
+ return JsonDump(Json::FromObject(std::move(object)));
48
+ }
49
+
40
50
  namespace {
41
51
 
42
52
  class RegistryEntityFetcher : public EntityFetcher {
@@ -69,61 +79,8 @@ class RegistryEntityFetcher : public EntityFetcher {
69
79
  }
70
80
  };
71
81
 
72
- template <typename T>
73
- std::string RenderArray(std::tuple<T, bool> values_and_end,
74
- const std::string& key) {
75
- auto& [values, end] = values_and_end;
76
- Json::Object object;
77
- if (!values.empty()) {
78
- // Create list of channels.
79
- Json::Array array;
80
- for (size_t i = 0; i < values.size(); ++i) {
81
- array.emplace_back(values[i]->RenderJson());
82
- }
83
- object[key] = Json::FromArray(std::move(array));
84
- }
85
- if (end) {
86
- object["end"] = Json::FromBool(true);
87
- }
88
- return JsonDump(Json::FromObject(std::move(object)));
89
- }
90
-
91
- Json RemoveAdditionalInfo(const Json& json) {
92
- switch (json.type()) {
93
- case Json::Type::kArray: {
94
- Json::Array out;
95
- for (const auto& node : json.array()) {
96
- out.emplace_back(RemoveAdditionalInfo(node));
97
- }
98
- return Json::FromArray(std::move(out));
99
- } break;
100
- case Json::Type::kObject: {
101
- Json::Object out;
102
- for (const auto& [key, value] : json.object()) {
103
- if (key == "additionalInfo") continue;
104
- out[key] = RemoveAdditionalInfo(value);
105
- }
106
- return Json::FromObject(std::move(out));
107
- } break;
108
- default:
109
- return json;
110
- }
111
- }
112
-
113
82
  } // namespace
114
83
 
115
- std::string StripAdditionalInfoFromJson(absl::string_view json_str) {
116
- auto json = JsonParse(json_str);
117
- if (!json.ok()) return std::string(json_str);
118
- return JsonDump(RemoveAdditionalInfo(*json));
119
- }
120
-
121
- // TODO(ctiller): Temporary hack to remove fields that are objectionable to the
122
- // protobuf parser (because we've not published them in protobuf yet).
123
- char* ApplyHacks(const std::string& json_str) {
124
- return gpr_strdup(StripAdditionalInfoFromJson(json_str).c_str());
125
- }
126
-
127
84
  } // namespace v2tov1
128
85
  } // namespace channelz
129
86
  } // namespace grpc_core
@@ -133,299 +90,199 @@ using grpc_core::channelz::v2tov1::RegistryEntityFetcher;
133
90
 
134
91
  char* grpc_channelz_get_top_channels(intptr_t start_channel_id) {
135
92
  grpc_core::ExecCtx exec_ctx;
136
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
137
- RegistryEntityFetcher fetcher;
138
- auto [channels, end] = ChannelzRegistry::GetTopChannels(start_channel_id);
139
- grpc_core::Json::Array array;
140
- for (const auto& channel_node : channels) {
141
- if (channel_node == nullptr) continue;
142
- auto serialized_v2 =
143
- channel_node->SerializeEntityToString(absl::ZeroDuration());
144
- auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel(
145
- serialized_v2, fetcher, true);
146
- if (!serialized_v1.ok()) {
147
- LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status();
148
- continue;
149
- }
150
- auto json = grpc_core::JsonParse(*serialized_v1);
151
- if (!json.ok()) {
152
- LOG(ERROR) << "Failed to parse converted channel json: "
153
- << json.status();
154
- continue;
155
- }
156
- array.emplace_back(std::move(*json));
93
+ RegistryEntityFetcher fetcher;
94
+ auto [channels, end] = ChannelzRegistry::GetTopChannels(start_channel_id);
95
+ grpc_core::Json::Array array;
96
+ for (const auto& channel_node : channels) {
97
+ if (channel_node == nullptr) continue;
98
+ auto serialized_v2 =
99
+ channel_node->SerializeEntityToString(absl::ZeroDuration());
100
+ auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel(
101
+ serialized_v2, fetcher, true);
102
+ if (!serialized_v1.ok()) {
103
+ LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status();
104
+ continue;
157
105
  }
158
- grpc_core::Json json = grpc_core::Json::FromObject({
159
- {"channel", grpc_core::Json::FromArray(std::move(array))},
160
- {"end", grpc_core::Json::FromBool(end)},
161
- });
162
- std::string json_str = grpc_core::JsonDump(json);
163
- return gpr_strdup(json_str.c_str());
164
- } else {
165
- return grpc_core::channelz::v2tov1::ApplyHacks(
166
- grpc_core::channelz::v2tov1::RenderArray(
167
- grpc_core::channelz::ChannelzRegistry::GetTopChannels(
168
- start_channel_id),
169
- "channel"));
170
- }
171
- }
172
-
173
- char* grpc_channelz_get_servers(intptr_t start_server_id) {
174
- grpc_core::ExecCtx exec_ctx;
175
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
176
- RegistryEntityFetcher fetcher;
177
- auto [servers, end] = ChannelzRegistry::GetServers(start_server_id);
178
- grpc_core::Json::Array array;
179
- for (const auto& server_node : servers) {
180
- if (server_node == nullptr) continue;
181
- auto serialized_v2 =
182
- server_node->SerializeEntityToString(absl::ZeroDuration());
183
- auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer(
184
- serialized_v2, fetcher, true);
185
- if (!serialized_v1.ok()) {
186
- LOG(ERROR) << "Failed to convert server: " << serialized_v1.status();
187
- continue;
188
- }
189
- auto json = grpc_core::JsonParse(*serialized_v1);
190
- if (!json.ok()) {
191
- LOG(ERROR) << "Failed to parse converted server json: "
192
- << json.status();
193
- continue;
194
- }
195
- array.emplace_back(std::move(*json));
106
+ auto json = grpc_core::JsonParse(*serialized_v1);
107
+ if (!json.ok()) {
108
+ LOG(ERROR) << "Failed to parse converted channel json: " << json.status();
109
+ continue;
196
110
  }
197
- grpc_core::Json json = grpc_core::Json::FromObject({
198
- {"server", grpc_core::Json::FromArray(std::move(array))},
199
- {"end", grpc_core::Json::FromBool(end)},
200
- });
201
- std::string json_str = grpc_core::JsonDump(json);
202
- return gpr_strdup(json_str.c_str());
203
- } else {
204
- return grpc_core::channelz::v2tov1::ApplyHacks(
205
- grpc_core::channelz::v2tov1::RenderArray(
206
- grpc_core::channelz::ChannelzRegistry::GetServers(start_server_id),
207
- "server"));
111
+ array.emplace_back(std::move(*json));
208
112
  }
113
+ grpc_core::Json json = grpc_core::Json::FromObject({
114
+ {"channel", grpc_core::Json::FromArray(std::move(array))},
115
+ {"end", grpc_core::Json::FromBool(end)},
116
+ });
117
+ std::string json_str = grpc_core::JsonDump(json);
118
+ return gpr_strdup(json_str.c_str());
209
119
  }
210
120
 
211
- char* grpc_channelz_get_server(intptr_t server_id) {
121
+ char* grpc_channelz_get_servers(intptr_t start_server_id) {
212
122
  grpc_core::ExecCtx exec_ctx;
213
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
214
- auto server_node = ChannelzRegistry::GetServer(server_id);
215
- if (server_node == nullptr) return nullptr;
216
- RegistryEntityFetcher fetcher;
123
+ RegistryEntityFetcher fetcher;
124
+ auto [servers, end] = ChannelzRegistry::GetServers(start_server_id);
125
+ grpc_core::Json::Array array;
126
+ for (const auto& server_node : servers) {
127
+ if (server_node == nullptr) continue;
217
128
  auto serialized_v2 =
218
129
  server_node->SerializeEntityToString(absl::ZeroDuration());
219
130
  auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer(
220
131
  serialized_v2, fetcher, true);
221
132
  if (!serialized_v1.ok()) {
222
133
  LOG(ERROR) << "Failed to convert server: " << serialized_v1.status();
223
- return nullptr;
134
+ continue;
224
135
  }
225
136
  auto json = grpc_core::JsonParse(*serialized_v1);
226
137
  if (!json.ok()) {
227
138
  LOG(ERROR) << "Failed to parse converted server json: " << json.status();
228
- return nullptr;
229
- }
230
- grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
231
- {"server", std::move(*json)},
232
- });
233
- std::string json_str = grpc_core::JsonDump(wrapped_json);
234
- return gpr_strdup(json_str.c_str());
235
- } else {
236
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> server_node =
237
- grpc_core::channelz::ChannelzRegistry::Get(server_id);
238
- if (server_node == nullptr ||
239
- server_node->type() !=
240
- grpc_core::channelz::BaseNode::EntityType::kServer) {
241
- return nullptr;
139
+ continue;
242
140
  }
243
- grpc_core::Json json = grpc_core::Json::FromObject({
244
- {"server", server_node->RenderJson()},
245
- });
246
- return grpc_core::channelz::v2tov1::ApplyHacks(
247
- grpc_core::JsonDump(json).c_str());
141
+ array.emplace_back(std::move(*json));
248
142
  }
143
+ grpc_core::Json json = grpc_core::Json::FromObject({
144
+ {"server", grpc_core::Json::FromArray(std::move(array))},
145
+ {"end", grpc_core::Json::FromBool(end)},
146
+ });
147
+ std::string json_str = grpc_core::JsonDump(json);
148
+ return gpr_strdup(json_str.c_str());
149
+ }
150
+
151
+ char* grpc_channelz_get_server(intptr_t server_id) {
152
+ grpc_core::ExecCtx exec_ctx;
153
+ auto server_node = ChannelzRegistry::GetServer(server_id);
154
+ if (server_node == nullptr) return nullptr;
155
+ RegistryEntityFetcher fetcher;
156
+ auto serialized_v2 =
157
+ server_node->SerializeEntityToString(absl::ZeroDuration());
158
+ auto serialized_v1 =
159
+ grpc_core::channelz::v2tov1::ConvertServer(serialized_v2, fetcher, true);
160
+ if (!serialized_v1.ok()) {
161
+ LOG(ERROR) << "Failed to convert server: " << serialized_v1.status();
162
+ return nullptr;
163
+ }
164
+ auto json = grpc_core::JsonParse(*serialized_v1);
165
+ if (!json.ok()) {
166
+ LOG(ERROR) << "Failed to parse converted server json: " << json.status();
167
+ return nullptr;
168
+ }
169
+ grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
170
+ {"server", std::move(*json)},
171
+ });
172
+ std::string json_str = grpc_core::JsonDump(wrapped_json);
173
+ return gpr_strdup(json_str.c_str());
249
174
  }
250
175
 
251
176
  char* grpc_channelz_get_server_sockets(intptr_t server_id,
252
177
  intptr_t start_socket_id,
253
178
  intptr_t max_results) {
254
179
  grpc_core::ExecCtx exec_ctx;
255
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
256
- auto server_node = ChannelzRegistry::GetServer(server_id);
257
- if (server_node == nullptr) return nullptr;
258
- size_t max =
259
- max_results == 0 ? std::numeric_limits<size_t>::max() : max_results;
260
- auto [sockets, end] = ChannelzRegistry::GetChildrenOfType(
261
- start_socket_id, server_node.get(),
262
- grpc_core::channelz::BaseNode::EntityType::kSocket, max);
263
- grpc_core::Json::Array array;
264
- for (const auto& socket_node : sockets) {
265
- if (socket_node == nullptr) continue;
266
- array.emplace_back(grpc_core::Json::FromObject({
267
- {"socketId",
268
- grpc_core::Json::FromString(absl::StrCat(socket_node->uuid()))},
269
- {"name", grpc_core::Json::FromString(socket_node->name())},
270
- }));
271
- }
272
- grpc_core::Json json = grpc_core::Json::FromObject({
273
- {"socketRef", grpc_core::Json::FromArray(std::move(array))},
274
- {"end", grpc_core::Json::FromBool(end)},
275
- });
276
- std::string json_str = grpc_core::JsonDump(json);
277
- return gpr_strdup(json_str.c_str());
278
- } else {
279
- // Validate inputs before handing them of to the renderer.
280
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> base_node =
281
- grpc_core::channelz::ChannelzRegistry::Get(server_id);
282
- if (base_node == nullptr ||
283
- base_node->type() !=
284
- grpc_core::channelz::BaseNode::EntityType::kServer ||
285
- start_socket_id < 0 || max_results < 0) {
286
- return nullptr;
287
- }
288
- // This cast is ok since we have just checked to make sure base_node is
289
- // actually a server node.
290
- grpc_core::channelz::ServerNode* server_node =
291
- static_cast<grpc_core::channelz::ServerNode*>(base_node.get());
292
- return grpc_core::channelz::v2tov1::ApplyHacks(
293
- server_node->RenderServerSockets(start_socket_id, max_results).c_str());
180
+ auto server_node = ChannelzRegistry::GetServer(server_id);
181
+ if (server_node == nullptr) return nullptr;
182
+ size_t max =
183
+ max_results == 0 ? std::numeric_limits<size_t>::max() : max_results;
184
+ auto [sockets, end] = ChannelzRegistry::GetChildrenOfType(
185
+ start_socket_id, server_node.get(),
186
+ grpc_core::channelz::BaseNode::EntityType::kSocket, max);
187
+ grpc_core::Json::Array array;
188
+ for (const auto& socket_node : sockets) {
189
+ if (socket_node == nullptr) continue;
190
+ array.emplace_back(grpc_core::Json::FromObject({
191
+ {"socketId",
192
+ grpc_core::Json::FromString(absl::StrCat(socket_node->uuid()))},
193
+ {"name", grpc_core::Json::FromString(socket_node->name())},
194
+ }));
294
195
  }
196
+ grpc_core::Json json = grpc_core::Json::FromObject({
197
+ {"socketRef", grpc_core::Json::FromArray(std::move(array))},
198
+ {"end", grpc_core::Json::FromBool(end)},
199
+ });
200
+ std::string json_str = grpc_core::JsonDump(json);
201
+ return gpr_strdup(json_str.c_str());
295
202
  }
296
203
 
297
204
  char* grpc_channelz_get_channel(intptr_t channel_id) {
298
205
  grpc_core::ExecCtx exec_ctx;
299
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
300
- auto channel_node = ChannelzRegistry::GetChannel(channel_id);
301
- if (channel_node == nullptr) return nullptr;
302
- RegistryEntityFetcher fetcher;
303
- auto serialized_v2 =
304
- channel_node->SerializeEntityToString(absl::ZeroDuration());
305
- auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel(
306
- serialized_v2, fetcher, true);
307
- if (!serialized_v1.ok()) {
308
- LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status();
309
- return nullptr;
310
- }
311
- auto json = grpc_core::JsonParse(*serialized_v1);
312
- if (!json.ok()) {
313
- LOG(ERROR) << "Failed to parse converted channel json: " << json.status();
314
- return nullptr;
315
- }
316
- grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
317
- {"channel", std::move(*json)},
318
- });
319
- std::string json_str = grpc_core::JsonDump(wrapped_json);
320
- return gpr_strdup(json_str.c_str());
321
- } else {
322
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> channel_node =
323
- grpc_core::channelz::ChannelzRegistry::Get(channel_id);
324
- if (channel_node == nullptr ||
325
- (channel_node->type() !=
326
- grpc_core::channelz::BaseNode::EntityType::kTopLevelChannel &&
327
- channel_node->type() !=
328
- grpc_core::channelz::BaseNode::EntityType::kInternalChannel)) {
329
- return nullptr;
330
- }
331
- grpc_core::Json json = grpc_core::Json::FromObject({
332
- {"channel", channel_node->RenderJson()},
333
- });
334
- return grpc_core::channelz::v2tov1::ApplyHacks(
335
- grpc_core::JsonDump(json).c_str());
206
+ auto channel_node = ChannelzRegistry::GetChannel(channel_id);
207
+ if (channel_node == nullptr) return nullptr;
208
+ RegistryEntityFetcher fetcher;
209
+ auto serialized_v2 =
210
+ channel_node->SerializeEntityToString(absl::ZeroDuration());
211
+ auto serialized_v1 =
212
+ grpc_core::channelz::v2tov1::ConvertChannel(serialized_v2, fetcher, true);
213
+ if (!serialized_v1.ok()) {
214
+ LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status();
215
+ return nullptr;
336
216
  }
217
+ auto json = grpc_core::JsonParse(*serialized_v1);
218
+ if (!json.ok()) {
219
+ LOG(ERROR) << "Failed to parse converted channel json: " << json.status();
220
+ return nullptr;
221
+ }
222
+ grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
223
+ {"channel", std::move(*json)},
224
+ });
225
+ std::string json_str = grpc_core::JsonDump(wrapped_json);
226
+ return gpr_strdup(json_str.c_str());
337
227
  }
338
228
 
339
229
  char* grpc_channelz_get_subchannel(intptr_t subchannel_id) {
340
230
  grpc_core::ExecCtx exec_ctx;
341
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
342
- auto subchannel_node = ChannelzRegistry::GetSubchannel(subchannel_id);
343
- if (subchannel_node == nullptr) return nullptr;
344
- RegistryEntityFetcher fetcher;
345
- auto serialized_v2 =
346
- subchannel_node->SerializeEntityToString(absl::ZeroDuration());
347
- auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel(
348
- serialized_v2, fetcher, true);
349
- if (!serialized_v1.ok()) {
350
- LOG(ERROR) << "Failed to convert subchannel: " << serialized_v1.status();
351
- return nullptr;
352
- }
353
- auto json = grpc_core::JsonParse(*serialized_v1);
354
- if (!json.ok()) {
355
- LOG(ERROR) << "Failed to parse converted subchannel json: "
356
- << json.status();
357
- return nullptr;
358
- }
359
- grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
360
- {"subchannel", std::move(*json)},
361
- });
362
- std::string json_str = grpc_core::JsonDump(wrapped_json);
363
- return gpr_strdup(json_str.c_str());
364
- } else {
365
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode>
366
- subchannel_node =
367
- grpc_core::channelz::ChannelzRegistry::Get(subchannel_id);
368
- if (subchannel_node == nullptr ||
369
- subchannel_node->type() !=
370
- grpc_core::channelz::BaseNode::EntityType::kSubchannel) {
371
- return nullptr;
372
- }
373
- grpc_core::Json json = grpc_core::Json::FromObject({
374
- {"subchannel", subchannel_node->RenderJson()},
375
- });
376
- return grpc_core::channelz::v2tov1::ApplyHacks(
377
- grpc_core::JsonDump(json).c_str());
231
+ auto subchannel_node = ChannelzRegistry::GetSubchannel(subchannel_id);
232
+ if (subchannel_node == nullptr) return nullptr;
233
+ RegistryEntityFetcher fetcher;
234
+ auto serialized_v2 =
235
+ subchannel_node->SerializeEntityToString(absl::ZeroDuration());
236
+ auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel(
237
+ serialized_v2, fetcher, true);
238
+ if (!serialized_v1.ok()) {
239
+ LOG(ERROR) << "Failed to convert subchannel: " << serialized_v1.status();
240
+ return nullptr;
241
+ }
242
+ auto json = grpc_core::JsonParse(*serialized_v1);
243
+ if (!json.ok()) {
244
+ LOG(ERROR) << "Failed to parse converted subchannel json: "
245
+ << json.status();
246
+ return nullptr;
378
247
  }
248
+ grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
249
+ {"subchannel", std::move(*json)},
250
+ });
251
+ std::string json_str = grpc_core::JsonDump(wrapped_json);
252
+ return gpr_strdup(json_str.c_str());
379
253
  }
380
254
 
381
255
  char* grpc_channelz_get_socket(intptr_t socket_id) {
382
256
  grpc_core::ExecCtx exec_ctx;
383
- if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) {
384
- auto node = ChannelzRegistry::GetNode(socket_id);
385
- if (node == nullptr) return nullptr;
386
- RegistryEntityFetcher fetcher;
387
- auto serialized_v2 = node->SerializeEntityToString(absl::ZeroDuration());
388
- absl::StatusOr<std::string> serialized_v1;
389
- if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) {
390
- serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket(serialized_v2,
391
- fetcher, true);
392
- } else if (node->type() ==
393
- grpc_core::channelz::BaseNode::EntityType::kListenSocket) {
394
- serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket(
395
- serialized_v2, fetcher, true);
396
- } else {
397
- return nullptr;
398
- }
399
- if (!serialized_v1.ok()) {
400
- LOG(ERROR) << "Failed to convert socket: " << serialized_v1.status();
401
- return nullptr;
402
- }
403
- // The old API returned a JSON object with a "socket" key.
404
- // The new converter returns the socket JSON directly. We need to wrap it.
405
- auto json = grpc_core::JsonParse(*serialized_v1);
406
- if (!json.ok()) {
407
- LOG(ERROR) << "Failed to parse converted socket json: " << json.status();
408
- return nullptr;
409
- }
410
- grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
411
- {"socket", std::move(*json)},
412
- });
413
- std::string json_str = grpc_core::JsonDump(wrapped_json);
414
- return gpr_strdup(json_str.c_str());
257
+ auto node = ChannelzRegistry::GetNode(socket_id);
258
+ if (node == nullptr) return nullptr;
259
+ RegistryEntityFetcher fetcher;
260
+ auto serialized_v2 = node->SerializeEntityToString(absl::ZeroDuration());
261
+ absl::StatusOr<std::string> serialized_v1;
262
+ if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) {
263
+ serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket(serialized_v2,
264
+ fetcher, true);
265
+ } else if (node->type() ==
266
+ grpc_core::channelz::BaseNode::EntityType::kListenSocket) {
267
+ serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket(
268
+ serialized_v2, fetcher, true);
415
269
  } else {
416
- grpc_core::WeakRefCountedPtr<grpc_core::channelz::BaseNode> socket_node =
417
- grpc_core::channelz::ChannelzRegistry::Get(socket_id);
418
- if (socket_node == nullptr ||
419
- (socket_node->type() !=
420
- grpc_core::channelz::BaseNode::EntityType::kSocket &&
421
- socket_node->type() !=
422
- grpc_core::channelz::BaseNode::EntityType::kListenSocket)) {
423
- return nullptr;
424
- }
425
- grpc_core::Json json = grpc_core::Json::FromObject({
426
- {"socket", socket_node->RenderJson()},
427
- });
428
- return grpc_core::channelz::v2tov1::ApplyHacks(
429
- grpc_core::JsonDump(json).c_str());
270
+ return nullptr;
271
+ }
272
+ if (!serialized_v1.ok()) {
273
+ LOG(ERROR) << "Failed to convert socket: " << serialized_v1.status();
274
+ return nullptr;
275
+ }
276
+ // The old API returned a JSON object with a "socket" key.
277
+ // The new converter returns the socket JSON directly. We need to wrap it.
278
+ auto json = grpc_core::JsonParse(*serialized_v1);
279
+ if (!json.ok()) {
280
+ LOG(ERROR) << "Failed to parse converted socket json: " << json.status();
281
+ return nullptr;
430
282
  }
283
+ grpc_core::Json wrapped_json = grpc_core::Json::FromObject({
284
+ {"socket", std::move(*json)},
285
+ });
286
+ std::string json_str = grpc_core::JsonDump(wrapped_json);
287
+ return gpr_strdup(json_str.c_str());
431
288
  }
@@ -111,7 +111,8 @@ void BufferedCall::ResumePendingBatchInCallCombiner(
111
111
 
112
112
  // This is called via the call combiner, so access to calld is synchronized.
113
113
  void BufferedCall::Resume(
114
- absl::AnyInvocable<void(grpc_transport_stream_op_batch*)> start_batch) {
114
+ absl::AnyInvocable<void(grpc_transport_stream_op_batch*)> start_batch,
115
+ YieldCallCombinerPredicate yield_call_combiner_predicate) {
115
116
  if (GRPC_TRACE_FLAG_ENABLED_OBJ(*tracer_)) {
116
117
  size_t num_batches = 0;
117
118
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -133,8 +134,11 @@ void BufferedCall::Resume(
133
134
  batch = nullptr;
134
135
  }
135
136
  }
136
- // Note: This will release the call combiner.
137
- closures.RunClosures(call_combiner_);
137
+ if (yield_call_combiner_predicate(closures)) {
138
+ closures.RunClosures(call_combiner_);
139
+ } else {
140
+ closures.RunClosuresWithoutYielding(call_combiner_);
141
+ }
138
142
  }
139
143
 
140
144
  } // namespace grpc_core
@@ -45,11 +45,6 @@ class BufferedCall {
45
45
  // Must be called from within the call combiner.
46
46
  void EnqueueBatch(grpc_transport_stream_op_batch* batch);
47
47
 
48
- // Resumes all queued batches by passing them to start_batch().
49
- // Must be called from within the call combiner.
50
- void Resume(
51
- absl::AnyInvocable<void(grpc_transport_stream_op_batch*)> start_batch);
52
-
53
48
  // A predicate type and some useful implementations for Fail().
54
49
  typedef bool (*YieldCallCombinerPredicate)(
55
50
  const CallCombinerClosureList& closures);
@@ -63,6 +58,17 @@ class BufferedCall {
63
58
  const CallCombinerClosureList& closures) {
64
59
  return closures.size() > 0;
65
60
  }
61
+
62
+ // Resumes all queued batches by passing them to start_batch().
63
+ // Must be called from within the call combiner.
64
+ void Resume(
65
+ absl::AnyInvocable<void(grpc_transport_stream_op_batch*)> start_batch) {
66
+ Resume(std::move(start_batch), YieldCallCombiner);
67
+ }
68
+ void Resume(
69
+ absl::AnyInvocable<void(grpc_transport_stream_op_batch*)> start_batch,
70
+ YieldCallCombinerPredicate yield_call_combiner_predicate);
71
+
66
72
  // Fails all queued batches.
67
73
  // Must be called from within the call combiner.
68
74
  // If yield_call_combiner_predicate returns true, assumes responsibility for