grpc 1.56.2 → 1.57.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +29 -22
  3. data/include/grpc/event_engine/event_engine.h +22 -32
  4. data/include/grpc/impl/grpc_types.h +3 -0
  5. data/include/grpc/support/port_platform.h +29 -23
  6. data/src/core/ext/filters/client_channel/client_channel.cc +44 -8
  7. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  8. data/src/core/ext/filters/client_channel/http_proxy.cc +5 -0
  9. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +21 -52
  10. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +19 -7
  11. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
  12. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +78 -132
  13. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +4 -3
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +38 -15
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +3 -5
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +22 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +97 -71
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -16
  22. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +56 -11
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +25 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -32
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +4 -6
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +20 -79
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +31 -19
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -41
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -67
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +31 -74
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +7 -51
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +16 -87
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +16 -50
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -74
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -4
  39. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +69 -59
  40. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +7 -2
  41. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
  42. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +366 -311
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +17 -1
  45. data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2498
  46. data/src/core/ext/filters/client_channel/retry_filter.h +91 -1
  47. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
  48. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
  49. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +38 -58
  50. data/src/core/ext/filters/client_channel/subchannel.h +3 -3
  51. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
  52. data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
  53. data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
  54. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +162 -86
  55. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -6
  56. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -4
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -186
  58. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
  59. data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
  60. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -3
  61. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -3
  62. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -8
  63. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  64. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -2
  65. data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -3
  67. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  68. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -6
  69. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +143 -0
  70. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -9
  71. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +0 -39
  72. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +13 -8
  73. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +35 -6
  74. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +17 -13
  75. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +85 -20
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +26 -7
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +45 -3
  78. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +4 -3
  79. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +21 -0
  80. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +30 -6
  81. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +180 -0
  82. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
  83. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
  84. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +30 -11
  85. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +53 -24
  86. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +30 -5
  87. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +110 -0
  88. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +41 -15
  89. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +150 -27
  90. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +1 -0
  91. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
  92. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +88 -76
  94. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +11 -12
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +0 -5
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +162 -160
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +129 -118
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +141 -135
  100. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +19 -12
  101. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +38 -30
  102. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
  103. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
  104. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
  105. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +80 -74
  106. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +63 -47
  107. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -0
  108. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +315 -293
  109. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  110. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -29
  111. data/src/core/ext/xds/xds_bootstrap_grpc.cc +33 -30
  112. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -13
  113. data/src/core/ext/xds/xds_client_grpc.cc +11 -6
  114. data/src/core/ext/xds/xds_client_grpc.h +16 -2
  115. data/src/core/ext/xds/xds_client_stats.h +10 -0
  116. data/src/core/ext/xds/xds_cluster.cc +26 -16
  117. data/src/core/ext/xds/xds_endpoint.cc +4 -7
  118. data/src/core/ext/xds/xds_health_status.cc +0 -17
  119. data/src/core/ext/xds/xds_health_status.h +5 -25
  120. data/src/core/ext/xds/xds_lb_policy_registry.cc +39 -0
  121. data/src/core/ext/xds/xds_route_config.cc +4 -0
  122. data/src/core/ext/xds/xds_transport_grpc.cc +1 -3
  123. data/src/core/lib/address_utils/parse_address.cc +63 -1
  124. data/src/core/lib/address_utils/parse_address.h +8 -0
  125. data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
  126. data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
  127. data/src/core/lib/channel/channel_args.cc +21 -10
  128. data/src/core/lib/channel/channel_args.h +3 -0
  129. data/src/core/lib/channel/connected_channel.cc +4 -1
  130. data/src/core/lib/channel/promise_based_filter.h +1 -0
  131. data/src/core/lib/debug/trace.cc +1 -4
  132. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -1
  133. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
  134. data/src/core/lib/event_engine/event_engine.cc +0 -12
  135. data/src/core/lib/event_engine/forkable.cc +47 -42
  136. data/src/core/lib/event_engine/handle_containers.h +0 -4
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -6
  138. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -6
  139. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +25 -11
  140. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +2 -1
  142. data/src/core/lib/event_engine/posix_engine/posix_engine.h +8 -12
  143. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +37 -27
  144. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
  146. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +42 -2
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +6 -0
  148. data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
  149. data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
  150. data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
  151. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +90 -37
  152. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +32 -12
  153. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +12 -21
  154. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +8 -12
  155. data/src/core/lib/event_engine/windows/windows_endpoint.cc +55 -54
  156. data/src/core/lib/event_engine/windows/windows_endpoint.h +15 -12
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +2 -1
  158. data/src/core/lib/event_engine/windows/windows_engine.h +8 -12
  159. data/src/core/lib/experiments/config.cc +60 -22
  160. data/src/core/lib/experiments/config.h +20 -8
  161. data/src/core/lib/experiments/experiments.cc +278 -0
  162. data/src/core/lib/experiments/experiments.h +59 -1
  163. data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
  164. data/src/core/lib/gprpp/fork.cc +8 -9
  165. data/src/core/lib/gprpp/fork.h +6 -5
  166. data/src/core/lib/gprpp/if_list.h +4530 -0
  167. data/src/core/lib/gprpp/orphanable.h +3 -3
  168. data/src/core/lib/gprpp/ref_counted.h +6 -6
  169. data/src/core/lib/gprpp/sorted_pack.h +3 -12
  170. data/src/core/lib/gprpp/status_helper.h +16 -15
  171. data/src/core/lib/gprpp/time.h +12 -0
  172. data/src/core/lib/gprpp/type_list.h +32 -0
  173. data/src/core/lib/http/httpcli.h +6 -9
  174. data/src/core/lib/iomgr/error.cc +32 -2
  175. data/src/core/lib/iomgr/error.h +9 -10
  176. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -7
  177. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  178. data/src/core/lib/iomgr/exec_ctx.h +11 -0
  179. data/src/core/lib/iomgr/pollset.h +4 -5
  180. data/src/core/lib/iomgr/port.h +10 -0
  181. data/src/core/lib/iomgr/resolve_address.cc +13 -1
  182. data/src/core/lib/iomgr/resolve_address.h +17 -3
  183. data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
  184. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -0
  185. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -0
  186. data/src/core/lib/iomgr/socket_utils_posix.h +6 -0
  187. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -1
  188. data/src/core/lib/iomgr/tcp_posix.cc +21 -4
  189. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -2
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
  191. data/src/core/lib/iomgr/tcp_windows.cc +1 -3
  192. data/src/core/lib/iomgr/vsock.cc +59 -0
  193. data/src/core/lib/iomgr/vsock.h +38 -0
  194. data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
  195. data/src/core/lib/load_balancing/delegating_helper.h +115 -0
  196. data/src/core/lib/load_balancing/lb_policy.h +20 -0
  197. data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
  198. data/src/core/lib/promise/party.h +1 -1
  199. data/src/core/lib/resolver/resolver_factory.h +3 -2
  200. data/src/core/lib/resolver/server_address.cc +9 -94
  201. data/src/core/lib/resolver/server_address.h +10 -64
  202. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  203. data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
  204. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
  205. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  206. data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
  207. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -1
  208. data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
  209. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
  210. data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
  211. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  212. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
  213. data/src/core/lib/service_config/service_config_call_data.h +5 -0
  214. data/src/core/lib/slice/slice.h +16 -0
  215. data/src/core/lib/surface/call.cc +31 -29
  216. data/src/core/lib/surface/server.h +2 -2
  217. data/src/core/lib/surface/version.cc +2 -2
  218. data/src/core/lib/transport/metadata_batch.cc +7 -7
  219. data/src/core/lib/transport/metadata_batch.h +86 -48
  220. data/src/core/lib/transport/parsed_metadata.h +34 -20
  221. data/src/core/lib/transport/simple_slice_based_metadata.h +9 -2
  222. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
  223. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
  224. data/src/core/tsi/ssl_transport_security.cc +28 -7
  225. data/src/ruby/bin/math_pb.rb +24 -18
  226. data/src/ruby/ext/grpc/extconf.rb +19 -18
  227. data/src/ruby/ext/grpc/rb_call.c +62 -39
  228. data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
  229. data/src/ruby/ext/grpc/rb_channel.c +126 -49
  230. data/src/ruby/ext/grpc/rb_channel.h +1 -0
  231. data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
  232. data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
  233. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  234. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  235. data/src/ruby/ext/grpc/rb_event_thread.c +22 -6
  236. data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
  237. data/src/ruby/ext/grpc/rb_grpc.c +192 -30
  238. data/src/ruby/ext/grpc/rb_grpc.h +8 -2
  239. data/src/ruby/ext/grpc/rb_server.c +62 -45
  240. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  241. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  242. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  243. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  244. data/src/ruby/lib/grpc/version.rb +1 -1
  245. data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
  246. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
  247. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
  248. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
  249. data/third_party/boringssl-with-bazel/err_data.c +552 -552
  250. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +5 -5
  251. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
  252. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +4 -1
  253. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -3
  254. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +7 -8
  255. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +2 -2
  256. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -2
  257. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +8 -8
  258. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +2 -2
  259. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -2
  260. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
  262. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +28 -185
  263. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
  264. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
  265. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -0
  266. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +49 -46
  267. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.c +18 -0
  268. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2809 -7417
  269. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +27 -5
  270. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
  272. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
  273. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +15 -14
  274. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +13 -10
  275. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
  276. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
  277. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
  278. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
  279. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
  280. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -1
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
  287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
  288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
  289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +2 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +180 -404
  292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +3 -3
  293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +24 -57
  294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
  295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +33 -71
  296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +18 -17
  297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -7
  298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +15 -18
  299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +9 -11
  300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
  301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +11 -27
  302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +8 -8
  303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +4 -4
  304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +9 -3
  305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.c +1 -1
  306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
  307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
  308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
  309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -29
  310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +55 -0
  311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +33 -52
  312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +3 -8
  313. data/third_party/boringssl-with-bazel/src/crypto/internal.h +198 -79
  314. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +5 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
  316. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -23
  317. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
  318. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
  319. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
  320. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
  321. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
  323. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
  324. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +48 -0
  325. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
  326. data/third_party/boringssl-with-bazel/src/crypto/{refcount_no_threads.c → rand_extra/trusty.c} +15 -19
  327. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
  328. data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
  329. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +147 -72
  330. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
  331. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
  332. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
  333. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +14 -18
  334. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +54 -143
  335. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +7 -13
  336. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +1 -1
  337. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -1
  338. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +2 -4
  339. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +2 -2
  340. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +1 -1
  341. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
  342. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +19 -20
  343. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -15
  344. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -5
  345. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
  346. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
  347. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +4 -6
  349. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
  350. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
  351. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +5 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -116
  353. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
  354. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
  355. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
  356. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +21 -2
  358. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
  359. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +11 -7
  360. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
  361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +0 -61
  362. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +127 -81
  363. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +224 -209
  364. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +154 -0
  365. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -29
  366. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +4 -4
  367. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +3 -2
  368. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +9 -65
  369. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
  370. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  371. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -11
  372. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +24 -18
  373. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +37 -30
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +125 -26
  375. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
  376. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
  377. data/third_party/upb/upb/collections/map.c +3 -3
  378. metadata +27 -12
  379. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
  380. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
  381. data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
  382. data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
  383. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +0 -89
