grpc 1.60.2 → 1.61.0.pre2

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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
  93. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
  94. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  95. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  96. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  97. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  98. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  99. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  103. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  104. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  105. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  106. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  107. data/src/core/ext/xds/xds_api.cc +31 -18
  108. data/src/core/ext/xds/xds_api.h +2 -2
  109. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  110. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  111. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  112. data/src/core/ext/xds/xds_client.cc +420 -414
  113. data/src/core/ext/xds/xds_client.h +31 -22
  114. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  115. data/src/core/ext/xds/xds_cluster.cc +104 -11
  116. data/src/core/ext/xds/xds_cluster.h +9 -1
  117. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  118. data/src/core/ext/xds/xds_common_types.cc +14 -10
  119. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  120. data/src/core/ext/xds/xds_endpoint.h +5 -1
  121. data/src/core/ext/xds/xds_health_status.cc +12 -2
  122. data/src/core/ext/xds/xds_health_status.h +4 -2
  123. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  124. data/src/core/ext/xds/xds_listener.cc +14 -8
  125. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  126. data/src/core/ext/xds/xds_route_config.cc +34 -22
  127. data/src/core/ext/xds/xds_route_config.h +1 -0
  128. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  129. data/src/core/ext/xds/xds_transport.h +3 -0
  130. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  131. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  132. data/src/core/lib/channel/call_tracer.cc +12 -0
  133. data/src/core/lib/channel/call_tracer.h +17 -3
  134. data/src/core/lib/channel/channel_args.cc +24 -14
  135. data/src/core/lib/channel/channel_args.h +74 -13
  136. data/src/core/lib/channel/channel_stack.cc +27 -0
  137. data/src/core/lib/channel/channel_stack.h +10 -10
  138. data/src/core/lib/channel/connected_channel.cc +64 -18
  139. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  140. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  141. data/src/core/lib/compression/compression_internal.cc +0 -3
  142. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  143. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  144. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  145. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  146. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  147. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  148. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  149. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  150. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  151. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  152. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  153. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  154. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  155. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  156. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  158. data/src/core/lib/experiments/config.cc +13 -0
  159. data/src/core/lib/experiments/config.h +3 -0
  160. data/src/core/lib/experiments/experiments.cc +245 -366
  161. data/src/core/lib/experiments/experiments.h +50 -156
  162. data/src/core/lib/gprpp/debug_location.h +13 -0
  163. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  164. data/src/core/lib/gprpp/orphanable.h +27 -0
  165. data/src/core/lib/gprpp/ref_counted.h +63 -22
  166. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  167. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  168. data/src/core/lib/gprpp/status_helper.cc +1 -2
  169. data/src/core/lib/iomgr/combiner.cc +15 -51
  170. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  173. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  174. data/src/core/lib/promise/activity.cc +17 -2
  175. data/src/core/lib/promise/activity.h +5 -4
  176. data/src/core/lib/promise/all_ok.h +80 -0
  177. data/src/core/lib/promise/detail/join_state.h +2077 -0
  178. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  179. data/src/core/lib/promise/detail/promise_like.h +8 -1
  180. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  181. data/src/core/lib/promise/detail/status.h +42 -5
  182. data/src/core/lib/promise/for_each.h +13 -1
  183. data/src/core/lib/promise/if.h +4 -0
  184. data/src/core/lib/promise/latch.h +6 -3
  185. data/src/core/lib/promise/party.cc +33 -31
  186. data/src/core/lib/promise/party.h +142 -6
  187. data/src/core/lib/promise/poll.h +39 -13
  188. data/src/core/lib/promise/promise.h +4 -0
  189. data/src/core/lib/promise/seq.h +107 -7
  190. data/src/core/lib/promise/status_flag.h +196 -0
  191. data/src/core/lib/promise/try_join.h +132 -0
  192. data/src/core/lib/promise/try_seq.h +132 -10
  193. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  194. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  195. data/src/core/lib/resource_quota/arena.h +2 -2
  196. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  197. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  198. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  199. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  203. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  207. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  210. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  211. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  212. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  213. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  215. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  216. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  217. data/src/core/lib/security/transport/auth_filters.h +71 -4
  218. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  219. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  220. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  221. data/src/core/lib/slice/slice_buffer.h +3 -0
  222. data/src/core/lib/surface/builtins.cc +1 -1
  223. data/src/core/lib/surface/call.cc +683 -196
  224. data/src/core/lib/surface/call.h +26 -13
  225. data/src/core/lib/surface/call_trace.cc +42 -1
  226. data/src/core/lib/surface/channel.cc +0 -1
  227. data/src/core/lib/surface/channel.h +0 -6
  228. data/src/core/lib/surface/channel_init.h +26 -0
  229. data/src/core/lib/surface/init.cc +14 -8
  230. data/src/core/lib/surface/server.cc +256 -237
  231. data/src/core/lib/surface/server.h +26 -54
  232. data/src/core/lib/surface/version.cc +2 -2
  233. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  234. data/src/core/lib/transport/call_final_info.cc +38 -0
  235. data/src/core/lib/transport/call_final_info.h +54 -0
  236. data/src/core/lib/transport/connectivity_state.cc +3 -2
  237. data/src/core/lib/transport/connectivity_state.h +4 -0
  238. data/src/core/lib/transport/metadata_batch.h +4 -4
  239. data/src/core/lib/transport/transport.cc +70 -19
  240. data/src/core/lib/transport/transport.h +395 -25
  241. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  242. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  243. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  244. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  245. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  246. data/src/core/tsi/ssl_transport_security.cc +65 -43
  247. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  248. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  249. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  250. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  251. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  252. data/src/ruby/lib/grpc/version.rb +1 -1
  253. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  254. data/third_party/zlib/adler32.c +5 -27
  255. data/third_party/zlib/compress.c +5 -16
  256. data/third_party/zlib/crc32.c +86 -162
  257. data/third_party/zlib/deflate.c +233 -336
  258. data/third_party/zlib/deflate.h +8 -8
  259. data/third_party/zlib/gzguts.h +11 -12
  260. data/third_party/zlib/infback.c +7 -23
  261. data/third_party/zlib/inffast.c +1 -4
  262. data/third_party/zlib/inffast.h +1 -1
  263. data/third_party/zlib/inflate.c +30 -99
  264. data/third_party/zlib/inftrees.c +6 -11
  265. data/third_party/zlib/inftrees.h +3 -3
  266. data/third_party/zlib/trees.c +224 -302
  267. data/third_party/zlib/uncompr.c +4 -12
  268. data/third_party/zlib/zconf.h +6 -2
  269. data/third_party/zlib/zlib.h +191 -188
  270. data/third_party/zlib/zutil.c +16 -44
  271. data/third_party/zlib/zutil.h +10 -10
  272. metadata +35 -13
  273. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  274. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  275. data/src/core/lib/transport/pid_controller.cc +0 -51
  276. data/src/core/lib/transport/pid_controller.h +0 -116
  277. data/third_party/upb/upb/collections/array.h +0 -17
  278. data/third_party/upb/upb/collections/map.h +0 -17
  279. data/third_party/upb/upb/upb.hpp +0 -18
