grpc 1.75.0.pre1 → 1.76.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 (387) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +18 -5
  3. data/include/grpc/credentials.h +21 -5
  4. data/src/core/call/call_filters.cc +4 -4
  5. data/src/core/call/call_filters.h +36 -36
  6. data/src/core/call/call_spine.h +27 -27
  7. data/src/core/call/client_call.cc +6 -5
  8. data/src/core/call/filter_fusion.h +5 -5
  9. data/src/core/call/metadata_batch.h +3 -3
  10. data/src/core/call/security_context.cc +1 -1
  11. data/src/core/call/server_call.cc +4 -4
  12. data/src/core/call/server_call.h +1 -1
  13. data/src/core/channelz/channelz.cc +12 -18
  14. data/src/core/channelz/channelz.h +32 -16
  15. data/src/core/channelz/channelz_registry.h +11 -0
  16. data/src/core/channelz/property_list.cc +18 -0
  17. data/src/core/channelz/property_list.h +10 -1
  18. data/src/core/channelz/text_encode.cc +66 -0
  19. data/src/core/channelz/text_encode.h +29 -0
  20. data/src/core/channelz/v2tov1/convert.cc +11 -0
  21. data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
  22. data/src/core/channelz/ztrace_collector.h +247 -86
  23. data/src/core/client_channel/backup_poller.cc +5 -6
  24. data/src/core/client_channel/client_channel.cc +20 -13
  25. data/src/core/client_channel/client_channel_filter.cc +53 -45
  26. data/src/core/client_channel/client_channel_filter.h +2 -2
  27. data/src/core/client_channel/client_channel_internal.h +3 -4
  28. data/src/core/client_channel/config_selector.h +3 -3
  29. data/src/core/client_channel/dynamic_filters.cc +3 -3
  30. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  31. data/src/core/client_channel/global_subchannel_pool.h +0 -27
  32. data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
  33. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  34. data/src/core/client_channel/retry_filter.h +3 -3
  35. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  36. data/src/core/client_channel/subchannel.cc +8 -8
  37. data/src/core/client_channel/subchannel_stream_client.cc +4 -4
  38. data/src/core/config/config_vars.cc +30 -1
  39. data/src/core/config/config_vars.h +21 -0
  40. data/src/core/config/core_configuration.cc +5 -5
  41. data/src/core/config/core_configuration.h +7 -7
  42. data/src/core/config/load_config.cc +12 -0
  43. data/src/core/config/load_config.h +2 -0
  44. data/src/core/credentials/call/call_credentials.h +2 -2
  45. data/src/core/credentials/call/call_creds_util.cc +4 -3
  46. data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
  47. data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
  48. data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
  49. data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
  50. data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
  51. data/src/core/credentials/call/jwt/json_token.cc +3 -3
  52. data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
  53. data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
  54. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
  55. data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
  56. data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
  57. data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
  58. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
  59. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  60. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  61. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  62. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +5 -5
  63. data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
  64. data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
  65. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  66. data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
  67. data/src/core/credentials/transport/security_connector.cc +5 -5
  68. data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
  69. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  70. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
  71. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  72. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
  73. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
  74. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
  75. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
  76. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
  77. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
  78. data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
  79. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
  80. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
  81. data/src/core/credentials/transport/transport_credentials.cc +2 -2
  82. data/src/core/credentials/transport/transport_credentials.h +2 -2
  83. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  84. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
  85. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
  86. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  87. data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
  88. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
  89. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
  92. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
  95. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  96. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
  97. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
  98. data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
  99. data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
  101. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
  102. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
  103. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
  104. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
  105. data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
  106. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
  107. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
  108. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  109. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
  110. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
  111. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
  112. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  114. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
  115. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
  116. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
  117. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
  118. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
  119. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
  120. data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
  121. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
  122. data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
  123. data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
  124. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
  125. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
  127. data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
  128. data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
  129. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
  130. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
  131. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  132. data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
  133. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  134. data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
  135. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
  137. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
  138. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
  139. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  140. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  141. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  142. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  143. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  144. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  145. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  146. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  147. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  148. data/src/core/filter/auth/server_auth_filter.cc +2 -2
  149. data/src/core/handshaker/handshaker.cc +3 -3
  150. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
  151. data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
  152. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
  153. data/src/core/handshaker/security/secure_endpoint.cc +16 -6
  154. data/src/core/handshaker/security/security_handshaker.cc +3 -3
  155. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
  156. data/src/core/lib/channel/channel_stack.cc +8 -5
  157. data/src/core/lib/channel/channel_stack.h +3 -0
  158. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
  159. data/src/core/lib/channel/connected_channel.cc +2 -2
  160. data/src/core/lib/channel/promise_based_filter.cc +69 -64
  161. data/src/core/lib/channel/promise_based_filter.h +16 -15
  162. data/src/core/lib/compression/compression_internal.cc +2 -2
  163. data/src/core/lib/compression/message_compress.cc +7 -7
  164. data/src/core/lib/event_engine/ares_resolver.cc +22 -20
  165. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
  166. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
  167. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
  168. data/src/core/lib/event_engine/extensions/channelz.h +2 -2
  169. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  170. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
  171. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
  172. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
  173. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
  174. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
  175. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
  176. data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
  177. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
  178. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
  179. data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
  180. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  181. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +3 -3
  182. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  183. data/src/core/lib/event_engine/shim.cc +8 -11
  184. data/src/core/lib/event_engine/shim.h +2 -1
  185. data/src/core/lib/event_engine/slice.cc +2 -2
  186. data/src/core/lib/event_engine/tcp_socket_utils.cc +11 -11
  187. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
  188. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
  189. data/src/core/lib/event_engine/windows/iocp.cc +10 -10
  190. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  191. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
  192. data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
  193. data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
  194. data/src/core/lib/experiments/experiments.cc +105 -18
  195. data/src/core/lib/experiments/experiments.h +43 -11
  196. data/src/core/lib/iomgr/call_combiner.cc +3 -3
  197. data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
  198. data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
  199. data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
  200. data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
  201. data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
  202. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
  203. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  204. data/src/core/lib/iomgr/iocp_windows.cc +8 -8
  205. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  206. data/src/core/lib/iomgr/lockfree_event.cc +2 -2
  207. data/src/core/lib/iomgr/polling_entity.cc +3 -3
  208. data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
  209. data/src/core/lib/iomgr/socket_windows.cc +4 -4
  210. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
  211. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  212. data/src/core/lib/iomgr/tcp_posix.cc +42 -42
  213. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  214. data/src/core/lib/iomgr/tcp_server.h +7 -0
  215. data/src/core/lib/iomgr/tcp_server_posix.cc +47 -27
  216. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  217. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
  218. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  219. data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
  220. data/src/core/lib/iomgr/tcp_windows.cc +7 -7
  221. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  222. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  223. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  224. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  225. data/src/core/lib/promise/activity.cc +2 -2
  226. data/src/core/lib/promise/activity.h +6 -6
  227. data/src/core/lib/promise/context.h +2 -2
  228. data/src/core/lib/promise/detail/join_state.h +9 -9
  229. data/src/core/lib/promise/detail/seq_state.h +13 -13
  230. data/src/core/lib/promise/detail/status.h +2 -2
  231. data/src/core/lib/promise/for_each.h +5 -5
  232. data/src/core/lib/promise/interceptor_list.h +2 -2
  233. data/src/core/lib/promise/latch.h +7 -7
  234. data/src/core/lib/promise/mpsc.cc +26 -26
  235. data/src/core/lib/promise/mpsc.h +2 -2
  236. data/src/core/lib/promise/observable.h +4 -4
  237. data/src/core/lib/promise/party.cc +32 -25
  238. data/src/core/lib/promise/party.h +16 -19
  239. data/src/core/lib/promise/pipe.h +15 -15
  240. data/src/core/lib/promise/poll.h +5 -4
  241. data/src/core/lib/promise/promise.h +0 -2
  242. data/src/core/lib/promise/sleep.cc +3 -1
  243. data/src/core/lib/promise/status_flag.h +7 -7
  244. data/src/core/lib/promise/try_join.h +2 -2
  245. data/src/core/lib/promise/try_seq.h +2 -2
  246. data/src/core/lib/resource_quota/arena.h +15 -2
  247. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  248. data/src/core/lib/resource_quota/memory_quota.cc +45 -24
  249. data/src/core/lib/resource_quota/memory_quota.h +48 -16
  250. data/src/core/lib/resource_quota/telemetry.h +54 -0
  251. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  252. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  253. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  254. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  255. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  256. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  257. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  258. data/src/core/lib/surface/call.cc +16 -14
  259. data/src/core/lib/surface/call.h +1 -1
  260. data/src/core/lib/surface/call_utils.cc +2 -2
  261. data/src/core/lib/surface/call_utils.h +2 -2
  262. data/src/core/lib/surface/channel.cc +4 -4
  263. data/src/core/lib/surface/channel_create.cc +10 -6
  264. data/src/core/lib/surface/channel_init.cc +80 -23
  265. data/src/core/lib/surface/channel_init.h +26 -11
  266. data/src/core/lib/surface/completion_queue.cc +17 -16
  267. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  268. data/src/core/lib/surface/connection_context.h +45 -2
  269. data/src/core/lib/surface/filter_stack_call.cc +12 -23
  270. data/src/core/lib/surface/filter_stack_call.h +3 -4
  271. data/src/core/lib/surface/legacy_channel.cc +7 -7
  272. data/src/core/lib/surface/validate_metadata.h +2 -2
  273. data/src/core/lib/surface/version.cc +2 -2
  274. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  275. data/src/core/lib/transport/bdp_estimator.h +3 -3
  276. data/src/core/lib/transport/promise_endpoint.cc +3 -3
  277. data/src/core/lib/transport/promise_endpoint.h +8 -8
  278. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  279. data/src/core/load_balancing/child_policy_handler.cc +4 -4
  280. data/src/core/load_balancing/endpoint_list.cc +2 -2
  281. data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
  282. data/src/core/load_balancing/health_check_client.cc +4 -4
  283. data/src/core/load_balancing/health_check_client_internal.h +2 -2
  284. data/src/core/load_balancing/lb_policy_registry.cc +2 -2
  285. data/src/core/load_balancing/oob_backend_metric.cc +4 -4
  286. data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
  287. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  288. data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
  289. data/src/core/load_balancing/priority/priority.cc +23 -24
  290. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
  291. data/src/core/load_balancing/rls/rls.cc +13 -13
  292. data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
  293. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  294. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -26
  295. data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
  296. data/src/core/load_balancing/xds/cds.cc +76 -32
  297. data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
  298. data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
  299. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  300. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
  301. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
  302. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
  303. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
  304. data/src/core/resolver/endpoint_addresses.cc +3 -3
  305. data/src/core/resolver/endpoint_addresses.h +3 -0
  306. data/src/core/resolver/fake/fake_resolver.cc +2 -2
  307. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
  308. data/src/core/resolver/polling_resolver.cc +3 -3
  309. data/src/core/resolver/resolver_registry.cc +5 -4
  310. data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
  311. data/src/core/resolver/xds/xds_resolver.cc +9 -9
  312. data/src/core/server/server.cc +38 -38
  313. data/src/core/server/server_call_tracer_filter.h +4 -4
  314. data/src/core/server/server_config_selector_filter.cc +2 -2
  315. data/src/core/server/xds_server_config_fetcher.cc +9 -8
  316. data/src/core/service_config/service_config_impl.h +2 -2
  317. data/src/core/telemetry/call_tracer.cc +39 -49
  318. data/src/core/telemetry/call_tracer.h +199 -22
  319. data/src/core/telemetry/histogram.h +205 -0
  320. data/src/core/telemetry/instrument.cc +719 -0
  321. data/src/core/telemetry/instrument.h +932 -0
  322. data/src/core/telemetry/metrics.cc +13 -5
  323. data/src/core/telemetry/metrics.h +3 -1
  324. data/src/core/telemetry/stats_data.cc +0 -19
  325. data/src/core/telemetry/stats_data.h +0 -19
  326. data/src/core/transport/auth_context.cc +2 -2
  327. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  329. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -31
  331. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
  332. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
  335. data/src/core/tsi/fake_transport_security.cc +4 -4
  336. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
  338. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
  339. data/src/core/tsi/ssl_transport_security.cc +26 -25
  340. data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
  341. data/src/core/util/chunked_vector.h +4 -4
  342. data/src/core/util/event_log.cc +2 -2
  343. data/src/core/util/gcp_metadata_query.cc +2 -2
  344. data/src/core/util/grpc_check.cc +22 -0
  345. data/src/core/util/grpc_check.h +103 -0
  346. data/src/core/util/http_client/httpcli.cc +3 -3
  347. data/src/core/util/http_client/parser.cc +4 -4
  348. data/src/core/util/latent_see.h +7 -4
  349. data/src/core/util/lru_cache.h +4 -4
  350. data/src/core/util/memory_usage.h +16 -0
  351. data/src/core/util/posix/directory_reader.cc +3 -2
  352. data/src/core/util/posix/sync.cc +24 -24
  353. data/src/core/util/postmortem_emit.cc +52 -0
  354. data/src/core/util/postmortem_emit.h +30 -0
  355. data/src/core/util/ref_counted_ptr.h +5 -0
  356. data/src/core/util/trie_lookup.h +170 -0
  357. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  358. data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
  359. data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
  360. data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
  361. data/src/core/xds/grpc/xds_client_grpc.h +4 -1
  362. data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
  363. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  364. data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
  365. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  366. data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
  367. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  368. data/src/core/xds/grpc/xds_matcher.h +432 -0
  369. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  370. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  371. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  372. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  373. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  374. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  375. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  376. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  377. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  378. data/src/core/xds/grpc/xds_route_config_parser.cc +6 -6
  379. data/src/core/xds/grpc/xds_routing.cc +3 -3
  380. data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
  381. data/src/core/xds/xds_client/lrs_client.cc +6 -6
  382. data/src/core/xds/xds_client/xds_client.cc +9 -9
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  384. data/src/ruby/lib/grpc/version.rb +1 -1
  385. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  386. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  387. metadata +37 -2