@@ -32,6 +32,9 @@
32
32
  #include <vector>
33
33
 
34
34
  #include "absl/base/attributes.h"
35
+ #include "absl/container/flat_hash_map.h"
36
+ #include "absl/hash/hash.h"
37
+ #include "absl/meta/type_traits.h"
35
38
  #include "absl/status/status.h"
36
39
  #include "absl/strings/cord.h"
37
40
  #include "absl/strings/str_cat.h"
@@ -58,7 +61,6 @@
58
61
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
59
62
  #include "src/core/ext/transport/chttp2/transport/http_trace.h"
60
63
  #include "src/core/ext/transport/chttp2/transport/internal.h"
61
- #include "src/core/ext/transport/chttp2/transport/stream_map.h"
62
64
  #include "src/core/ext/transport/chttp2/transport/varint.h"
63
65
  #include "src/core/lib/channel/call_tracer.h"
64
66
  #include "src/core/lib/channel/channel_args.h"
@@ -106,36 +108,25 @@
106
108
  #define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024)
107
109
  #define DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT (8 * 1024)
108
110
 
109
- #define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
110
- #define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
111
- #define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
112
- #define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
113
- #define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
114
111
  #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
115
112
 
116
- #define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
117
- #define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
118
- #define DEFAULT_MAX_PING_STRIKES 2
119
-
120
113
  #define DEFAULT_MAX_PENDING_INDUCED_FRAMES 10000