@@ -34,6 +34,7 @@
34
34
  #include <grpc/event_engine/event_engine.h>
35
35
  #include <grpc/slice_buffer.h>
36
36
  #include <grpc/support/log.h>
37
+ #include <grpc/support/time.h>
37
38
 
38
39
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
39
40
  #include "src/core/ext/transport/chttp2/transport/context_list_entry.h"
@@ -217,15 +218,12 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
217
218
  ":peer_initwin=%d:t_win=%" PRId64 ":s_win=%d:s_delta=%" PRId64 "]",
218
219
  std::string(t->peer_string.as_string_view()).c_str(), t, s->id, staller,
219
220
  s->flow_controlled_buffer.length, s->flow_controlled_bytes_flowed,
220
- t->settings[GRPC_ACKED_SETTINGS]
221
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
221
+ t->settings.acked().initial_window_size(),
222
222
  t->flow_control.remote_window(),
223
223
  static_cast<uint32_t>(std::max(
224
- int64_t{0},
225
- s->flow_control.remote_window_delta() +
226
- static_cast<int64_t>(
227
- t->settings[GRPC_PEER_SETTINGS]
228
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
224
+ int64_t{0}, s->flow_control.remote_window_delta() +
225
+ static_cast<int64_t>(
226
+ t->settings.peer().initial_window_size()))),
229
227
  s->flow_control.remote_window_delta());
230
228
  }
231
229
  }
@@ -265,23 +263,13 @@ class WriteContext {
265
263
  }
266
264
 