@@ -19,8 +19,8 @@
19
19
  #include <memory>
20
20
  #include <optional>
21
21
 
22
- #include "absl/log/check.h"
23
22
  #include "src/core/util/crash.h"
23
+ #include "src/core/util/grpc_check.h"
24
24
 
25
25
  namespace grpc_core {
26
26
 
@@ -50,7 +50,7 @@ GlobalInstrumentsRegistry::RegisterInstrument(
50
50
  }
51
51
  }
52
52
  InstrumentID index = instruments.size();
53
- CHECK_LT(index, std::numeric_limits<uint32_t>::max());
53
+ GRPC_CHECK_LT(index, std::numeric_limits<uint32_t>::max());
54
54
  GlobalInstrumentDescriptor descriptor;
55
55
  descriptor.value_type = value_type;
56
56
  descriptor.instrument_type = instrument_type;
@@ -101,23 +101,31 @@ RegisteredMetricCallback::~RegisteredMetricCallback() {
101
101
 
102
102
  void GlobalStatsPluginRegistry::StatsPluginGroup::AddClientCallTracers(
103
103
  const Slice& path, bool registered_method, Arena* arena) {
104
+ absl::InlinedVector<ClientCallTracerInterface*, 3> tracers;
104
105
  for (auto& state : plugins_state_) {
105
106
  auto* call_tracer = state.plugin->GetClientCallTracer(
106
107
  path, registered_method, state.scope_config);
107
108
  if (call_tracer != nullptr) {
108
- AddClientCallTracerToContext(arena, call_tracer);
109
+ tracers.push_back(call_tracer);
109
110
  }
110
111
  }
112
+ SetClientCallTracer(arena, tracers);
111
113
  }
112
114
 
113
115
  void GlobalStatsPluginRegistry::StatsPluginGroup::AddServerCallTracers(
114
- Arena* arena) {
116
+ Arena* arena,
117
+ absl::Span<ServerCallTracerInterface* const> additional_tracers) {
118
+ absl::InlinedVector<ServerCallTracerInterface*, 3> tracers;
119
+ for (auto* tracer : additional_tracers) {
120
+ if (tracer != nullptr) tracers.push_back(tracer);
121
+ }
115
122
  for (auto& state : plugins_state_) {
116
123
  auto* call_tracer = state.plugin->GetServerCallTracer(state.scope_config);
117
124
  if (call_tracer != nullptr) {
118
- AddServerCallTracerToContext(arena, call_tracer);
125
+ tracers.push_back(call_tracer);
119
126
  }
120
127
  }
128
+ SetServerCallTracer(arena, tracers);
121
129
  }
122
130
 
123
131
  int GlobalStatsPluginRegistry::StatsPluginGroup::ChannelArgsCompare(
@@ -474,7 +474,9 @@ class GlobalStatsPluginRegistry {
474
474
  Arena* arena);
475
475
  // Adds all available server call tracers associated with the stats plugins
476
476
  // within the group to \a call_context.
477
- void AddServerCallTracers(Arena* arena);
477
+ void AddServerCallTracers(
478
+ Arena* arena,
479
+ absl::Span<ServerCallTracerInterface* const> additional_tracers);
478
480
 
479
481
  static absl::string_view ChannelArgName() {
480
482
  return "grpc.internal.stats_plugin_group";
@@ -391,9 +391,6 @@ const absl::string_view
391
391
  "client_subchannels_created",
392
392
  "server_channels_created",
393
393
  "insecure_connections_created",
394
- "rq_connections_dropped",
395
- "rq_calls_dropped",
396
- "rq_calls_rejected",
397
394
  "syscall_write",
398
395
  "syscall_read",
399
396
  "tcp_read_alloc_8k",
@@ -424,9 +421,6 @@ const absl::string_view GlobalStats::counter_doc[static_cast<int>(
424
421
  "Number of client subchannels created",
425
422
  "Number of server channels created",
426
423
  "Number of insecure connections created",
427
- "Number of connections dropped due to resource quota exceeded",
428
- "Number of calls dropped due to resource quota exceeded",
429
- "Number of calls rejected (never started) due to resource quota exceeded",
430
424
  "Number of write syscalls (or equivalent - eg sendmsg) made by this "
431
425
  "process",
432
426
  "Number of read syscalls (or equivalent - eg recvmsg) made by this process",
@@ -519,9 +513,6 @@ GlobalStats::GlobalStats()
519
513
  client_subchannels_created{0},
520
514
  server_channels_created{0},
521
515
  insecure_connections_created{0},
522
- rq_connections_dropped{0},
523
- rq_calls_dropped{0},
524
- rq_calls_rejected{0},
525
516
  syscall_write{0},
526
517
  syscall_read{0},
527
518
  tcp_read_alloc_8k{0},
@@ -643,12 +634,6 @@ std::unique_ptr<GlobalStats> GlobalStatsCollector::Collect() const {
643
634
  data.server_channels_created.load(std::memory_order_relaxed);
644
635
  result->insecure_connections_created +=
645
636
  data.insecure_connections_created.load(std::memory_order_relaxed);
646
- result->rq_connections_dropped +=
647
- data.rq_connections_dropped.load(std::memory_order_relaxed);
648
- result->rq_calls_dropped +=
649
- data.rq_calls_dropped.load(std::memory_order_relaxed);
650
- result->rq_calls_rejected +=
651
- data.rq_calls_rejected.load(std::memory_order_relaxed);
652
637
  result->syscall_write += data.syscall_write.load(std::memory_order_relaxed);
653
638
  result->syscall_read += data.syscall_read.load(std::memory_order_relaxed);
654
639
  result->tcp_read_alloc_8k +=
@@ -746,10 +731,6 @@ std::unique_ptr<GlobalStats> GlobalStats::Diff(const GlobalStats& other) const {
746
731
  server_channels_created - other.server_channels_created;
747
732
  result->insecure_connections_created =
748
733
  insecure_connections_created - other.insecure_connections_created;
749
- result->rq_connections_dropped =
750
- rq_connections_dropped - other.rq_connections_dropped;
751
- result->rq_calls_dropped = rq_calls_dropped - other.rq_calls_dropped;
752
- result->rq_calls_rejected = rq_calls_rejected - other.rq_calls_rejected;
753
734
  result->syscall_write = syscall_write - other.syscall_write;
754
735
  result->syscall_read = syscall_read - other.syscall_read;
755
736
  result->tcp_read_alloc_8k = tcp_read_alloc_8k - other.tcp_read_alloc_8k;
@@ -277,9 +277,6 @@ struct GlobalStats {
277
277
  kClientSubchannelsCreated,
278
278
  kServerChannelsCreated,
279
279
  kInsecureConnectionsCreated,
280
- kRqConnectionsDropped,
281
- kRqCallsDropped,
282
- kRqCallsRejected,
283
280
  kSyscallWrite,
284
281
  kSyscallRead,
285
282
  kTcpReadAlloc8k,
@@ -347,9 +344,6 @@ struct GlobalStats {
347
344
  uint64_t client_subchannels_created;
348
345
  uint64_t server_channels_created;
349
346
  uint64_t insecure_connections_created;
350
- uint64_t rq_connections_dropped;
351
- uint64_t rq_calls_dropped;
352
- uint64_t rq_calls_rejected;
353
347
  uint64_t syscall_write;
354
348
  uint64_t syscall_read;
355
349
  uint64_t tcp_read_alloc_8k;
@@ -430,16 +424,6 @@ class GlobalStatsCollector {
430
424
  data_.this_cpu().insecure_connections_created.fetch_add(
431
425
  1, std::memory_order_relaxed);
432
426
  }
433
- void IncrementRqConnectionsDropped() {
434
- data_.this_cpu().rq_connections_dropped.fetch_add(
435
- 1, std::memory_order_relaxed);
436
- }
437
- void IncrementRqCallsDropped() {
438
- data_.this_cpu().rq_calls_dropped.fetch_add(1, std::memory_order_relaxed);
439
- }
440
- void IncrementRqCallsRejected() {
441
- data_.this_cpu().rq_calls_rejected.fetch_add(1, std::memory_order_relaxed);
442
- }
443
427
  void IncrementSyscallWrite() {
444
428
  data_.this_cpu().syscall_write.fetch_add(1, std::memory_order_relaxed);
445
429
  }
@@ -598,9 +582,6 @@ class GlobalStatsCollector {
598
582
  std::atomic<uint64_t> client_subchannels_created{0};
599
583
  std::atomic<uint64_t> server_channels_created{0};
600
584
  std::atomic<uint64_t> insecure_connections_created{0};
601
- std::atomic<uint64_t> rq_connections_dropped{0};
602
- std::atomic<uint64_t> rq_calls_dropped{0};
603
- std::atomic<uint64_t> rq_calls_rejected{0};
604
585
  std::atomic<uint64_t> syscall_write{0};
605
586
  std::atomic<uint64_t> syscall_read{0};
606
587
  std::atomic<uint64_t> tcp_read_alloc_8k{0};
@@ -25,13 +25,13 @@
25
25
 
26
26
  #include <algorithm>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/log/log.h"
30
29
  #include "src/core/config/core_configuration.h"
31
30
  #include "src/core/lib/channel/channel_args.h"
32
31
  #include "src/core/lib/debug/trace.h"
33
32
  #include "src/core/lib/iomgr/exec_ctx.h"
34
33
  #include "src/core/lib/resource_quota/arena.h"
34
+ #include "src/core/util/grpc_check.h"
35
35
  #include "src/core/util/ref_counted_ptr.h"
36
36
 
37
37
  void grpc_auth_context_release(grpc_auth_context* context) {
@@ -99,7 +99,7 @@ const grpc_auth_property* grpc_auth_property_iterator_next(
99
99
  while (it->index < it->ctx->properties().count) {
100
100
  const grpc_auth_property* prop =
101
101
  &it->ctx->properties().array[it->index++];
102
- CHECK_NE(prop->name, nullptr);
102
+ GRPC_CHECK_NE(prop->name, nullptr);
103
103
  if (strcmp(it->name, prop->name) == 0) {
104
104
  return prop;
105
105
  }
@@ -23,19 +23,18 @@
23
23
  #include <grpc/support/port_platform.h>
24
24
 
25
25
  #include <list>
26
+ #include <memory>
27
+ #include <string>
26
28
 
27
- #include "absl/log/check.h"
28
29
  #include "absl/log/log.h"
29
30
  #include "absl/strings/numbers.h"
30
31
  #include "absl/strings/str_split.h"
31
- #include "src/core/lib/slice/slice_internal.h"
32
32
  #include "src/core/lib/surface/call.h"
33
33
  #include "src/core/lib/surface/channel.h"
34
- #include "src/core/tsi/alts/handshaker/alts_shared_resource.h"
35
34
  #include "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h"
36
35
  #include "src/core/tsi/alts/handshaker/alts_tsi_utils.h"
37
- #include "src/core/util/crash.h"
38
36
  #include "src/core/util/env.h"
37
+ #include "src/core/util/grpc_check.h"
39
38
  #include "src/core/util/sync.h"
40
39
  #include "upb/mem/arena.hpp"
41
40
 
@@ -119,13 +118,13 @@ typedef struct alts_grpc_handshaker_client {
119
118
 
120
119
  static void handshaker_client_send_buffer_destroy(
121
120
  alts_grpc_handshaker_client* client) {
122
- CHECK_NE(client, nullptr);
121
+ GRPC_CHECK_NE(client, nullptr);
123
122
  grpc_byte_buffer_destroy(client->send_buffer);
124
123
  client->send_buffer = nullptr;
125
124
  }
126
125
 
127
126
  static bool is_handshake_finished_properly(grpc_gcp_HandshakerResp* resp) {
128
- CHECK_NE(resp, nullptr);
127
+ GRPC_CHECK_NE(resp, nullptr);
129
128
  return grpc_gcp_HandshakerResp_result(resp) != nullptr;
130
129
  }
131
130
 
@@ -158,7 +157,7 @@ static void maybe_complete_tsi_next(
158
157
  grpc_core::MutexLock lock(&client->mu);
159
158
  client->receive_status_finished |= receive_status_finished;
160
159
  if (pending_recv_message_result != nullptr) {
161
- CHECK_EQ(client->pending_recv_message_result, nullptr);
160
+ GRPC_CHECK_EQ(client->pending_recv_message_result, nullptr);
162
161
  client->pending_recv_message_result = pending_recv_message_result;
163
162
  }
164
163
  if (client->pending_recv_message_result == nullptr) {
@@ -199,7 +198,7 @@ static void handle_response_done(alts_grpc_handshaker_client* client,
199
198
 
200
199
  void alts_handshaker_client_handle_response(alts_handshaker_client* c,
201
200
  bool is_ok) {
202
- CHECK_NE(c, nullptr);
201
+ GRPC_CHECK_NE(c, nullptr);
203
202
  alts_grpc_handshaker_client* client =
204
203
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
205
204
  grpc_byte_buffer* recv_buffer = client->recv_buffer;
@@ -313,7 +312,7 @@ void alts_handshaker_client_handle_response(alts_handshaker_client* c,
313
312
 
314
313
  static tsi_result continue_make_grpc_call(alts_grpc_handshaker_client* client,
315
314
  bool is_start) {
316
- CHECK_NE(client, nullptr);
315
+ GRPC_CHECK_NE(client, nullptr);
317
316
  grpc_op ops[kHandshakerClientOpNum];
318
317
  memset(ops, 0, sizeof(ops));
319
318
  grpc_op* op = ops;
@@ -326,34 +325,34 @@ static tsi_result continue_make_grpc_call(alts_grpc_handshaker_client* client,
326
325
  op->flags = 0;
327
326
  op->reserved = nullptr;
328
327
  op++;
329
- CHECK(op - ops <= kHandshakerClientOpNum);
328
+ GRPC_CHECK(op - ops <= kHandshakerClientOpNum);
330
329
  gpr_ref(&client->refs);
331
330
  grpc_call_error call_error =
332
331
  client->grpc_caller(client->call, ops, static_cast<size_t>(op - ops),
333
332
  &client->on_status_received);
334
333
  // TODO(apolcyn): return the error here instead, as done for other ops?
335
- CHECK_EQ(call_error, GRPC_CALL_OK);
334
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
336
335
  memset(ops, 0, sizeof(ops));
337
336
  op = ops;
338
337
  op->op = GRPC_OP_SEND_INITIAL_METADATA;
339
338
  op->data.send_initial_metadata.count = 0;
340
339
  op++;
341
- CHECK(op - ops <= kHandshakerClientOpNum);
340
+ GRPC_CHECK(op - ops <= kHandshakerClientOpNum);
342
341
  op->op = GRPC_OP_RECV_INITIAL_METADATA;
343
342
  op->data.recv_initial_metadata.recv_initial_metadata =
344
343
  &client->recv_initial_metadata;
345
344
  op++;
346
- CHECK(op - ops <= kHandshakerClientOpNum);
345
+ GRPC_CHECK(op - ops <= kHandshakerClientOpNum);
347
346
  }
348
347
  op->op = GRPC_OP_SEND_MESSAGE;
349
348
  op->data.send_message.send_message = client->send_buffer;
350
349
  op++;
351
- CHECK(op - ops <= kHandshakerClientOpNum);
350
+ GRPC_CHECK(op - ops <= kHandshakerClientOpNum);
352
351
  op->op = GRPC_OP_RECV_MESSAGE;
353
352
  op->data.recv_message.recv_message = &client->recv_buffer;
354
353
  op++;
355
- CHECK(op - ops <= kHandshakerClientOpNum);
356
- CHECK_NE(client->grpc_caller, nullptr);
354
+ GRPC_CHECK(op - ops <= kHandshakerClientOpNum);
355
+ GRPC_CHECK_NE(client->grpc_caller, nullptr);
357
356
  if (client->grpc_caller(client->call, ops, static_cast<size_t>(op - ops),
358
357
  &client->on_handshaker_service_resp_recv) !=
359
358
  GRPC_CALL_OK) {
@@ -451,7 +450,7 @@ void HandshakeDone(bool is_client) {
451
450
  /// make a grpc call.
452
451
  ///
453
452
  static tsi_result make_grpc_call(alts_handshaker_client* c, bool is_start) {
454
- CHECK_NE(c, nullptr);
453
+ GRPC_CHECK_NE(c, nullptr);
455
454
  alts_grpc_handshaker_client* client =
456
455
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
457
456
  if (is_start) {
@@ -500,7 +499,7 @@ static grpc_byte_buffer* get_serialized_handshaker_req(
500
499
  // Create and populate a client_start handshaker request, then serialize it.
501
500
  static grpc_byte_buffer* get_serialized_start_client(
502
501
  alts_handshaker_client* c) {
503
- CHECK_NE(c, nullptr);
502
+ GRPC_CHECK_NE(c, nullptr);
504
503
  alts_grpc_handshaker_client* client =
505
504
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
506
505
  upb::Arena arena;
@@ -512,9 +511,17 @@ static grpc_byte_buffer* get_serialized_start_client(
512
511
  grpc_gcp_StartClientHandshakeReq_add_application_protocols(
513
512
  start_client, upb_StringView_FromString(ALTS_APPLICATION_PROTOCOL),
514
513
  arena.ptr());
515
- grpc_gcp_StartClientHandshakeReq_add_record_protocols(
516
- start_client, upb_StringView_FromString(ALTS_RECORD_PROTOCOL),
517
- arena.ptr());
514
+ if (client->options->record_protocols.empty()) {
515
+ grpc_gcp_StartClientHandshakeReq_add_record_protocols(
516
+ start_client, upb_StringView_FromString(ALTS_RECORD_PROTOCOL),
517
+ arena.ptr());
518
+ } else {
519
+ for (const auto& record_protocol : client->options->record_protocols) {
520
+ grpc_gcp_StartClientHandshakeReq_add_record_protocols(
521
+ start_client, upb_StringView_FromString(record_protocol.c_str()),
522
+ arena.ptr());
523
+ }
524
+ }
518
525
  grpc_gcp_RpcProtocolVersions* client_version =
519
526
  grpc_gcp_StartClientHandshakeReq_mutable_rpc_versions(start_client,
520
527
  arena.ptr());
@@ -536,6 +543,24 @@ static grpc_byte_buffer* get_serialized_start_client(
536
543
  upb_StringView_FromString(ptr->data));
537
544
  ptr = ptr->next;
538
545
  }
546
+ // This ensures the token string is available when the proto gets serialized.
547
+ absl::StatusOr<std::string> access_token = absl::NotFoundError("");
548
+ // Set access token if the token fetcher is available.
549
+ grpc::alts::TokenFetcher* token_fetcher =
550
+ (reinterpret_cast<grpc_alts_credentials_client_options*>(client->options))
551
+ ->token_fetcher.get();
552
+ if (token_fetcher != nullptr) {
553
+ access_token = token_fetcher->GetToken();
554
+ if (!access_token.ok()) {
555
+ LOG_EVERY_N_SEC(ERROR, 60)
556
+ << "Failed to get token from the token fetcher "
557
+ "in client start handshake: "
558
+ << access_token.status();
559
+ return nullptr;
560
+ }
561
+ grpc_gcp_StartClientHandshakeReq_set_access_token(
562
+ start_client, upb_StringView_FromString(access_token->c_str()));
563
+ }
539
564
  grpc_gcp_StartClientHandshakeReq_set_max_frame_size(
540
565
  start_client, static_cast<uint32_t>(client->max_frame_size));
541
566
  if (!client->preferred_transport_protocols.empty()) {
@@ -576,8 +601,8 @@ static tsi_result handshaker_client_start_client(alts_handshaker_client* c) {
576
601
  // Create and populate a start_server handshaker request, then serialize it.
577
602
  static grpc_byte_buffer* get_serialized_start_server(
578
603
  alts_handshaker_client* c, grpc_slice* bytes_received) {
579
- CHECK_NE(c, nullptr);
580
- CHECK_NE(bytes_received, nullptr);
604
+ GRPC_CHECK_NE(c, nullptr);
605
+ GRPC_CHECK_NE(bytes_received, nullptr);
581
606
  alts_grpc_handshaker_client* client =
582
607
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
583
608
 
@@ -591,8 +616,16 @@ static grpc_byte_buffer* get_serialized_start_server(
591
616
  arena.ptr());
592
617
  grpc_gcp_ServerHandshakeParameters* value =
593
618
  grpc_gcp_ServerHandshakeParameters_new(arena.ptr());
594
- grpc_gcp_ServerHandshakeParameters_add_record_protocols(
595
- value, upb_StringView_FromString(ALTS_RECORD_PROTOCOL), arena.ptr());
619
+ if (client->options->record_protocols.empty()) {
620
+ grpc_gcp_ServerHandshakeParameters_add_record_protocols(
621
+ value, upb_StringView_FromString(ALTS_RECORD_PROTOCOL), arena.ptr());
622
+ } else {
623
+ for (const auto& record_protocol : client->options->record_protocols) {
624
+ grpc_gcp_ServerHandshakeParameters_add_record_protocols(
625
+ value, upb_StringView_FromString(record_protocol.c_str()),
626
+ arena.ptr());
627
+ }
628
+ }
596
629
  grpc_gcp_StartServerHandshakeReq_handshake_parameters_set(
597
630
  start_server, grpc_gcp_ALTS, value, arena.ptr());
598
631
  grpc_gcp_StartServerHandshakeReq_set_in_bytes(
@@ -645,7 +678,7 @@ static tsi_result handshaker_client_start_server(alts_handshaker_client* c,
645
678
 
646
679
  // Create and populate a next handshaker request, then serialize it.
647
680
  static grpc_byte_buffer* get_serialized_next(grpc_slice* bytes_received) {
648
- CHECK_NE(bytes_received, nullptr);
681
+ GRPC_CHECK_NE(bytes_received, nullptr);
649
682
  upb::Arena arena;
650
683
  grpc_gcp_HandshakerReq* req = grpc_gcp_HandshakerReq_new(arena.ptr());
651
684
  grpc_gcp_NextHandshakeMessageReq* next =
@@ -683,7 +716,7 @@ static tsi_result handshaker_client_next(alts_handshaker_client* c,
683
716
  }
684
717
 
685
718
  static void handshaker_client_shutdown(alts_handshaker_client* c) {
686
- CHECK_NE(c, nullptr);
719
+ GRPC_CHECK_NE(c, nullptr);
687
720
  alts_grpc_handshaker_client* client =
688
721
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
689
722
  if (client->call != nullptr) {
@@ -789,8 +822,8 @@ namespace internal {
789
822
 
790
823
  void alts_handshaker_client_set_grpc_caller_for_testing(
791
824
  alts_handshaker_client* c, alts_grpc_caller caller) {
792
- CHECK(c != nullptr);
793
- CHECK_NE(caller, nullptr);
825
+ GRPC_CHECK(c != nullptr);
826
+ GRPC_CHECK_NE(caller, nullptr);
794
827
  alts_grpc_handshaker_client* client =
795
828
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
796
829
  client->grpc_caller = caller;
@@ -798,7 +831,7 @@ void alts_handshaker_client_set_grpc_caller_for_testing(
798
831
 
799
832
  grpc_byte_buffer* alts_handshaker_client_get_send_buffer_for_testing(
800
833
  alts_handshaker_client* c) {
801
- CHECK_NE(c, nullptr);
834
+ GRPC_CHECK_NE(c, nullptr);
802
835
  alts_grpc_handshaker_client* client =
803
836
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
804
837
  return client->send_buffer;
@@ -806,7 +839,7 @@ grpc_byte_buffer* alts_handshaker_client_get_send_buffer_for_testing(
806
839
 
807
840
  grpc_byte_buffer** alts_handshaker_client_get_recv_buffer_addr_for_testing(
808
841
  alts_handshaker_client* c) {
809
- CHECK_NE(c, nullptr);
842
+ GRPC_CHECK_NE(c, nullptr);
810
843
  alts_grpc_handshaker_client* client =
811
844
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
812
845
  return &client->recv_buffer;
@@ -814,7 +847,7 @@ grpc_byte_buffer** alts_handshaker_client_get_recv_buffer_addr_for_testing(
814
847
 
815
848
  grpc_metadata_array* alts_handshaker_client_get_initial_metadata_for_testing(
816
849
  alts_handshaker_client* c) {
817
- CHECK_NE(c, nullptr);
850
+ GRPC_CHECK_NE(c, nullptr);
818
851
  alts_grpc_handshaker_client* client =
819
852
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
820
853
  return &client->recv_initial_metadata;
@@ -822,7 +855,7 @@ grpc_metadata_array* alts_handshaker_client_get_initial_metadata_for_testing(
822
855
 
823
856
  void alts_handshaker_client_set_recv_bytes_for_testing(
824
857
  alts_handshaker_client* c, grpc_slice* recv_bytes) {
825
- CHECK_NE(c, nullptr);
858
+ GRPC_CHECK_NE(c, nullptr);
826
859
  alts_grpc_handshaker_client* client =
827
860
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
828
861
  client->recv_bytes = CSliceRef(*recv_bytes);
@@ -832,7 +865,7 @@ void alts_handshaker_client_set_fields_for_testing(
832
865
  alts_handshaker_client* c, alts_tsi_handshaker* handshaker,
833
866
  tsi_handshaker_on_next_done_cb cb, void* user_data,
834
867
  grpc_byte_buffer* recv_buffer, bool inject_read_failure) {
835
- CHECK_NE(c, nullptr);
868
+ GRPC_CHECK_NE(c, nullptr);
836
869
  alts_grpc_handshaker_client* client =
837
870
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
838
871
  client->handshaker = handshaker;
@@ -845,22 +878,22 @@ void alts_handshaker_client_set_fields_for_testing(
845
878
  void alts_handshaker_client_check_fields_for_testing(
846
879
  alts_handshaker_client* c, tsi_handshaker_on_next_done_cb cb,
847
880
  void* user_data, bool has_sent_start_message, grpc_slice* recv_bytes) {
848
- CHECK_NE(c, nullptr);
881
+ GRPC_CHECK_NE(c, nullptr);
849
882
  alts_grpc_handshaker_client* client =
850
883
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
851
- CHECK(client->cb == cb);
852
- CHECK(client->user_data == user_data);
884
+ GRPC_CHECK(client->cb == cb);
885
+ GRPC_CHECK(client->user_data == user_data);
853
886
  if (recv_bytes != nullptr) {
854
- CHECK_EQ(grpc_slice_cmp(client->recv_bytes, *recv_bytes), 0);
887
+ GRPC_CHECK_EQ(grpc_slice_cmp(client->recv_bytes, *recv_bytes), 0);
855
888
  }
856
- CHECK(alts_tsi_handshaker_get_has_sent_start_message_for_testing(
857
- client->handshaker) == has_sent_start_message);
889
+ GRPC_CHECK(alts_tsi_handshaker_get_has_sent_start_message_for_testing(
890
+ client->handshaker) == has_sent_start_message);
858
891
  }
859
892
 
860
893
  void alts_handshaker_client_set_vtable_for_testing(
861
894
  alts_handshaker_client* c, alts_handshaker_client_vtable* vtable) {
862
- CHECK_NE(c, nullptr);
863
- CHECK_NE(vtable, nullptr);
895
+ GRPC_CHECK_NE(c, nullptr);
896
+ GRPC_CHECK_NE(vtable, nullptr);
864
897
  alts_grpc_handshaker_client* client =
865
898
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
866
899
  client->base.vtable = vtable;
@@ -868,7 +901,7 @@ void alts_handshaker_client_set_vtable_for_testing(
868
901
 
869
902
  alts_tsi_handshaker* alts_handshaker_client_get_handshaker_for_testing(
870
903
  alts_handshaker_client* c) {
871
- CHECK_NE(c, nullptr);
904
+ GRPC_CHECK_NE(c, nullptr);
872
905
  alts_grpc_handshaker_client* client =
873
906
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
874
907
  return client->handshaker;
@@ -876,7 +909,7 @@ alts_tsi_handshaker* alts_handshaker_client_get_handshaker_for_testing(
876
909
 
877
910
  void alts_handshaker_client_set_cb_for_testing(
878
911
  alts_handshaker_client* c, tsi_handshaker_on_next_done_cb cb) {
879
- CHECK_NE(c, nullptr);
912
+ GRPC_CHECK_NE(c, nullptr);
880
913
  alts_grpc_handshaker_client* client =
881
914
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
882
915
  client->cb = cb;
@@ -884,7 +917,7 @@ void alts_handshaker_client_set_cb_for_testing(
884
917
 
885
918
  grpc_closure* alts_handshaker_client_get_closure_for_testing(
886
919
  alts_handshaker_client* c) {
887
- CHECK_NE(c, nullptr);
920
+ GRPC_CHECK_NE(c, nullptr);
888
921
  alts_grpc_handshaker_client* client =
889
922
  reinterpret_cast<alts_grpc_handshaker_client*>(c);
890
923
  return &client->on_handshaker_service_resp_recv;
@@ -32,6 +32,7 @@
32
32
  #define ALTS_SERVICE_METHOD "/grpc.gcp.HandshakerService/DoHandshake"
33
33
  #define ALTS_APPLICATION_PROTOCOL "grpc"
34
34
  #define ALTS_RECORD_PROTOCOL "ALTSRP_GCM_AES128_REKEY"
35
+ #define ALTS_INTEGRITY_ONLY_RECORD_PROTOCOL "ALTSRP_GCM_GMAC_128"
35
36
  #define ALTS_HANDSHAKER_SERVICE_URL_FOR_TESTING "lame"
36
37
 
37
38
  const size_t kAltsAes128GcmRekeyKeyLength = 44;
@@ -20,10 +20,10 @@
20
20
 
21
21
  #include <grpc/support/port_platform.h>
22
22
 
23
- #include "absl/log/check.h"
24
23
  #include "src/core/lib/channel/channel_args.h"
25
24
  #include "src/core/tsi/alts/handshaker/alts_handshaker_client.h"
26
25
  #include "src/core/util/crash.h"
26
+ #include "src/core/util/grpc_check.h"
27
27
 
28
28
  static alts_shared_resource_dedicated g_alts_resource_dedicated;
29
29
 
@@ -36,11 +36,11 @@ static void thread_worker(void* /*arg*/) {
36
36
  grpc_event event =
37
37
  grpc_completion_queue_next(g_alts_resource_dedicated.cq,
38
38
  gpr_inf_future(GPR_CLOCK_REALTIME), nullptr);
39
- CHECK(event.type != GRPC_QUEUE_TIMEOUT);
39
+ GRPC_CHECK(event.type != GRPC_QUEUE_TIMEOUT);
40
40
  if (event.type == GRPC_QUEUE_SHUTDOWN) {
41
41
  break;
42
42
  }
43
- CHECK(event.type == GRPC_OP_COMPLETE);
43
+ GRPC_CHECK(event.type == GRPC_OP_COMPLETE);
44
44
  alts_handshaker_client* client =
45
45
  static_cast<alts_handshaker_client*>(event.tag);
46
46
  alts_handshaker_client_handle_response(client, event.success);