121
114
 
122
- static int g_default_client_keepalive_time_ms =
123
- DEFAULT_CLIENT_KEEPALIVE_TIME_MS;
124
- static int g_default_client_keepalive_timeout_ms =
125
- DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS;
126
- static int g_default_server_keepalive_time_ms =
127
- DEFAULT_SERVER_KEEPALIVE_TIME_MS;
128
- static int g_default_server_keepalive_timeout_ms =
129
- DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS;
130
- static bool g_default_client_keepalive_permit_without_calls =
131
- DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS;
132
- static bool g_default_server_keepalive_permit_without_calls =
133
- DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS;
134
-
135
- static int g_default_min_recv_ping_interval_without_data_ms =
136
- DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS;
137
- static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
138
- static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
115
+ static grpc_core::Duration g_default_client_keepalive_time =
116
+ grpc_core::Duration::Infinity();
117
+ static grpc_core::Duration g_default_client_keepalive_timeout =
118
+ grpc_core::Duration::Seconds(20);
119
+ static grpc_core::Duration g_default_server_keepalive_time =
120
+ grpc_core::Duration::Hours(2);
121
+ static grpc_core::Duration g_default_server_keepalive_timeout =
122
+ grpc_core::Duration::Seconds(20);
123
+ static bool g_default_client_keepalive_permit_without_calls = false;
124
+ static bool g_default_server_keepalive_permit_without_calls = false;
125
+
126
+ static grpc_core::Duration g_default_min_recv_ping_interval_without_data =
127
+ grpc_core::Duration::Minutes(5);
128
+ static int g_default_max_pings_without_data = 2;
129
+ static int g_default_max_ping_strikes = 2;
139
130
 