267
265
  void FlushSettings() {
268
- const bool dirty =
269
- t_->dirtied_local_settings ||
270
- t_->settings[GRPC_SENT_SETTINGS]
271
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] !=
272
- t_->max_concurrent_streams_policy.AdvertiseValue();
273
- if (dirty && !t_->sent_local_settings) {
274
- t_->settings[GRPC_LOCAL_SETTINGS]
275
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] =
276
- t_->max_concurrent_streams_policy.AdvertiseValue();
277
- grpc_slice_buffer_add(
278
- t_->outbuf.c_slice_buffer(),
279
- grpc_chttp2_settings_create(t_->settings[GRPC_SENT_SETTINGS],
280
- t_->settings[GRPC_LOCAL_SETTINGS],
281
- t_->force_send_settings,
282
- GRPC_CHTTP2_NUM_SETTINGS));
283
- if (grpc_core::IsSettingsTimeoutEnabled() &&
284
- t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
266
+ t_->settings.mutable_local().SetMaxConcurrentStreams(
267
+ t_->max_concurrent_streams_policy.AdvertiseValue());
268
+ auto update = t_->settings.MaybeSendUpdate();
269
+ if (update.has_value()) {
270
+ grpc_core::Http2Frame frame(std::move(*update));
271
+ Serialize(absl::Span<grpc_core::Http2Frame>(&frame, 1), t_->outbuf);
272
+ if (t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
285
273
  GPR_ASSERT(
286
274
  t_->settings_ack_watchdog ==
287
275
  grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid);
@@ -294,9 +282,6 @@ class WriteContext {
294
282
  grpc_chttp2_settings_timeout(std::move(t));
295
283
  });
296
284
  }
297
- t_->force_send_settings = false;
298
- t_->dirtied_local_settings = false;
299
- t_->sent_local_settings = true;
300
285
  t_->flow_control.FlushedSettings();
301
286
  t_->max_concurrent_streams_policy.FlushedSettings();
302
287
  grpc_core::global_stats().IncrementHttp2SettingsWrites();
@@ -336,8 +321,7 @@ class WriteContext {
336
321
 
337
322
  void EnactHpackSettings() {
338
323
  t_->hpack_compressor.SetMaxTableSize(
339
- t_->settings[GRPC_PEER_SETTINGS]
340
- [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
324
+ t_->settings.peer().header_table_size());
341
325
  }
342
326
 
343
327
  void UpdateStreamsNoLongerStalled() {
@@ -410,17 +394,14 @@ class DataSendContext {
410
394
  return static_cast<uint32_t>(std::max(
411
395
  int64_t{0},
412
396
  s_->flow_control.remote_window_delta() +
413
- static_cast<int64_t>(
414
- t_->settings[GRPC_PEER_SETTINGS]
415
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
397
+ static_cast<int64_t>(t_->settings.peer().initial_window_size())));
416
398
  }
417
399
 
418
400
  uint32_t max_outgoing() const {
419
401
  return grpc_core::Clamp<uint32_t>(
420
402
  std::min<int64_t>(
421
- {t_->settings[GRPC_PEER_SETTINGS]
422
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
423
- stream_remote_window(), t_->flow_control.remote_window(),
403
+ {t_->settings.peer().max_frame_size(), stream_remote_window(),
404
+ t_->flow_control.remote_window(),
424
405
  grpc_core::IsWriteSizeCapEnabled()
425
406
  ? static_cast<int64_t>(write_context_->target_write_size())
426
407
  : std::numeric_limits<uint32_t>::max()}),
@@ -494,14 +475,10 @@ class StreamWriteContext {
494
475
  grpc_core::HPackCompressor::EncodeHeaderOptions{
495
476
  s_->id, // stream_id
496
477
  false, // is_eof
497
- t_->settings
498
- [GRPC_PEER_SETTINGS]
499
- [GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA] !=
500
- 0, // use_true_binary_metadata
501
- t_->settings
502
- [GRPC_PEER_SETTINGS]
503
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE], // max_frame_size
504
- &s_->stats.outgoing // stats
478
+ t_->settings.peer()
479
+ .allow_true_binary_metadata(), // use_true_binary_metadata
480
+ t_->settings.peer().max_frame_size(), // max_frame_size
481
+ &s_->stats.outgoing // stats
505
482
  },
506
483
  *s_->send_initial_metadata, t_->outbuf.c_slice_buffer());
507
484
  grpc_chttp2_reset_ping_clock(t_);
@@ -517,7 +494,7 @@ class StreamWriteContext {
517
494
  if (s_->call_tracer) {
518
495
  s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
519
496
  grpc_core::HttpAnnotation::Type::kHeadWritten,
520
- grpc_core::Timestamp::Now(), s_->t->flow_control.stats(),
497
+ gpr_now(GPR_CLOCK_REALTIME), s_->t->flow_control.stats(),
521
498
  s_->flow_control.stats()));
522
499
  }
523
500
  }
@@ -596,14 +573,8 @@ class StreamWriteContext {
596
573
  }
597
574
  t_->hpack_compressor.EncodeHeaders(
598
575
  grpc_core::HPackCompressor::EncodeHeaderOptions{
599
- s_->id, true,
600
- t_->settings
601
- [GRPC_PEER_SETTINGS]
602
- [GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA] !=
603
- 0,
604
- t_->settings[GRPC_PEER_SETTINGS]
605
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
606
- &s_->stats.outgoing},
576
+ s_->id, true, t_->settings.peer().allow_true_binary_metadata(),
577
+ t_->settings.peer().max_frame_size(), &s_->stats.outgoing},
607
578
  *s_->send_trailing_metadata, t_->outbuf.c_slice_buffer());
608
579
  }
609
580
  write_context_->IncTrailingMetadataWrites();
@@ -649,7 +620,7 @@ class StreamWriteContext {
649
620
  absl::OkStatus());
650
621
  if (s_->call_tracer) {
651
622
  s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
652
- grpc_core::HttpAnnotation::Type::kEnd, grpc_core::Timestamp::Now(),
623
+ grpc_core::HttpAnnotation::Type::kEnd, gpr_now(GPR_CLOCK_REALTIME),
653
624
  s_->t->flow_control.stats(), s_->flow_control.stats()));
654
625
  }
655
626
  }
