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
@@ -31,7 +31,6 @@
31
31
  #include <string_view>
32
32
  #include <utility>
33
33
 
34
- #include "absl/log/check.h"
35
34
  #include "absl/strings/str_cat.h"
36
35
  #include "src/core/client_channel/client_channel_filter.h"
37
36
  #include "src/core/config/core_configuration.h"
@@ -56,6 +55,7 @@
56
55
  #include "src/core/lib/transport/connectivity_state.h"
57
56
  #include "src/core/util/debug_location.h"
58
57
  #include "src/core/util/down_cast.h"
58
+ #include "src/core/util/grpc_check.h"
59
59
  #include "src/core/util/orphanable.h"
60
60
  #include "src/core/util/ref_counted_ptr.h"
61
61
  #include "src/core/util/time.h"
@@ -79,7 +79,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
79
79
  factory_->interested_parties(), Slice::FromStaticString(method),
80
80
  /*authority=*/std::nullopt, Timestamp::InfFuture(),
81
81
  /*registered_method=*/true);
82
- CHECK_NE(call_, nullptr);
82
+ GRPC_CHECK_NE(call_, nullptr);
83
83
  // Init data associated with the call.
84
84
  grpc_metadata_array_init(&initial_metadata_recv_);
85
85
  grpc_metadata_array_init(&trailing_metadata_recv_);
@@ -109,7 +109,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
109
109
  this->Ref(DEBUG_LOCATION, "OnRecvInitialMetadata").release(), nullptr);
110
110
  call_error = grpc_call_start_batch_and_execute(
111
111
  call_, ops, static_cast<size_t>(op - ops), &on_recv_initial_metadata_);
112
- CHECK_EQ(call_error, GRPC_CALL_OK);
112
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
113
113
  // Start a batch for recv_trailing_metadata.
114
114
  memset(ops, 0, sizeof(ops));
115
115
  op = ops;
@@ -126,7 +126,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::GrpcStreamingCall(
126
126
  GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this, nullptr);
127
127
  call_error = grpc_call_start_batch_and_execute(
128
128
  call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
129
- CHECK_EQ(call_error, GRPC_CALL_OK);
129
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
130
130
  GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this, nullptr);
131
131
  }
132
132
 
@@ -136,12 +136,12 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
136
136
  grpc_byte_buffer_destroy(send_message_payload_);
137
137
  grpc_byte_buffer_destroy(recv_message_payload_);
138
138
  CSliceUnref(status_details_);
139
- CHECK_NE(call_, nullptr);
139
+ GRPC_CHECK_NE(call_, nullptr);
140
140
  grpc_call_unref(call_);
141
141
  }
142
142
 
143
143
  void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::Orphan() {
144
- CHECK_NE(call_, nullptr);
144
+ GRPC_CHECK_NE(call_, nullptr);
145
145
  // If we are here because xds_client wants to cancel the call,
146
146
  // OnStatusReceived() will complete the cancellation and clean up.
147
147
  // Otherwise, we are here because xds_client has to orphan a failed call,
@@ -165,7 +165,7 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::SendMessage(
165
165
  Ref(DEBUG_LOCATION, "OnRequestSent").release();
166
166
  grpc_call_error call_error =
167
167
  grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
168
- CHECK_EQ(call_error, GRPC_CALL_OK);
168
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
169
169
  }
170
170
 
171
171
  void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
@@ -175,10 +175,10 @@ void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
175
175
  memset(&op, 0, sizeof(op));
176
176
  op.op = GRPC_OP_RECV_MESSAGE;
177
177
  op.data.recv_message.recv_message = &recv_message_payload_;
178
- CHECK_NE(call_, nullptr);
178
+ GRPC_CHECK_NE(call_, nullptr);
179
179
  const grpc_call_error call_error =
180
180
  grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
181
- CHECK_EQ(call_error, GRPC_CALL_OK);
181
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
182
182
  }
183
183
 
184
184
  void GrpcXdsTransportFactory::GrpcXdsTransport::GrpcStreamingCall::