140
131
  #define MAX_CLIENT_STREAM_ID 0x7fffffffu
141
132
  grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
@@ -315,10 +306,7 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
315
306
  GPR_ASSERT(lists[i].tail == nullptr);
316
307
  }
317
308
 
318
- GPR_ASSERT(grpc_chttp2_stream_map_size(&stream_map) == 0);
319
-
320
- grpc_chttp2_stream_map_destroy(&stream_map);
321
-
309
+ GPR_ASSERT(stream_map.empty());
322
310
  GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
323
311
 
324
312
  cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
@@ -369,26 +357,32 @@ static void read_channel_args(grpc_chttp2_transport* t,
369
357
  channel_args
370
358
  .GetDurationFromIntMillis(
371
359
  GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
372
- .value_or(grpc_core::Duration::Milliseconds(
373
- g_default_min_recv_ping_interval_without_data_ms)));
360
+ .value_or(g_default_min_recv_ping_interval_without_data));
374
361
  t->write_buffer_size =
375
362
  std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
376
363
  .value_or(grpc_core::chttp2::kDefaultWindow));
377
364
  t->keepalive_time =
378
365
  std::max(grpc_core::Duration::Milliseconds(1),
379
366
  channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
380
- .value_or(grpc_core::Duration::Milliseconds(
381
- t->is_client ? g_default_client_keepalive_time_ms
382
- : g_default_server_keepalive_time_ms)));
367
+ .value_or(t->is_client ? g_default_client_keepalive_time
368
+ : g_default_server_keepalive_time));
383
369
  t->keepalive_timeout = std::max(
384
370
  grpc_core::Duration::Zero(),
385
371
  channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
386
- .value_or(grpc_core::Duration::Milliseconds(
387
- t->is_client ? g_default_client_keepalive_timeout_ms
388
- : g_default_server_keepalive_timeout_ms)));
389
- t->keepalive_permit_without_calls =
390
- channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
391
- .value_or(false);
372
+ .value_or(t->is_client ? g_default_client_keepalive_timeout
373
+ : g_default_server_keepalive_timeout));
374
+ if (grpc_core::IsKeepaliveFixEnabled()) {
375
+ t->keepalive_permit_without_calls =
376
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
377
+ .value_or(t->is_client
378
+ ? g_default_client_keepalive_permit_without_calls
379
+ : g_default_server_keepalive_permit_without_calls);
380
+ } else {
381
+ t->keepalive_permit_without_calls =
382
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
383
+ .value_or(false);
384
+ }
385
+
392
386
  // Only send the prefered rx frame size http2 setting if we are instructed
393
387
  // to auto size the buffers allocated at tcp level and we also can adjust
394
388
  // sending frame size.
@@ -512,40 +506,6 @@ static void read_channel_args(grpc_chttp2_transport* t,
512
506
  }
513
507
  }
514
508
 