@@ -734,9 +705,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
734
705
  t->keepalive_timeout != grpc_core::Duration::Infinity()) {
735
706
  // Set ping timeout after finishing write so we don't measure our own send
736
707
  // time.
737
- const auto timeout = grpc_core::IsSeparatePingFromKeepaliveEnabled()
738
- ? t->ping_timeout
739
- : t->keepalive_timeout;
708
+ const auto timeout = t->ping_timeout;
740
709
  auto id = t->ping_callbacks.OnPingTimeout(
741
710
  timeout, t->event_engine.get(), [t = t->Ref()] {
742
711
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
@@ -750,8 +719,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
750
719
  id.value());
751
720
  }
752
721
 
753
- if (grpc_core::IsSeparatePingFromKeepaliveEnabled() &&
754
- t->keepalive_incoming_data_wanted &&
722
+ if (t->keepalive_incoming_data_wanted &&
755
723
  t->keepalive_timeout < t->ping_timeout &&
756
724
  t->keepalive_ping_timeout_handle !=
757
725
  grpc_event_engine::experimental::EventEngine::TaskHandle::
@@ -16,31 +16,183 @@
16
16
 
17
17
  #include "src/core/ext/transport/inproc/inproc_transport.h"
18
18
 
19
+ #include <atomic>
20
+
21
+ #include <grpc/grpc.h>
19
22
  #include <grpc/support/log.h>
20
23
 
21
24
  #include "src/core/ext/transport/inproc/legacy_inproc_transport.h"
22
25
  #include "src/core/lib/experiments/experiments.h"
23
26
  #include "src/core/lib/gprpp/crash.h"
27
+ #include "src/core/lib/promise/promise.h"
28
+ #include "src/core/lib/promise/try_seq.h"
29
+ #include "src/core/lib/surface/server.h"
30
+ #include "src/core/lib/transport/transport.h"
24
31
 
25
32
  namespace grpc_core {
26
33
 
27
34
  namespace {
35
+ class InprocServerTransport final : public RefCounted<InprocServerTransport>,
36
+ public Transport,
37
+ public ServerTransport {
38
+ public:
39
+ void SetAcceptor(Acceptor* acceptor) override {
40
+ acceptor_ = acceptor;
41
+ ConnectionState expect = ConnectionState::kInitial;
42
+ state_.compare_exchange_strong(expect, ConnectionState::kReady,
43
+ std::memory_order_acq_rel,
44
+ std::memory_order_acquire);
45
+ MutexLock lock(&state_tracker_mu_);
46
+ state_tracker_.SetState(GRPC_CHANNEL_READY, absl::OkStatus(),
47
+ "accept function set");
48
+ }
49
+
50
+ void Orphan() override { Unref(); }
51
+
52
+ FilterStackTransport* filter_stack_transport() override { return nullptr; }
53
+ ClientTransport* client_transport() override { return nullptr; }
54
+ ServerTransport* server_transport() override { return this; }
55
+ absl::string_view GetTransportName() const override { return "inproc"; }
56
+ void SetPollset(grpc_stream*, grpc_pollset*) override {}
57
+ void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
58
+ void PerformOp(grpc_transport_op* op) override {
59
+ gpr_log(GPR_INFO, "inproc server op: %s",
60
+ grpc_transport_op_string(op).c_str());
61
+ if (op->start_connectivity_watch != nullptr) {
62
+ MutexLock lock(&state_tracker_mu_);
63
+ state_tracker_.AddWatcher(op->start_connectivity_watch_state,
64
+ std::move(op->start_connectivity_watch));
65
+ }
66
+ if (op->stop_connectivity_watch != nullptr) {
67
+ MutexLock lock(&state_tracker_mu_);
68
+ state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
69
+ }
70
+ if (op->set_accept_stream) {
71
+ Crash("set_accept_stream not supported on inproc transport");
72
+ }
73
+ }
74
+ grpc_endpoint* GetEndpoint() override { return nullptr; }
75
+
76
+ void Disconnect(absl::Status error) {
77
+ if (disconnecting_.exchange(true, std::memory_order_relaxed)) return;
78
+ disconnect_error_ = std::move(error);
79
+ state_.store(ConnectionState::kDisconnected, std::memory_order_relaxed);
80
+ MutexLock lock(&state_tracker_mu_);
81
+ state_tracker_.SetState(GRPC_CHANNEL_SHUTDOWN, disconnect_error_,
82
+ "inproc transport disconnected");
83
+ }
84
+
85
+ absl::StatusOr<CallInitiator> AcceptCall(ClientMetadata& md) {
86
+ switch (state_.load(std::memory_order_acquire)) {
87
+ case ConnectionState::kInitial:
88
+ return absl::InternalError(
89
+ "inproc transport hasn't started accepting calls");
90
+ case ConnectionState::kDisconnected:
91
+ return absl::UnavailableError("inproc transport is disconnected");
92
+ case ConnectionState::kReady:
93
+ break;
94
+ }
95
+ return acceptor_->CreateCall(md, acceptor_->CreateArena());
96
+ }
97
+
98
+ private:
99
+ enum class ConnectionState : uint8_t { kInitial, kReady, kDisconnected };
100
+
101
+ std::atomic<ConnectionState> state_{ConnectionState::kInitial};
102
+ std::atomic<bool> disconnecting_{false};
103
+ Acceptor* acceptor_;
104
+ absl::Status disconnect_error_;
105
+ Mutex state_tracker_mu_;
106
+ ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(state_tracker_mu_){
107
+ "inproc_server_transport", GRPC_CHANNEL_CONNECTING};
108
+ };
109
+
110
+ class InprocClientTransport final : public Transport, public ClientTransport {
111
+ public:
112
+ void StartCall(CallHandler call_handler) override {
113
+ call_handler.SpawnGuarded(
114
+ "pull_initial_metadata",
115
+ TrySeq(
116
+ call_handler.PullClientInitialMetadata(),
117
+ [server_transport = server_transport_,
118
+ call_handler](ClientMetadataHandle md) {
119
+ auto call_initiator = server_transport->AcceptCall(*md);
120
+ if (!call_initiator.ok()) return call_initiator.status();
121
+ ForwardCall(call_handler, std::move(*call_initiator),
122
+ std::move(md));
123
+ return absl::OkStatus();
124
+ },
125
+ ImmediateOkStatus()));
126
+ }
127
+
128
+ void Orphan() override { delete this; }
129
+
130
+ OrphanablePtr<Transport> GetServerTransport() {
131
+ return OrphanablePtr<Transport>(server_transport_->Ref().release());
132
+ }
133
+
134
+ FilterStackTransport* filter_stack_transport() override { return nullptr; }
135
+ ClientTransport* client_transport() override { return this; }
136
+ ServerTransport* server_transport() override { return nullptr; }
137
+ absl::string_view GetTransportName() const override { return "inproc"; }
138
+ void SetPollset(grpc_stream*, grpc_pollset*) override {}
139
+ void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
140
+ void PerformOp(grpc_transport_op*) override { Crash("unimplemented"); }
141
+ grpc_endpoint* GetEndpoint() override { return nullptr; }
142
+
143
+ private:
144
+ ~InprocClientTransport() override {
145
+ server_transport_->Disconnect(
146
+ absl::UnavailableError("Client transport closed"));
147
+ }
148
+
149
+ RefCountedPtr<InprocServerTransport> server_transport_ =
150
+ MakeRefCounted<InprocServerTransport>();
151
+ };
152
+
28
153
  bool UsePromiseBasedTransport() {
29
154
  if (!IsPromiseBasedInprocTransportEnabled()) return false;
30
- if (!IsPromiseBasedClientCallEnabled()) {
31
- gpr_log(GPR_ERROR,
32
- "Promise based inproc transport requested but promise based client "
33
- "calls are disabled: using legacy implementation.");
34
- return false;
35
- }
36
- if (!IsPromiseBasedServerCallEnabled()) {
37
- gpr_log(GPR_ERROR,
38
- "Promise based inproc transport requested but promise based server "
39
- "calls are disabled: using legacy implementation.");
40
- return false;
41
- }
155
+ GPR_ASSERT(IsPromiseBasedClientCallEnabled());
156
+ GPR_ASSERT(IsPromiseBasedServerCallEnabled());
42
157
  return true;
43
158
  }
159
+
160
+ RefCountedPtr<Channel> MakeLameChannel(absl::string_view why,
161
+ absl::Status error) {
162
+ gpr_log(GPR_ERROR, "%s: %s", std::string(why).c_str(),
163
+ std::string(error.message()).c_str());
164
+ intptr_t integer;
165
+ grpc_status_code status = GRPC_STATUS_INTERNAL;
166
+ if (grpc_error_get_int(error, StatusIntProperty::kRpcStatus, &integer)) {
167
+ status = static_cast<grpc_status_code>(integer);
168
+ }
169
+ return RefCountedPtr<Channel>(Channel::FromC(grpc_lame_client_channel_create(
170
+ nullptr, status, std::string(why).c_str())));
171
+ }
172
+
173
+ RefCountedPtr<Channel> MakeInprocChannel(Server* server,
174
+ ChannelArgs client_channel_args) {
175
+ auto client_transport = MakeOrphanable<InprocClientTransport>();
176
+ auto server_transport = client_transport->GetServerTransport();
177
+ auto error =
178
+ server->SetupTransport(server_transport.get(), nullptr,
179
+ server->channel_args()
180
+ .Remove(GRPC_ARG_MAX_CONNECTION_IDLE_MS)
181
+ .Remove(GRPC_ARG_MAX_CONNECTION_AGE_MS),
182
+ nullptr);
183
+ if (!error.ok()) {
184
+ return MakeLameChannel("Failed to create server channel", std::move(error));
185
+ }
186
+ std::ignore = server_transport.release(); // consumed by SetupTransport
187
+ auto channel = Channel::Create(
188
+ "inproc",
189
+ client_channel_args.Set(GRPC_ARG_DEFAULT_AUTHORITY, "inproc.authority"),
190
+ GRPC_CLIENT_DIRECT_CHANNEL, client_transport.release());
191
+ if (!channel.ok()) {
192
+ return MakeLameChannel("Failed to create client channel", channel.status());
193
+ }
194
+ return std::move(*channel);
195
+ }
44
196
  } // namespace
45
197
 
46
198
  } // namespace grpc_core
@@ -48,8 +200,15 @@ bool UsePromiseBasedTransport() {
48
200
  grpc_channel* grpc_inproc_channel_create(grpc_server* server,
49
201
  const grpc_channel_args* args,
50
202
  void* reserved) {
203
+ grpc_core::ApplicationCallbackExecCtx app_exec_ctx;
204
+ grpc_core::ExecCtx exec_ctx;
51
205
  if (!grpc_core::UsePromiseBasedTransport()) {
52
206
  return grpc_legacy_inproc_channel_create(server, args, reserved);
53
207
  }
54
- grpc_core::Crash("unimplemented");
208
+ return grpc_core::MakeInprocChannel(grpc_core::Server::FromC(server),
209
+ grpc_core::CoreConfiguration::Get()
210
+ .channel_args_preconditioning()
211
+ .PreconditionChannelArgs(args))
212
+ .release()
213
+ ->c_ptr();
55
214
  }