@@ -291,7 +291,7 @@ GrpcXdsTransportFactory::GrpcXdsTransport::GrpcXdsTransport(
291
291
  << "[GrpcXdsTransport " << this << "] created";
292
292
  channel_ = CreateXdsChannel(factory_->args_,
293
293
  DownCast<const GrpcXdsServerInterface&>(server));
294
- CHECK(channel_ != nullptr);
294
+ GRPC_CHECK(channel_ != nullptr);
295
295
  if (channel_->IsLame()) {
296
296
  *status = absl::UnavailableError("xds client has a lame channel");
297
297
  }
@@ -25,7 +25,6 @@
25
25
  #include <vector>
26
26
 
27
27
  #include "absl/cleanup/cleanup.h"
28
- #include "absl/log/check.h"
29
28
  #include "absl/log/log.h"
30
29
  #include "absl/strings/string_view.h"
31
30
  #include "envoy/config/core/v3/base.upb.h"
@@ -38,6 +37,7 @@
38
37
  #include "src/core/util/backoff.h"
39
38
  #include "src/core/util/debug_location.h"
40
39
  #include "src/core/util/env.h"
40
+ #include "src/core/util/grpc_check.h"
41
41
  #include "src/core/util/orphanable.h"
42
42
  #include "src/core/util/ref_counted_ptr.h"
43
43
  #include "src/core/util/string.h"
@@ -400,7 +400,7 @@ LrsClient::LrsChannel::LrsChannel(
400
400
  << " for server " << server_->server_uri();
401
401
  absl::Status status;
402
402
  transport_ = lrs_client_->transport_factory_->GetTransport(*server_, &status);
403
- CHECK(transport_ != nullptr);
403
+ GRPC_CHECK(transport_ != nullptr);
404
404
  if (!status.ok()) {
405
405
  LOG(ERROR) << "Error creating LRS channel to " << server_->server_uri()
406
406
  << ": " << status;
@@ -484,8 +484,8 @@ void LrsClient::LrsChannel::RetryableCall<T>::OnCallFinishedLocked() {
484
484
  template <typename T>
485
485
  void LrsClient::LrsChannel::RetryableCall<T>::StartNewCallLocked() {
486
486
  if (shutting_down_) return;
487
- CHECK(lrs_channel_->transport_ != nullptr);
488
- CHECK(call_ == nullptr);
487
+ GRPC_CHECK(lrs_channel_->transport_ != nullptr);
488
+ GRPC_CHECK(call_ == nullptr);
489
489
  GRPC_TRACE_LOG(xds_client, INFO)
490
490
  << "[lrs_client " << lrs_channel()->lrs_client() << "] lrs server "
491
491
  << lrs_channel()->server_->server_uri()
@@ -569,7 +569,7 @@ LrsClient::LrsChannel::LrsCall::LrsCall(
569
569
  // Init the LRS call. Note that the call will progress every time there's
570
570
  // activity in lrs_client()->interested_parties_, which is comprised of
571
571
  // the polling entities from client_channel.
572
- CHECK_NE(lrs_client(), nullptr);
572
+ GRPC_CHECK_NE(lrs_client(), nullptr);
573
573
  const char* method =
574
574
  "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats";
575
575
  streaming_call_ = lrs_channel()->transport_->CreateStreamingCall(
@@ -577,7 +577,7 @@ LrsClient::LrsChannel::LrsCall::LrsCall(
577
577
  // Passing the initial ref here. This ref will go away when
578
578
  // the StreamEventHandler is destroyed.
579
579
  RefCountedPtr<LrsCall>(this)));
580
- CHECK(streaming_call_ != nullptr);
580
+ GRPC_CHECK(streaming_call_ != nullptr);
581
581
  // Start the call.
582
582
  GRPC_TRACE_LOG(xds_client, INFO)
583
583
  << "[lrs_client " << lrs_client() << "] lrs server "
@@ -30,7 +30,6 @@
30
30
  #include <vector>
31
31
 
32
32
  #include "absl/cleanup/cleanup.h"
33
- #include "absl/log/check.h"
34
33
  #include "absl/log/log.h"
35
34
  #include "absl/strings/match.h"
36
35
  #include "absl/strings/str_cat.h"
@@ -48,6 +47,7 @@
48
47
  #include "src/core/util/backoff.h"
49
48
  #include "src/core/util/debug_location.h"
50
49
  #include "src/core/util/env.h"
50
+ #include "src/core/util/grpc_check.h"
51
51
  #include "src/core/util/orphanable.h"
52
52
  #include "src/core/util/ref_counted_ptr.h"
53
53
  #include "src/core/util/string.h"
@@ -423,7 +423,7 @@ XdsClient::XdsChannel::XdsChannel(WeakRefCountedPtr<XdsClient> xds_client,
423
423
  absl::Status status;
424
424
  transport_ =
425
425
  xds_client_->transport_factory_->GetTransport(*server.target(), &status);
426
- CHECK(transport_ != nullptr);
426
+ GRPC_CHECK(transport_ != nullptr);
427
427
  if (!status.ok()) {
428
428
  SetChannelStatusLocked(std::move(status));
429
429
  } else {
@@ -662,8 +662,8 @@ void XdsClient::XdsChannel::RetryableCall<T>::OnCallFinishedLocked() {
662
662
  template <typename T>
663
663
  void XdsClient::XdsChannel::RetryableCall<T>::StartNewCallLocked() {
664
664
  if (shutting_down_) return;
665
- CHECK(xds_channel_->transport_ != nullptr);
666
- CHECK(call_ == nullptr);
665
+ GRPC_CHECK(xds_channel_->transport_ != nullptr);
666
+ GRPC_CHECK(call_ == nullptr);
667
667
  GRPC_TRACE_LOG(xds_client, INFO)
668
668
  << "[xds_client " << xds_channel()->xds_client() << "] xds server "
669
669
  << xds_channel()->server_uri() << ": start new call from retryable call "
@@ -732,7 +732,7 @@ XdsClient::XdsChannel::AdsCall::AdsCall(
732
732
  : InternallyRefCounted<AdsCall>(
733
733
  GRPC_TRACE_FLAG_ENABLED(xds_client_refcount) ? "AdsCall" : nullptr),
734
734
  retryable_call_(std::move(retryable_call)) {
735
- CHECK_NE(xds_client(), nullptr);
735
+ GRPC_CHECK_NE(xds_client(), nullptr);
736
736
  // Init the ADS call.
737
737
  const char* method =
738
738
  "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
@@ -742,7 +742,7 @@ XdsClient::XdsChannel::AdsCall::AdsCall(
742
742
  // Passing the initial ref here. This ref will go away when
743
743
  // the StreamEventHandler is destroyed.
744
744
  RefCountedPtr<AdsCall>(this)));
745
- CHECK(streaming_call_ != nullptr);
745
+ GRPC_CHECK(streaming_call_ != nullptr);
746
746
  // Start the call.
747
747
  GRPC_TRACE_LOG(xds_client, INFO)
748
748
  << "[xds_client " << xds_client() << "] xds server "
@@ -1622,7 +1622,7 @@ XdsClient::XdsClient(
1622
1622
  metrics_reporter_(std::move(metrics_reporter)) {
1623
1623
  GRPC_TRACE_LOG(xds_client, INFO)
1624
1624
  << "[xds_client " << this << "] creating xds client";
1625
- CHECK(bootstrap_ != nullptr);
1625
+ GRPC_CHECK(bootstrap_ != nullptr);
1626
1626
  if (bootstrap_->node() != nullptr) {
1627
1627
  GRPC_TRACE_LOG(xds_client, INFO)
1628
1628
  << "[xds_client " << this
@@ -1852,7 +1852,7 @@ void XdsClient::MaybeRegisterResourceTypeLocked(
1852
1852
  const XdsResourceType* resource_type) {
1853
1853
  auto it = resource_types_.find(resource_type->type_url());
1854
1854
  if (it != resource_types_.end()) {
1855
- CHECK(it->second == resource_type);
1855
+ GRPC_CHECK(it->second == resource_type);
1856
1856
  return;
1857
1857
  }
1858
1858
  resource_types_.emplace(resource_type->type_url(), resource_type);
@@ -1903,7 +1903,7 @@ std::string XdsClient::ConstructFullXdsResourceName(
1903
1903
  auto uri = URI::Create("xdstp", /*user_info=*/"", std::string(authority),
1904
1904
  absl::StrCat("/", resource_type, "/", key.id),
1905
1905
  key.query_params, /*fragment=*/"");
1906
- CHECK(uri.ok());
1906
+ GRPC_CHECK(uri.ok());
1907
1907
  return uri->ToString();
1908
1908
  }
1909
1909
  // Old-style name.
@@ -132,7 +132,7 @@ extern grpc_metadata_credentials_create_from_plugin_type grpc_metadata_credentia
132
132
  typedef void(*grpc_call_credentials_release_type)(grpc_call_credentials* creds);
133
133
  extern grpc_call_credentials_release_type grpc_call_credentials_release_import;
134
134
  #define grpc_call_credentials_release grpc_call_credentials_release_import
135
- typedef grpc_channel_credentials*(*grpc_google_default_credentials_create_type)(grpc_call_credentials* call_creds_for_tls, grpc_call_credentials* call_creds_for_alts);
135
+ typedef grpc_channel_credentials*(*grpc_google_default_credentials_create_type)(grpc_call_credentials* call_creds_for_tls, grpc_google_default_credentials_options* options);
136
136
  extern grpc_google_default_credentials_create_type grpc_google_default_credentials_create_import;
137
137
  #define grpc_google_default_credentials_create grpc_google_default_credentials_create_import
138
138
  typedef grpc_ssl_server_certificate_config*(*grpc_ssl_server_certificate_config_create_type)(const char* pem_root_certs, const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs);
@@ -171,7 +171,7 @@ extern grpc_server_credentials_set_auth_metadata_processor_type grpc_server_cred
171
171
  typedef grpc_call_credentials*(*grpc_composite_call_credentials_create_type)(grpc_call_credentials* creds1, grpc_call_credentials* creds2, void* reserved);
172
172
  extern grpc_composite_call_credentials_create_type grpc_composite_call_credentials_create_import;
173
173
  #define grpc_composite_call_credentials_create grpc_composite_call_credentials_create_import
174
- typedef grpc_call_credentials*(*grpc_google_compute_engine_credentials_create_type)(void* reserved);
174
+ typedef grpc_call_credentials*(*grpc_google_compute_engine_credentials_create_type)(grpc_google_compute_engine_credentials_options* options);
175
175
  extern grpc_google_compute_engine_credentials_create_type grpc_google_compute_engine_credentials_create_import;
176
176
  #define grpc_google_compute_engine_credentials_create grpc_google_compute_engine_credentials_create_import
177
177
  typedef grpc_channel_credentials*(*grpc_composite_channel_credentials_create_type)(grpc_channel_credentials* channel_creds, grpc_call_credentials* call_creds, void* reserved);
@@ -14,5 +14,5 @@
14
14
 
15
15
  # GRPC contains the General RPC module.
16
16
  module GRPC
17
- VERSION = '1.75.0.pre1'
17
+ VERSION = '1.76.0.pre1'
18
18
  end
@@ -0,0 +1,95 @@
1
+ // Copyright 2018 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // Adapts a policy for nodes.
16
+ //
17
+ // The node policy should model:
18
+ //
19
+ // struct Policy {
20
+ // // Returns a new node allocated and constructed using the allocator, using
21
+ // // the specified arguments.
22
+ // template <class Alloc, class... Args>
23
+ // value_type* new_element(Alloc* alloc, Args&&... args) const;
24
+ //
25
+ // // Destroys and deallocates node using the allocator.
26
+ // template <class Alloc>
27
+ // void delete_element(Alloc* alloc, value_type* node) const;
28
+ // };
29
+ //
30
+ // It may also optionally define `value()` and `apply()`. For documentation on
31
+ // these, see hash_policy_traits.h.
32
+
33
+ #ifndef ABSL_CONTAINER_INTERNAL_NODE_SLOT_POLICY_H_
34
+ #define ABSL_CONTAINER_INTERNAL_NODE_SLOT_POLICY_H_
35
+
36
+ #include <cassert>
37
+ #include <cstddef>
38
+ #include <memory>
39
+ #include <type_traits>
40
+ #include <utility>
41
+
42
+ #include "absl/base/config.h"
43
+
44
+ namespace absl {
45
+ ABSL_NAMESPACE_BEGIN
46
+ namespace container_internal {
47
+
48
+ template <class Reference, class Policy>
49
+ struct node_slot_policy {
50
+ static_assert(std::is_lvalue_reference<Reference>::value, "");
51
+
52
+ using slot_type = typename std::remove_cv<
53
+ typename std::remove_reference<Reference>::type>::type*;
54
+
55
+ template <class Alloc, class... Args>
56
+ static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
57
+ *slot = Policy::new_element(alloc, std::forward<Args>(args)...);
58
+ }
59
+
60
+ template <class Alloc>
61
+ static void destroy(Alloc* alloc, slot_type* slot) {
62
+ Policy::delete_element(alloc, *slot);
63
+ }
64
+
65
+ // Returns true_type to indicate that transfer can use memcpy.
66
+ template <class Alloc>
67
+ static std::true_type transfer(Alloc*, slot_type* new_slot,
68
+ slot_type* old_slot) {
69
+ *new_slot = *old_slot;
70
+ return {};
71
+ }
72
+
73
+ static size_t space_used(const slot_type* slot) {
74
+ if (slot == nullptr) return Policy::element_space_used(nullptr);
75
+ return Policy::element_space_used(*slot);
76
+ }
77
+
78
+ static Reference element(slot_type* slot) { return **slot; }
79
+
80
+ template <class T, class P = Policy>
81
+ static auto value(T* elem) -> decltype(P::value(elem)) {
82
+ return P::value(elem);
83
+ }
84
+
85
+ template <class... Ts, class P = Policy>
86
+ static auto apply(Ts&&... ts) -> decltype(P::apply(std::forward<Ts>(ts)...)) {
87
+ return P::apply(std::forward<Ts>(ts)...);
88
+ }
89
+ };
90
+
91
+ } // namespace container_internal
92
+ ABSL_NAMESPACE_END
93
+ } // namespace absl
94
+
95
+ #endif // ABSL_CONTAINER_INTERNAL_NODE_SLOT_POLICY_H_