grpc 1.46.3 → 1.47.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/version.rb +1 -1
  461. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  462. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  463. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  464. metadata +36 -29
  465. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  466. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  467. data/src/core/lib/event_engine/sockaddr.h +0 -44
  468. data/src/core/lib/gprpp/capture.h +0 -76
  469. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  470. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  471. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  472. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  473. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  474. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  475. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  476. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  477. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  478. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  479. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  480. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  481. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -21,12 +21,19 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stddef.h>
24
+ #include <stdint.h>
25
+
26
+ #include <vector>
27
+
28
+ #include <grpc/slice.h>
25
29
 
26
30
  #include "src/core/ext/transport/chttp2/transport/frame.h"
27
31
  #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
32
+ #include "src/core/lib/iomgr/error.h"
28
33
  #include "src/core/lib/transport/metadata_batch.h"
29
34
 
35
+ // IWYU pragma: no_include <type_traits>
36
+
30
37
  namespace grpc_core {
31
38
 
32
39
  // Top level interface for parsing a sequence of header, continuation frames.
@@ -16,51 +16,81 @@
16
16
  *
17
17
  */
18
18
 
19
+ // IWYU pragma: no_include <ext/alloc_traits.h>
20
+
19
21
  #include <grpc/support/port_platform.h>
20
22
 
21
23
  #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
22
24
 
23
- #include <assert.h>
24
- #include <string.h>
25
+ #include <stdlib.h>
26
+
27
+ #include <algorithm>
28
+ #include <cstddef>
29
+ #include <cstring>
30
+ #include <utility>
25
31
 
26
32
  #include "absl/strings/str_format.h"
33
+ #include "absl/strings/string_view.h"
27
34
 
28
- #include <grpc/support/alloc.h>
29
35
  #include <grpc/support/log.h>
30
36
 
31
37
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
32
38
  #include "src/core/lib/debug/trace.h"
33
- #include "src/core/lib/gpr/murmur_hash.h"
34
- #include "src/core/lib/slice/slice_internal.h"
35
- #include "src/core/lib/surface/validate_metadata.h"
39
+ #include "src/core/lib/slice/slice.h"
36
40
 
37
41
  extern grpc_core::TraceFlag grpc_http_trace;
38
42
 
39
43
  namespace grpc_core {
40
44
 
41
- HPackTable::HPackTable() : static_metadata_(GetStaticMementos()) {}
45
+ void HPackTable::MementoRingBuffer::Put(Memento m) {
46
+ GPR_ASSERT(num_entries_ < max_entries_);
47
+ if (entries_.size() < max_entries_) {
48
+ ++num_entries_;
49
+ return entries_.push_back(std::move(m));
50
+ }
51
+ size_t index = (first_entry_ + num_entries_) % max_entries_;
52
+ entries_[index] = std::move(m);
53
+ ++num_entries_;
54
+ }
42
55
 
43
- HPackTable::~HPackTable() = default;
56
+ auto HPackTable::MementoRingBuffer::PopOne() -> Memento {
57
+ GPR_ASSERT(num_entries_ > 0);
58
+ size_t index = first_entry_ % max_entries_;
59
+ ++first_entry_;
60
+ --num_entries_;
61
+ return std::move(entries_[index]);
62
+ }
44
63
 
45
- /* Evict one element from the table */
46
- void HPackTable::EvictOne() {
47
- auto first_entry = std::move(entries_[first_entry_]);
48
- GPR_ASSERT(first_entry.transport_size() <= mem_used_);
49
- mem_used_ -= first_entry.transport_size();
50
- first_entry_ = ((first_entry_ + 1) % entries_.size());
51
- num_entries_--;
64
+ auto HPackTable::MementoRingBuffer::Lookup(uint32_t index) const
65
+ -> const Memento* {
66
+ if (index >= num_entries_) return nullptr;
67
+ uint32_t offset = (num_entries_ - 1u - index + first_entry_) % max_entries_;
68
+ return &entries_[offset];
52
69
  }
53
70
 
54
- void HPackTable::Rebuild(uint32_t new_cap) {
55
- EntriesVec entries;
56
- entries.resize(new_cap);
71
+ void HPackTable::MementoRingBuffer::Rebuild(uint32_t max_entries) {
72
+ if (max_entries == max_entries_) return;
73
+ std::vector<Memento> entries;
74
+ entries.reserve(num_entries_);
57
75
  for (size_t i = 0; i < num_entries_; i++) {
58
- entries[i] = std::move(entries_[(first_entry_ + i) % entries_.size()]);
76
+ entries.push_back(
77
+ std::move(entries_[(first_entry_ + i) % entries_.size()]));
59
78
  }
60
79
  first_entry_ = 0;
61
80
  entries_.swap(entries);
62
81
  }
63
82
 
83
+ HPackTable::HPackTable() : static_metadata_(GetStaticMementos()) {}
84
+
85
+ HPackTable::~HPackTable() = default;
86
+
87
+ /* Evict one element from the table */
88
+ void HPackTable::EvictOne() {
89
+ auto first_entry = entries_.PopOne();
90
+ GPR_ASSERT(first_entry.transport_size() <= mem_used_);
91
+ mem_used_ -= first_entry.transport_size();
92
+ }
93
+
64
94
  void HPackTable::SetMaxBytes(uint32_t max_bytes) {
65
95
  if (max_bytes_ == max_bytes) {
66
96
  return;
@@ -90,18 +120,9 @@ grpc_error_handle HPackTable::SetCurrentTableSize(uint32_t bytes) {
90
120
  EvictOne();
91
121
  }
92
122
  current_table_bytes_ = bytes;
93
- max_entries_ = hpack_constants::EntriesForBytes(bytes);
94
- if (max_entries_ > entries_.size()) {
95
- Rebuild(max_entries_);
96
- } else if (max_entries_ < entries_.size() / 3) {
97
- // TODO(ctiller): move to resource quota system, only shrink under memory
98
- // pressure
99
- uint32_t new_cap =
100
- std::max(max_entries_, static_cast<uint32_t>(kInlineEntries));
101
- if (new_cap != entries_.size()) {
102
- Rebuild(new_cap);
103
- }
104
- }
123
+ uint32_t new_cap = std::max(hpack_constants::EntriesForBytes(bytes),
124
+ hpack_constants::kInitialTableEntries);
125
+ entries_.Rebuild(new_cap);
105
126
  return GRPC_ERROR_NONE;
106
127
  }
107
128
 
@@ -122,7 +143,7 @@ grpc_error_handle HPackTable::Add(Memento md) {
122
143
  // attempt to add an entry larger than the entire table causes
123
144
  // the table to be emptied of all existing entries, and results in an
124
145
  // empty table.
125
- while (num_entries_) {
146
+ while (entries_.num_entries()) {
126
147
  EvictOne();
127
148
  }
128
149
  return GRPC_ERROR_NONE;
@@ -136,10 +157,7 @@ grpc_error_handle HPackTable::Add(Memento md) {
136
157
 
137
158
  // copy the finalized entry in
138
159
  mem_used_ += md.transport_size();
139
- entries_[(first_entry_ + num_entries_) % entries_.size()] = std::move(md);
140
-
141
- // update accounting values
142
- num_entries_++;
160
+ entries_.Put(std::move(md));
143
161
  return GRPC_ERROR_NONE;
144
162
  }
145
163
 
@@ -225,7 +243,7 @@ GPR_ATTRIBUTE_NOINLINE HPackTable::Memento MakeMemento(size_t i) {
225
243
 
226
244
  } // namespace
227
245
 
228
- const HPackTable::StaticMementos& HPackTable::GetStaticMementos() {
246
+ auto HPackTable::GetStaticMementos() -> const StaticMementos& {
229
247
  static const StaticMementos* const static_mementos = new StaticMementos();
230
248
  return *static_mementos;
231
249
  }
@@ -21,12 +21,14 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/slice.h>
24
+ #include <stdint.h>
25
+
26
+ #include <vector>
25
27
 
26
28
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
27
- #include "src/core/lib/gprpp/memory.h"
28
29
  #include "src/core/lib/iomgr/error.h"
29
30
  #include "src/core/lib/transport/metadata_batch.h"
31
+ #include "src/core/lib/transport/parsed_metadata.h"
30
32
 
31
33
  namespace grpc_core {
32
34
 
@@ -63,7 +65,7 @@ class HPackTable {
63
65
  grpc_error_handle Add(Memento md) GRPC_MUST_USE_RESULT;
64
66
 
65
67
  // Current entry count in the table.
66
- uint32_t num_entries() const { return num_entries_; }
68
+ uint32_t num_entries() const { return entries_.num_entries(); }
67
69
 
68
70
  private:
69
71
  struct StaticMementos {
@@ -72,28 +74,46 @@ class HPackTable {
72
74
  };
73
75
  static const StaticMementos& GetStaticMementos() GPR_ATTRIBUTE_NOINLINE;
74
76
 
75
- enum { kInlineEntries = hpack_constants::kInitialTableEntries };
76
- using EntriesVec = absl::InlinedVector<Memento, kInlineEntries>;
77
+ class MementoRingBuffer {
78
+ public:
79
+ // Rebuild this buffer with a new max_entries_ size.
80
+ void Rebuild(uint32_t max_entries);
81
+
82
+ // Put a new memento.
83
+ // REQUIRES: num_entries < max_entries
84
+ void Put(Memento m);
85
+
86
+ // Pop the oldest memento.
87
+ // REQUIRES: num_entries > 0
88
+ Memento PopOne();
89
+
90
+ // Lookup the entry at index, or return nullptr if none exists.
91
+ const Memento* Lookup(uint32_t index) const;
92
+
93
+ uint32_t max_entries() const { return max_entries_; }
94
+ uint32_t num_entries() const { return num_entries_; }
95
+
96
+ private:
97
+ // The index of the first entry in the buffer. May be greater than
98
+ // max_entries_, in which case a wraparound has occurred.
99
+ uint32_t first_entry_ = 0;
100
+ // How many entries are in the table.
101
+ uint32_t num_entries_ = 0;
102
+ // Maximum number of entries we could possibly fit in the table, given
103
+ // defined overheads.
104
+ uint32_t max_entries_ = hpack_constants::kInitialTableEntries;
105
+
106
+ std::vector<Memento> entries_;
107
+ };
77
108
 
78
109
  const Memento* LookupDynamic(uint32_t index) const {
79
110
  // Not static - find the value in the list of valid entries
80
111
  const uint32_t tbl_index = index - (hpack_constants::kLastStaticEntry + 1);
81
- if (tbl_index < num_entries_) {
82
- uint32_t offset =
83
- (num_entries_ - 1u - tbl_index + first_entry_) % entries_.size();
84
- return &entries_[offset];
85
- }
86
- // Invalid entry: return error
87
- return nullptr;
112
+ return entries_.Lookup(tbl_index);
88
113
  }
89
114
 
90
115
  void EvictOne();
91
- void Rebuild(uint32_t new_cap);
92
116
 
93
- // The first used entry in ents.
94
- uint32_t first_entry_ = 0;
95
- // How many entries are in the table.
96
- uint32_t num_entries_ = 0;
97
117
  // The amount of memory used by the table, according to the hpack algorithm
98
118
  uint32_t mem_used_ = 0;
99
119
  // The max memory allowed to be used by the table, according to the hpack
@@ -101,11 +121,8 @@ class HPackTable {
101
121
  uint32_t max_bytes_ = hpack_constants::kInitialTableSize;
102
122
  // The currently agreed size of the table, according to the hpack algorithm.
103
123
  uint32_t current_table_bytes_ = hpack_constants::kInitialTableSize;
104
- // Maximum number of entries we could possibly fit in the table, given defined
105
- // overheads.
106
- uint32_t max_entries_ = hpack_constants::kInitialTableEntries;
107
124
  // HPack table entries
108
- EntriesVec entries_{hpack_constants::kInitialTableEntries};
125
+ MementoRingBuffer entries_;
109
126
  // Mementos for static data
110
127
  const StaticMementos& static_metadata_;
111
128
  };
@@ -23,7 +23,6 @@
23
23
 
24
24
  #include <grpc/support/port_platform.h>
25
25
 
26
- #include <stdbool.h>
27
26
  #include <stdint.h>
28
27
 
29
28
  enum grpc_chttp2_setting_id {
@@ -21,8 +21,16 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <assert.h>
25
- #include <stdbool.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
27
+ #include <string>
28
+
29
+ #include "absl/strings/string_view.h"
30
+
31
+ #include <grpc/event_engine/memory_allocator.h>
32
+ #include <grpc/impl/codegen/grpc_types.h>
33
+ #include <grpc/slice.h>
26
34
 
27
35
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
28
36
  #include "src/core/ext/transport/chttp2/transport/frame.h"
@@ -34,15 +42,28 @@
34
42
  #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
35
43
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
36
44
  #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
45
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
37
46
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
38
47
  #include "src/core/lib/channel/channelz.h"
48
+ #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/gprpp/bitset.h"
50
+ #include "src/core/lib/gprpp/debug_location.h"
39
51
  #include "src/core/lib/gprpp/manual_constructor.h"
52
+ #include "src/core/lib/gprpp/orphanable.h"
53
+ #include "src/core/lib/gprpp/ref_counted.h"
54
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
55
+ #include "src/core/lib/gprpp/time.h"
56
+ #include "src/core/lib/iomgr/closure.h"
40
57
  #include "src/core/lib/iomgr/combiner.h"
41
58
  #include "src/core/lib/iomgr/endpoint.h"
59
+ #include "src/core/lib/iomgr/error.h"
42
60
  #include "src/core/lib/iomgr/timer.h"
61
+ #include "src/core/lib/resource_quota/arena.h"
43
62
  #include "src/core/lib/resource_quota/memory_quota.h"
63
+ #include "src/core/lib/transport/byte_stream.h"
44
64
  #include "src/core/lib/transport/connectivity_state.h"
45
65
  #include "src/core/lib/transport/metadata_batch.h"
66
+ #include "src/core/lib/transport/transport.h"
46
67
  #include "src/core/lib/transport/transport_impl.h"
47
68
 
48
69
  namespace grpc_core {
@@ -526,7 +547,7 @@ struct grpc_chttp2_stream {
526
547
  grpc_closure* destroy_stream_arg;
527
548
 
528
549
  grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
529
- uint8_t included[STREAM_LIST_COUNT] = {};
550
+ grpc_core::BitSet<STREAM_LIST_COUNT> included;
530
551
 
531
552
  /** HTTP2 stream id for this stream, or zero if one has not been assigned */
532
553
  uint32_t id = 0;
@@ -18,21 +18,42 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stdint.h>
21
22
  #include <string.h>
22
23
 
24
+ #include <string>
25
+
26
+ #include "absl/base/attributes.h"
23
27
  #include "absl/strings/str_cat.h"
24
28
  #include "absl/strings/str_format.h"
25
29
 
26
- #include <grpc/support/alloc.h>
30
+ #include <grpc/slice.h>
27
31
  #include <grpc/support/log.h>
28
32
 
33
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
34
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
35
+ #include "src/core/ext/transport/chttp2/transport/frame_data.h"
36
+ #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
37
+ #include "src/core/ext/transport/chttp2/transport/frame_ping.h"
38
+ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
39
+ #include "src/core/ext/transport/chttp2/transport/frame_settings.h"
40
+ #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
41
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
42
+ #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
43
+ #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
44
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
29
45
  #include "src/core/ext/transport/chttp2/transport/internal.h"
30
- #include "src/core/lib/profiling/timers.h"
31
- #include "src/core/lib/slice/slice_internal.h"
32
- #include "src/core/lib/slice/slice_string_helpers.h"
46
+ #include "src/core/ext/transport/chttp2/transport/stream_map.h"
47
+ #include "src/core/lib/channel/channelz.h"
48
+ #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/gprpp/manual_constructor.h"
50
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
+ #include "src/core/lib/gprpp/time.h"
52
+ #include "src/core/lib/iomgr/error.h"
53
+ #include "src/core/lib/transport/bdp_estimator.h"
33
54
  #include "src/core/lib/transport/http2_errors.h"
34
- #include "src/core/lib/transport/status_conversion.h"
35
- #include "src/core/lib/transport/timeout_encoding.h"
55
+ #include "src/core/lib/transport/metadata_batch.h"
56
+ #include "src/core/lib/transport/transport.h"
36
57
 
37
58
  using grpc_core::HPackParser;
38
59
 
@@ -20,8 +20,12 @@
20
20
 
21
21
  #include <grpc/support/log.h>
22
22
 
23
- #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
23
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
24
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
24
25
  #include "src/core/ext/transport/chttp2/transport/internal.h"
26
+ #include "src/core/lib/debug/trace.h"
27
+ #include "src/core/lib/gprpp/bitset.h"
28
+ #include "src/core/lib/gprpp/manual_constructor.h"
25
29
 
26
30
  static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
27
31
  switch (id) {
@@ -56,7 +60,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
56
60
  grpc_chttp2_stream* s = t->lists[id].head;
57
61
  if (s) {
58
62
  grpc_chttp2_stream* new_head = s->links[id].next;
59
- GPR_ASSERT(s->included[id]);
63
+ GPR_ASSERT(s->included.is_set(id));
60
64
  if (new_head) {
61
65
  t->lists[id].head = new_head;
62
66
  new_head->links[id].prev = nullptr;
@@ -64,7 +68,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
64
68
  t->lists[id].head = nullptr;
65
69
  t->lists[id].tail = nullptr;
66
70
  }
67
- s->included[id] = 0;
71
+ s->included.clear(id);
68
72
  }
69
73
  *stream = s;
70
74
  if (s && GRPC_TRACE_FLAG_ENABLED(grpc_trace_http2_stream_state)) {
@@ -76,8 +80,8 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
76
80
 
77
81
  static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
78
82
  grpc_chttp2_stream_list_id id) {
79
- GPR_ASSERT(s->included[id]);
80
- s->included[id] = 0;
83
+ GPR_ASSERT(s->included.is_set(id));
84
+ s->included.clear(id);
81
85
  if (s->links[id].prev) {
82
86
  s->links[id].prev->links[id].next = s->links[id].next;
83
87
  } else {
@@ -98,7 +102,7 @@ static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
98
102
  static bool stream_list_maybe_remove(grpc_chttp2_transport* t,
99
103
  grpc_chttp2_stream* s,
100
104
  grpc_chttp2_stream_list_id id) {
101
- if (s->included[id]) {
105
+ if (s->included.is_set(id)) {
102
106
  stream_list_remove(t, s, id);
103
107
  return true;
104
108
  } else {
@@ -110,7 +114,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
110
114
  grpc_chttp2_stream* s,
111
115
  grpc_chttp2_stream_list_id id) {
112
116
  grpc_chttp2_stream* old_tail;
113
- GPR_ASSERT(!s->included[id]);
117
+ GPR_ASSERT(!s->included.is_set(id));
114
118
  old_tail = t->lists[id].tail;
115
119
  s->links[id].next = nullptr;
116
120
  s->links[id].prev = old_tail;
@@ -120,7 +124,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
120
124
  t->lists[id].head = s;
121
125
  }
122
126
  t->lists[id].tail = s;
123
- s->included[id] = 1;
127
+ s->included.set(id);
124
128
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_http2_stream_state)) {
125
129
  gpr_log(GPR_INFO, "%p[%d][%s]: add to %s", t, s->id,
126
130
  t->is_client ? "cli" : "svr", stream_list_id_string(id));
@@ -129,7 +133,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
129
133
 
130
134
  static bool stream_list_add(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
131
135
  grpc_chttp2_stream_list_id id) {
132
- if (s->included[id]) {
136
+ if (s->included.is_set(id)) {
133
137
  return false;
134
138
  }
135
139
  stream_list_add_tail(t, s, id);
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
22
22
 
23
- #include <string.h>
23
+ #include <stdlib.h>
24
24
 
25
25
  #include <grpc/support/alloc.h>
26
26
  #include <grpc/support/log.h>
@@ -22,6 +22,7 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <stddef.h>
25
+ #include <stdint.h>
25
26
 
26
27
  /* Data structure to map a uint32_t to a data object (represented by a void*)
27
28
 
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stdint.h>
25
+
24
26
  /* Helpers for hpack varint encoding */
25
27
 
26
28
  namespace grpc_core {
@@ -18,17 +18,54 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <limits.h>
21
+ #include <inttypes.h>
22
+ #include <stddef.h>
22
23
 
24
+ #include <algorithm>
25
+ #include <memory>
26
+ #include <string>
27
+
28
+ #include "absl/types/optional.h"
29
+
30
+ #include <grpc/slice.h>
31
+ #include <grpc/slice_buffer.h>
23
32
  #include <grpc/support/log.h>
24
33
 
34
+ // IWYU pragma: no_include "src/core/lib/gprpp/orphanable.h"
35
+
25
36
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
26
37
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
38
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
39
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
40
+ #include "src/core/ext/transport/chttp2/transport/frame_data.h"
41
+ #include "src/core/ext/transport/chttp2/transport/frame_ping.h"
42
+ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
43
+ #include "src/core/ext/transport/chttp2/transport/frame_settings.h"
44
+ #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
45
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
46
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
27
47
  #include "src/core/ext/transport/chttp2/transport/internal.h"
48
+ #include "src/core/ext/transport/chttp2/transport/stream_map.h"
49
+ #include "src/core/lib/channel/channelz.h"
28
50
  #include "src/core/lib/debug/stats.h"
51
+ #include "src/core/lib/debug/trace.h"
52
+ #include "src/core/lib/gprpp/debug_location.h"
53
+ #include "src/core/lib/gprpp/manual_constructor.h"
54
+ #include "src/core/lib/gprpp/ref_counted.h"
55
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
56
+ #include "src/core/lib/gprpp/time.h"
57
+ #include "src/core/lib/iomgr/closure.h"
58
+ #include "src/core/lib/iomgr/endpoint.h"
59
+ #include "src/core/lib/iomgr/error.h"
60
+ #include "src/core/lib/iomgr/exec_ctx.h"
61
+ #include "src/core/lib/iomgr/timer.h"
29
62
  #include "src/core/lib/profiling/timers.h"
63
+ #include "src/core/lib/slice/slice.h"
30
64
  #include "src/core/lib/slice/slice_internal.h"
65
+ #include "src/core/lib/transport/bdp_estimator.h"
31
66
  #include "src/core/lib/transport/http2_errors.h"
67
+ #include "src/core/lib/transport/metadata_batch.h"
68
+ #include "src/core/lib/transport/transport.h"
32
69
 
33
70
  static void add_to_write_list(grpc_chttp2_write_cb** list,
34
71
  grpc_chttp2_write_cb* cb) {
@@ -226,7 +263,6 @@ static bool is_default_initial_metadata(grpc_metadata_batch* initial_metadata) {
226
263
  }
227
264
 
228
265
  namespace {
229
- class StreamWriteContext;
230
266
 
231
267
  class WriteContext {
232
268
  public:
@@ -1264,7 +1264,8 @@ grpc_channel* grpc_inproc_channel_create(grpc_server* server,
1264
1264
  args = grpc_channel_args_copy_and_add(args, &default_authority_arg, 1);
1265
1265
  const grpc_channel_args* client_args = grpc_core::CoreConfiguration::Get()
1266
1266
  .channel_args_preconditioning()
1267
- .PreconditionChannelArgs(args);
1267
+ .PreconditionChannelArgs(args)
1268
+ .ToC();
1268
1269
  grpc_channel_args_destroy(args);
1269
1270
  grpc_transport* server_transport;
1270
1271
  grpc_transport* client_transport;
@@ -1276,10 +1277,10 @@ grpc_channel* grpc_inproc_channel_create(grpc_server* server,
1276
1277
  server_transport, nullptr, server_args, nullptr);
1277
1278
  grpc_channel* channel = nullptr;
1278
1279
  if (error == GRPC_ERROR_NONE) {
1279
- channel = grpc_channel_create_internal("inproc", client_args,
1280
- GRPC_CLIENT_DIRECT_CHANNEL,
1281
- client_transport, &error);
1282
- if (error != GRPC_ERROR_NONE) {
1280
+ auto new_channel = grpc_core::Channel::Create(
1281
+ "inproc", grpc_core::ChannelArgs::FromC(client_args),
1282
+ GRPC_CLIENT_DIRECT_CHANNEL, client_transport);
1283
+ if (!new_channel.ok()) {
1283
1284
  GPR_ASSERT(!channel);
1284
1285
  gpr_log(GPR_ERROR, "Failed to create client channel: %s",
1285
1286
  grpc_error_std_string(error).c_str());
@@ -1294,6 +1295,8 @@ grpc_channel* grpc_inproc_channel_create(grpc_server* server,
1294
1295
  grpc_transport_destroy(server_transport);
1295
1296
  channel = grpc_lame_client_channel_create(
1296
1297
  nullptr, status, "Failed to create client channel");
1298
+ } else {
1299
+ channel = new_channel->release()->c_ptr();
1297
1300
  }
1298
1301
  } else {
1299
1302
  GPR_ASSERT(!channel);
@@ -0,0 +1,47 @@
1
+ /* This file was generated by upbc (the upb compiler) from the input
2
+ * file:
3
+ *
4
+ * xds/service/orca/v3/orca.proto
5
+ *
6
+ * Do not edit -- your changes will be discarded when the file is
7
+ * regenerated. */
8
+
9
+ #include <stddef.h>
10
+ #include "upb/msg_internal.h"
11
+ #include "xds/service/orca/v3/orca.upb.h"
12
+ #include "xds/data/orca/v3/orca_load_report.upb.h"
13
+ #include "google/protobuf/duration.upb.h"
14
+ #include "validate/validate.upb.h"
15
+
16
+ #include "upb/port_def.inc"
17
+
18
+ static const upb_MiniTable_Sub xds_service_orca_v3_OrcaLoadReportRequest_submsgs[1] = {
19
+ {.submsg = &google_protobuf_Duration_msginit},
20
+ };
21
+
22
+ static const upb_MiniTable_Field xds_service_orca_v3_OrcaLoadReportRequest__fields[2] = {
23
+ {1, UPB_SIZE(4, 8), UPB_SIZE(1, 1), 0, 11, kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
24
+ {2, UPB_SIZE(8, 16), UPB_SIZE(0, 0), kUpb_NoSub, 9, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
25
+ };
26
+
27
+ const upb_MiniTable xds_service_orca_v3_OrcaLoadReportRequest_msginit = {
28
+ &xds_service_orca_v3_OrcaLoadReportRequest_submsgs[0],
29
+ &xds_service_orca_v3_OrcaLoadReportRequest__fields[0],
30
+ UPB_SIZE(12, 24), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0,
31
+ };
32
+
33
+ static const upb_MiniTable *messages_layout[1] = {
34
+ &xds_service_orca_v3_OrcaLoadReportRequest_msginit,
35
+ };
36
+
37
+ const upb_MiniTable_File xds_service_orca_v3_orca_proto_upb_file_layout = {
38
+ messages_layout,
39
+ NULL,
40
+ NULL,
41
+ 1,
42
+ 0,
43
+ 0,
44
+ };
45
+
46
+ #include "upb/port_undef.inc"
47
+