515
- static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
516
- if (t->is_client) {
517
- t->keepalive_time = g_default_client_keepalive_time_ms == INT_MAX
518
- ? grpc_core::Duration::Infinity()
519
- : grpc_core::Duration::Milliseconds(
520
- g_default_client_keepalive_time_ms);
521
- t->keepalive_timeout = g_default_client_keepalive_timeout_ms == INT_MAX
522
- ? grpc_core::Duration::Infinity()
523
- : grpc_core::Duration::Milliseconds(
524
- g_default_client_keepalive_timeout_ms);
525
- t->keepalive_permit_without_calls =
526
- g_default_client_keepalive_permit_without_calls;
527
- } else {
528
- t->keepalive_time = g_default_server_keepalive_time_ms == INT_MAX
529
- ? grpc_core::Duration::Infinity()
530
- : grpc_core::Duration::Milliseconds(
531
- g_default_server_keepalive_time_ms);
532
- t->keepalive_timeout = g_default_server_keepalive_timeout_ms == INT_MAX
533
- ? grpc_core::Duration::Infinity()
534
- : grpc_core::Duration::Milliseconds(
535
- g_default_server_keepalive_timeout_ms);
536
- t->keepalive_permit_without_calls =
537
- g_default_server_keepalive_permit_without_calls;
538
- }
539
- }
540
-
541
- static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
542
- t->ping_policy.max_pings_without_data = g_default_max_pings_without_data;
543
- t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
544
- t->ping_policy.min_recv_ping_interval_without_data =
545
- grpc_core::Duration::Milliseconds(
546
- g_default_min_recv_ping_interval_without_data_ms);
547
- }
548
-
549
509
  static void init_keepalive_pings_if_enabled_locked(
550
510
  void* arg, GRPC_UNUSED grpc_error_handle error) {
551
511
  GPR_DEBUG_ASSERT(error.ok());
@@ -598,12 +558,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
598
558
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
599
559
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
600
560
  base.vtable = get_vtable();
601
- // 8 is a random stab in the dark as to a good initial size: it's small enough
602
- // that it shouldn't waste memory for infrequently used connections, yet
603
- // large enough that the exponential growth should happen nicely when it's
604
- // needed.
605
- // TODO(ctiller): tune this
606
- grpc_chttp2_stream_map_init(&stream_map, 8);
607
561
 
608
562
  grpc_slice_buffer_init(&read_buffer);
609
563
  grpc_slice_buffer_init(&outbuf);
@@ -632,9 +586,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
632
586
  queue_setting_update(this,
633
587
  GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA, 1);
634
588
 
635
- configure_transport_ping_policy(this);
636
- init_transport_keepalive_settings(this);
637
-
638
589
  read_channel_args(this, channel_args, is_client);
639
590
 
640
591
  // No pings allowed before receiving a header or data frame.
@@ -813,7 +764,7 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
813
764
  this, id, server_data);
814
765
  }
815
766
  *t->accepting_stream = this;
816
- grpc_chttp2_stream_map_add(&t->stream_map, id, this);
767
+ t->stream_map.emplace(id, this);
817
768
  post_destructive_reclaimer(t);
818
769
  }
819
770
 
@@ -835,7 +786,7 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
835
786
 
836
787
  GPR_ASSERT((write_closed && read_closed) || id == 0);
837
788
  if (id != 0) {
838
- GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
789
+ GPR_ASSERT(t->stream_map.count(id) == 0);
839
790
  }
840
791
 
841
792
  grpc_slice_buffer_destroy(&frame_storage);
@@ -1076,7 +1027,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1076
1027
  if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
1077
1028
  t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
1078
1029
  closed = true;
1079
- if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
1030
+ if (t->stream_map.empty()) {
1080
1031
  close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
1081
1032
  }
1082
1033
  }
@@ -1169,19 +1120,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1169
1120
  if (t->is_client) {
1170
1121
  cancel_unstarted_streams(t, t->goaway_error);
1171
1122
  // Cancel all unseen streams
1172
- grpc_chttp2_stream_map_for_each(
1173
- &t->stream_map,
1174
- [](void* user_data, uint32_t /* key */, void* stream) {
1175
- uint32_t last_stream_id = *(static_cast<uint32_t*>(user_data));
1176
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
1177
- if (s->id > last_stream_id) {
1178
- s->trailing_metadata_buffer.Set(
1179
- grpc_core::GrpcStreamNetworkState(),
1180
- grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
1181
- grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
1182
- }
1183
- },
1184
- &last_stream_id);
1123
+ std::vector<grpc_chttp2_stream*> to_cancel;
1124
+ for (auto id_stream : t->stream_map) {
1125
+ if (id_stream.first > last_stream_id) {
1126
+ to_cancel.push_back(id_stream.second);
1127
+ }
1128
+ }
1129
+ for (auto s : to_cancel) {
1130
+ s->trailing_metadata_buffer.Set(
1131
+ grpc_core::GrpcStreamNetworkState(),
1132
+ grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
1133
+ grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
1134
+ }
1185
1135
  }
1186
1136
  absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1187
1137
  // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
@@ -1225,7 +1175,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1225
1175
  // start streams where we have free grpc_chttp2_stream ids and free
1226
1176
  // * concurrency
1227
1177
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1228
- grpc_chttp2_stream_map_size(&t->stream_map) <
1178
+ t->stream_map.size() <
1229
1179
  t->settings[GRPC_PEER_SETTINGS]
1230
1180
  [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1231
1181
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
@@ -1246,7 +1196,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1246
1196
  "no_more_stream_ids");
1247
1197
  }
1248
1198
 
1249
- grpc_chttp2_stream_map_add(&t->stream_map, s->id, s);
1199
+ t->stream_map.emplace(s->id, s);
1250
1200
  post_destructive_reclaimer(t);
1251
1201
  grpc_chttp2_mark_stream_writable(t, s);
1252
1202
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
@@ -1648,6 +1598,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1648
1598
  }
1649
1599
 
1650
1600
  static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1601
+ GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "%p CANCEL PINGS: %s", t,
1602
+ grpc_core::StatusToString(error).c_str()));
1651
1603
  // callback remaining pings: they're not allowed to call into the transport,
1652
1604
  // and maybe they hold resources that need to be freed
1653
1605
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
@@ -1859,8 +1811,9 @@ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
1859
1811
  } else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
1860
1812
  t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
1861
1813
  // We want to log this irrespective of whether http tracing is enabled
1862
- gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s",
1814
+ gpr_log(GPR_DEBUG, "%s %s: Sending goaway last_new_stream_id=%d err=%s",
1863
1815
  std::string(t->peer_string.as_string_view()).c_str(),
1816
+ t->is_client ? "CLIENT" : "SERVER", t->last_new_stream_id,
1864
1817
  grpc_core::StatusToString(error).c_str());
1865
1818
  t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
1866
1819
  grpc_chttp2_goaway_append(
@@ -2092,15 +2045,14 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2092
2045
 
2093
2046
  static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2094
2047
  grpc_error_handle error) {
2095
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
2096
- grpc_chttp2_stream_map_delete(&t->stream_map, id));
2048
+ grpc_chttp2_stream* s = t->stream_map.extract(id).mapped();
2097
2049
  GPR_DEBUG_ASSERT(s);
2098
2050
  if (t->incoming_stream == s) {
2099
2051
  t->incoming_stream = nullptr;
2100
2052
  grpc_chttp2_parsing_become_skip_parser(t);
2101
2053
  }
2102
2054
 
2103
- if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2055
+ if (t->stream_map.empty()) {
2104
2056
  post_benign_reclaimer(t);
2105
2057
  if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
2106
2058
  close_transport_locked(
@@ -2239,7 +2191,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2239
2191
  (close_reads && close_writes)
2240
2192
  ? "read+write"
2241
2193
  : (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
2242
- error.ToString().c_str());
2194
+ grpc_core::StatusToString(error).c_str());
2243
2195
  }
2244
2196
  if (s->read_closed && s->write_closed) {
2245
2197
  // already closed, but we should still fake the status if needed.
@@ -2451,17 +2403,6 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2451
2403
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API);
2452
2404
  }
2453
2405
 
2454
- struct cancel_stream_cb_args {
2455
- grpc_error_handle error;
2456
- grpc_chttp2_transport* t;
2457
- };
2458
-
2459
- static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2460
- cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
2461
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
2462
- grpc_chttp2_cancel_stream(args->t, s, args->error);
2463
- }
2464
-
2465
2406
  static void end_all_the_calls(grpc_chttp2_transport* t,
2466
2407
  grpc_error_handle error) {
2467
2408
  intptr_t http2_error;
@@ -2473,8 +2414,13 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
2473
2414
  GRPC_STATUS_UNAVAILABLE);
2474
2415
  }
2475
2416
  cancel_unstarted_streams(t, error);
2476
- cancel_stream_cb_args args = {error, t};
2477
- grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
2417
+ std::vector<grpc_chttp2_stream*> to_cancel;
2418
+ for (auto id_stream : t->stream_map) {
2419
+ to_cancel.push_back(id_stream.second);
2420
+ }
2421
+ for (auto s : to_cancel) {
2422
+ grpc_chttp2_cancel_stream(t, s, error);
2423
+ }
2478
2424
  }
2479
2425
 
2480
2426
  //
@@ -2749,61 +2695,61 @@ static void next_bdp_ping_timer_expired_locked(
2749
2695
 
2750
2696
  void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2751
2697
  bool is_client) {
2752
- size_t i;
2753
- if (args) {
2754
- for (i = 0; i < args->num_args; i++) {
2755
- if (0 == strcmp(args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
2756
- const int value = grpc_channel_arg_get_integer(
2757
- &args->args[i], {is_client ? g_default_client_keepalive_time_ms
2758
- : g_default_server_keepalive_time_ms,
2759
- 1, INT_MAX});
2760
- if (is_client) {
2761
- g_default_client_keepalive_time_ms = value;
2762
- } else {
2763
- g_default_server_keepalive_time_ms = value;
2764
- }
2765
- } else if (0 ==
2766
- strcmp(args->args[i].key, GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
2767
- const int value = grpc_channel_arg_get_integer(
2768
- &args->args[i], {is_client ? g_default_client_keepalive_timeout_ms
2769
- : g_default_server_keepalive_timeout_ms,
2770
- 0, INT_MAX});
2771
- if (is_client) {
2772
- g_default_client_keepalive_timeout_ms = value;
2773
- } else {
2774
- g_default_server_keepalive_timeout_ms = value;
2775
- }
2776
- } else if (0 == strcmp(args->args[i].key,
2777
- GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
2778
- const bool value = static_cast<uint32_t>(grpc_channel_arg_get_integer(
2779
- &args->args[i],
2780
- {is_client ? g_default_client_keepalive_permit_without_calls
2781
- : g_default_server_keepalive_timeout_ms,
2782
- 0, 1}));
2783
- if (is_client) {
2784
- g_default_client_keepalive_permit_without_calls = value;
2785
- } else {
2786
- g_default_server_keepalive_permit_without_calls = value;
2787
- }
2788
- } else if (0 ==
2789
- strcmp(args->args[i].key, GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
2790
- g_default_max_ping_strikes = grpc_channel_arg_get_integer(
2791
- &args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
2792
- } else if (0 == strcmp(args->args[i].key,
2793
- GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
2794
- g_default_max_pings_without_data = grpc_channel_arg_get_integer(
2795
- &args->args[i], {g_default_max_pings_without_data, 0, INT_MAX});
2796
- } else if (0 ==
2797
- strcmp(
2798
- args->args[i].key,
2799
- GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
2800
- g_default_min_recv_ping_interval_without_data_ms =
2801
- grpc_channel_arg_get_integer(
2802
- &args->args[i],
2803
- {g_default_min_recv_ping_interval_without_data_ms, 0, INT_MAX});
2804
- }
2805
- }
2698
+ grpc_chttp2_config_default_keepalive_args(grpc_core::ChannelArgs::FromC(args),
2699
+ is_client);
2700
+ }
2701
+
2702
+ void grpc_chttp2_config_default_keepalive_args(
2703
+ const grpc_core::ChannelArgs& channel_args, bool is_client) {
2704
+ const auto keepalive_time =
2705
+ std::max(grpc_core::Duration::Milliseconds(1),
2706
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
2707
+ .value_or(is_client ? g_default_client_keepalive_time
2708
+ : g_default_server_keepalive_time));
2709
+ if (is_client) {
2710
+ g_default_client_keepalive_time = keepalive_time;
2711
+ } else {
2712
+ g_default_server_keepalive_time = keepalive_time;
2713
+ }
2714
+
2715
+ const auto keepalive_timeout = std::max(
2716
+ grpc_core::Duration::Zero(),
2717
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
2718
+ .value_or(is_client ? g_default_client_keepalive_timeout
2719
+ : g_default_server_keepalive_timeout));
2720
+ if (is_client) {
2721
+ g_default_client_keepalive_timeout = keepalive_timeout;
2722
+ } else {
2723
+ g_default_server_keepalive_timeout = keepalive_timeout;
2806
2724
  }
2725
+
2726
+ const bool keepalive_permit_without_calls =
2727
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
2728
+ .value_or(is_client
2729
+ ? g_default_client_keepalive_permit_without_calls
2730
+ : g_default_server_keepalive_permit_without_calls);
2731
+ if (is_client) {
2732
+ g_default_client_keepalive_permit_without_calls =
2733
+ keepalive_permit_without_calls;
2734
+ } else {
2735
+ g_default_server_keepalive_permit_without_calls =
2736
+ keepalive_permit_without_calls;
2737
+ }
2738
+
2739
+ g_default_max_ping_strikes =
2740
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
2741
+ .value_or(g_default_max_ping_strikes));
2742
+
2743
+ g_default_max_pings_without_data =
2744
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
2745
+ .value_or(g_default_max_pings_without_data));
2746
+
2747
+ g_default_min_recv_ping_interval_without_data =
2748
+ std::max(grpc_core::Duration::Zero(),
2749
+ channel_args
2750
+ .GetDurationFromIntMillis(
2751
+ GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
2752
+ .value_or(g_default_min_recv_ping_interval_without_data));
2807
2753
  }
2808
2754
 
2809
2755
  static void init_keepalive_ping(grpc_chttp2_transport* t) {
@@ -2822,8 +2768,7 @@ static void init_keepalive_ping_locked(void* arg,
2822
2768
  if (t->destroying || !t->closed_with_error.ok()) {
2823
2769
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2824
2770
  } else {
2825
- if (t->keepalive_permit_without_calls ||
2826
- grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
2771
+ if (t->keepalive_permit_without_calls || !t->stream_map.empty()) {
2827
2772
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
2828
2773
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
2829
2774
  send_keepalive_ping_locked(t);
@@ -2976,8 +2921,9 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
2976
2921
  grpc_connectivity_state state,
2977
2922
  const absl::Status& status,
2978
2923
  const char* reason) {
2979
- GRPC_CHTTP2_IF_TRACING(
2980
- gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
2924
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
2925
+ GPR_INFO, "transport %p set connectivity_state=%d; status=%s; reason=%s",
2926
+ t, state, status.ToString().c_str(), reason));
2981
2927
  t->state_tracker.SetState(state, status, reason);
2982
2928
  }
2983
2929
 
@@ -3044,7 +2990,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3044
2990
 
3045
2991
  static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3046
2992
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3047
- if (error.ok() && grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2993
+ if (error.ok() && t->stream_map.empty()) {
3048
2994
  // Channel with no active streams: send a goaway to try and make it
3049
2995
  // disconnect cleanly
3050
2996
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
@@ -3061,7 +3007,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3061
3007
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3062
3008
  " streams",
3063
3009
  std::string(t->peer_string.as_string_view()).c_str(),
3064
- grpc_chttp2_stream_map_size(&t->stream_map));
3010
+ t->stream_map.size());
3065
3011
  }
3066
3012
  t->benign_reclaimer_registered = false;
3067
3013
  if (error != absl::CancelledError()) {
@@ -3072,11 +3018,10 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3072
3018
 
3073
3019
  static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3074
3020
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3075
- size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3076
3021
  t->destructive_reclaimer_registered = false;
3077
- if (error.ok() && n > 0) {
3078
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3079
- grpc_chttp2_stream_map_rand(&t->stream_map));
3022
+ if (error.ok() && !t->stream_map.empty()) {
3023
+ // As stream_map is a hash map, this selects effectively a random stream.
3024
+ grpc_chttp2_stream* s = t->stream_map.begin()->second;
3080
3025
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3081
3026
  gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3082
3027
  std::string(t->peer_string.as_string_view()).c_str(), s->id);
@@ -3086,7 +3031,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3086
3031
  grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
3087
3032
  grpc_core::StatusIntProperty::kHttp2Error,
3088
3033
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3089
- if (n > 1) {
3034
+ if (!t->stream_map.empty()) {
3090
3035
  // Since we cancel one stream per destructive reclamation, if
3091
3036
  // there are more streams left, we can immediately post a new
3092
3037
  // reclaimer in case the resource quota needs to free more