grpc 1.41.1 → 1.44.0.pre2

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 (1156) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +185 -102
  3. data/include/grpc/event_engine/event_engine.h +118 -54
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  5. data/include/grpc/event_engine/memory_allocator.h +226 -0
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +304 -145
  9. data/include/grpc/grpc_security_constants.h +2 -14
  10. data/include/grpc/impl/codegen/compression_types.h +0 -2
  11. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  12. data/include/grpc/impl/codegen/port_platform.h +14 -3
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
  14. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  17. data/src/core/ext/filters/client_channel/client_channel.cc +305 -335
  18. data/src/core/ext/filters/client_channel/client_channel.h +84 -36
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -15
  22. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  24. data/src/core/ext/filters/client_channel/connector.h +18 -18
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  28. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -22
  29. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +13 -15
  31. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  34. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +5 -18
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +198 -116
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  45. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +66 -36
  46. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +21 -12
  47. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +124 -74
  48. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2514 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  50. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  51. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +18 -6
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -96
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +101 -46
  56. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +11 -3
  57. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +101 -209
  58. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  59. data/src/core/ext/filters/client_channel/lb_policy.h +105 -63
  60. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  61. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +220 -88
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  65. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
  66. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +124 -240
  67. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  68. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  69. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +90 -77
  70. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -11
  71. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  72. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +7 -16
  73. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  74. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +423 -396
  75. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -2
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  77. data/src/core/ext/filters/client_channel/retry_filter.cc +66 -131
  78. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  79. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  82. data/src/core/ext/filters/client_channel/subchannel.cc +99 -161
  83. data/src/core/ext/filters/client_channel/subchannel.h +31 -52
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  87. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  88. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +42 -53
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -9
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +70 -160
  94. data/src/core/ext/filters/http/client_authority_filter.cc +19 -36
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +46 -139
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +84 -183
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  103. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  104. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  105. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  106. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  107. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  108. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +270 -0
  109. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
  110. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
  111. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  112. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +26 -28
  113. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
  114. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +33 -53
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +146 -113
  116. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
  117. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
  118. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
  119. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  120. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -278
  121. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
  122. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  123. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -23
  125. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
  126. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -5
  127. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  128. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  129. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  130. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  131. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +384 -218
  133. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +89 -143
  134. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  135. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -202
  137. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -9
  138. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +106 -26
  139. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -44
  140. data/src/core/ext/transport/chttp2/transport/internal.h +10 -38
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -179
  142. data/src/core/ext/transport/chttp2/transport/writing.cc +65 -127
  143. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  144. data/src/core/ext/transport/inproc/inproc_transport.cc +114 -161
  145. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  146. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
  147. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
  148. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
  149. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
  150. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
  151. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  152. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
  153. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
  154. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
  155. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
  156. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
  157. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
  158. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +277 -208
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
  161. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
  162. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
  163. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +171 -125
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +90 -71
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -0
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +121 -92
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
  194. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
  195. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
  196. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -44
  197. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
  198. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
  199. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
  200. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
  201. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
  202. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
  203. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
  204. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
  205. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
  206. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
  210. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
  211. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
  212. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
  213. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
  214. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +99 -78
  215. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -0
  216. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
  217. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
  218. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +508 -442
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
  224. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
  233. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
  235. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
  243. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
  244. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
  245. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
  247. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
  248. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
  249. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
  250. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
  251. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
  252. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
  253. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
  254. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
  255. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
  256. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
  257. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
  258. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
  259. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
  260. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
  261. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
  262. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
  263. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
  280. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
  281. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
  282. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
  283. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
  284. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
  287. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
  288. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
  289. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
  290. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
  291. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
  292. data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
  293. data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
  294. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
  295. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
  296. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
  297. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
  298. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
  299. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
  300. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
  304. data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
  305. data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
  306. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
  308. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
  310. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
  312. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
  314. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
  316. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
  318. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
  320. data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
  322. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
  332. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +68 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -0
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -5
  337. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
  341. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
  342. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
  343. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
  345. data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
  346. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +103 -0
  347. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +25 -13
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +20 -8
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +19 -8
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +28 -16
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +19 -8
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +71 -0
  361. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
  362. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
  363. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -0
  364. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
  366. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
  369. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +307 -336
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
  374. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
  375. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
  376. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +100 -138
  377. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +61 -77
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +61 -79
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
  390. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
  391. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +80 -99
  392. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
  393. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
  394. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
  395. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
  398. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
  399. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +325 -427
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
  405. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
  408. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
  409. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
  413. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
  414. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
  415. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
  416. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
  417. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
  418. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
  419. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
  420. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
  421. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
  422. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
  424. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
  426. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
  435. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
  436. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
  437. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
  438. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
  439. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
  440. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
  441. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
  442. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  443. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  444. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  445. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  447. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  448. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  449. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  450. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  451. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  452. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
  453. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
  454. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
  455. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
  456. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
  457. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
  458. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
  459. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
  460. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
  461. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +7 -15
  462. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
  463. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
  464. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
  465. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
  466. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
  467. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  468. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  469. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
  470. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
  471. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
  472. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
  473. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
  474. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
  475. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  476. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  477. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  478. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  479. data/src/core/ext/xds/upb_utils.h +65 -0
  480. data/src/core/ext/xds/xds_api.cc +159 -3468
  481. data/src/core/ext/xds/xds_api.h +57 -558
  482. data/src/core/ext/xds/xds_bootstrap.cc +189 -122
  483. data/src/core/ext/xds/xds_bootstrap.h +30 -15
  484. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  485. data/src/core/ext/xds/xds_certificate_provider.h +2 -2
  486. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  487. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  488. data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
  489. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  490. data/src/core/ext/xds/xds_client.cc +751 -844
  491. data/src/core/ext/xds/xds_client.h +100 -143
  492. data/src/core/ext/xds/xds_client_stats.h +1 -1
  493. data/src/core/ext/xds/xds_cluster.cc +451 -0
  494. data/src/core/ext/xds/xds_cluster.h +111 -0
  495. data/src/core/ext/xds/xds_common_types.cc +388 -0
  496. data/src/core/ext/xds/xds_common_types.h +110 -0
  497. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  498. data/src/core/ext/xds/xds_endpoint.h +135 -0
  499. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  500. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  501. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  502. data/src/core/ext/xds/xds_listener.cc +1036 -0
  503. data/src/core/ext/xds/xds_listener.h +220 -0
  504. data/src/core/ext/{filters/workarounds/workaround_cronet_compression_filter.h → xds/xds_resource_type.cc} +14 -8
  505. data/src/core/ext/xds/xds_resource_type.h +98 -0
  506. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  507. data/src/core/ext/xds/xds_route_config.cc +993 -0
  508. data/src/core/ext/xds/xds_route_config.h +215 -0
  509. data/src/core/ext/xds/xds_routing.cc +250 -0
  510. data/src/core/ext/xds/xds_routing.h +101 -0
  511. data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -289
  512. data/src/core/lib/address_utils/parse_address.cc +22 -0
  513. data/src/core/lib/address_utils/parse_address.h +5 -0
  514. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  515. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  516. data/src/core/lib/avl/avl.h +389 -88
  517. data/src/core/lib/backoff/backoff.cc +6 -32
  518. data/src/core/lib/backoff/backoff.h +3 -3
  519. data/src/core/lib/channel/channel_args.cc +25 -8
  520. data/src/core/lib/channel/channel_args.h +11 -1
  521. data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
  522. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  523. data/src/core/lib/channel/channel_stack.cc +8 -0
  524. data/src/core/lib/channel/channel_stack.h +1 -1
  525. data/src/core/lib/channel/channel_stack_builder.cc +8 -14
  526. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  527. data/src/core/lib/channel/channel_trace.cc +7 -7
  528. data/src/core/lib/channel/channel_trace.h +1 -1
  529. data/src/core/lib/channel/channelz.cc +4 -3
  530. data/src/core/lib/channel/channelz.h +2 -2
  531. data/src/core/lib/channel/channelz_registry.cc +1 -1
  532. data/src/core/lib/channel/channelz_registry.h +1 -1
  533. data/src/core/lib/channel/connected_channel.cc +1 -3
  534. data/src/core/lib/channel/connected_channel.h +1 -2
  535. data/src/core/lib/compression/compression.cc +21 -113
  536. data/src/core/lib/compression/compression_internal.cc +142 -202
  537. data/src/core/lib/compression/compression_internal.h +64 -69
  538. data/src/core/lib/compression/message_compress.cc +11 -11
  539. data/src/core/lib/compression/message_compress.h +2 -2
  540. data/src/core/lib/config/core_configuration.cc +46 -2
  541. data/src/core/lib/config/core_configuration.h +50 -1
  542. data/src/core/lib/debug/stats.cc +1 -1
  543. data/src/core/lib/debug/stats_data.cc +13 -13
  544. data/src/core/lib/debug/trace.h +2 -2
  545. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  546. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  547. data/src/core/lib/event_engine/event_engine.cc +0 -13
  548. data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
  549. data/src/core/lib/event_engine/event_engine_factory.h +33 -0
  550. data/src/core/lib/event_engine/memory_allocator.cc +70 -0
  551. data/src/core/lib/gpr/atm.cc +1 -1
  552. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  553. data/src/core/lib/gpr/string.cc +2 -2
  554. data/src/core/lib/gpr/tls.h +7 -1
  555. data/src/core/lib/gpr/useful.h +83 -32
  556. data/src/core/lib/gprpp/bitset.h +45 -16
  557. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  558. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  559. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  560. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  561. data/src/core/lib/gprpp/global_config_env.h +2 -2
  562. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  563. data/src/core/lib/gprpp/memory.h +6 -0
  564. data/src/core/lib/gprpp/orphanable.h +1 -1
  565. data/src/core/lib/gprpp/ref_counted.h +1 -1
  566. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  567. data/src/core/lib/gprpp/status_helper.cc +35 -23
  568. data/src/core/lib/gprpp/status_helper.h +14 -16
  569. data/src/core/lib/gprpp/table.h +434 -0
  570. data/src/core/lib/http/httpcli.cc +215 -202
  571. data/src/core/lib/http/httpcli.h +17 -27
  572. data/src/core/lib/http/parser.cc +2 -2
  573. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  574. data/src/core/lib/iomgr/buffer_list.h +13 -13
  575. data/src/core/lib/iomgr/call_combiner.cc +44 -16
  576. data/src/core/lib/iomgr/closure.h +29 -9
  577. data/src/core/lib/iomgr/combiner.cc +31 -24
  578. data/src/core/lib/iomgr/endpoint.h +0 -1
  579. data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
  580. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  581. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  582. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  583. data/src/core/lib/iomgr/error.cc +115 -52
  584. data/src/core/lib/iomgr/error.h +53 -9
  585. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  586. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  587. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  588. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  589. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  590. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  591. data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
  592. data/src/core/lib/iomgr/event_engine/iomgr.cc +9 -28
  593. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  594. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  595. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  596. data/src/core/lib/iomgr/event_engine/resolver.cc +68 -46
  597. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  598. data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
  599. data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
  600. data/src/core/lib/iomgr/exec_ctx.cc +23 -18
  601. data/src/core/lib/iomgr/exec_ctx.h +11 -11
  602. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  603. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  604. data/src/core/lib/iomgr/executor.cc +26 -34
  605. data/src/core/lib/iomgr/executor.h +1 -1
  606. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  607. data/src/core/lib/iomgr/iomgr.cc +3 -1
  608. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  609. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  610. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  611. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  612. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  613. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  614. data/src/core/lib/iomgr/load_file.cc +2 -2
  615. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  616. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  617. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  618. data/src/core/lib/iomgr/port.h +2 -2
  619. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  620. data/src/core/lib/iomgr/resolve_address.h +47 -44
  621. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  622. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  623. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  624. data/src/core/lib/iomgr/resolve_address_posix.cc +87 -73
  625. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  626. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  627. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  628. data/src/core/lib/iomgr/resolved_address.h +39 -0
  629. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  630. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  631. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  632. data/src/core/lib/iomgr/tcp_client.cc +2 -4
  633. data/src/core/lib/iomgr/tcp_client.h +1 -3
  634. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -12
  635. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
  636. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
  637. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  638. data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
  639. data/src/core/lib/iomgr/tcp_custom.cc +9 -36
  640. data/src/core/lib/iomgr/tcp_custom.h +0 -1
  641. data/src/core/lib/iomgr/tcp_posix.cc +32 -38
  642. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  643. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  644. data/src/core/lib/iomgr/tcp_server.h +6 -8
  645. data/src/core/lib/iomgr/tcp_server_custom.cc +7 -16
  646. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
  647. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  648. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  649. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  650. data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
  651. data/src/core/lib/iomgr/tcp_windows.cc +4 -9
  652. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  653. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  654. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  655. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  656. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  657. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  658. data/src/core/lib/iomgr/work_serializer.cc +115 -44
  659. data/src/core/lib/iomgr/work_serializer.h +16 -4
  660. data/src/core/lib/json/json_reader.cc +83 -35
  661. data/src/core/lib/json/json_util.cc +69 -1
  662. data/src/core/lib/json/json_util.h +57 -99
  663. data/src/core/lib/json/json_writer.cc +0 -3
  664. data/src/core/lib/matchers/matchers.cc +1 -1
  665. data/src/core/lib/promise/activity.cc +115 -0
  666. data/src/core/lib/promise/activity.h +528 -0
  667. data/src/core/lib/promise/context.h +86 -0
  668. data/src/core/lib/promise/detail/basic_seq.h +407 -0
  669. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  670. data/src/core/lib/promise/detail/promise_like.h +85 -0
  671. data/src/core/lib/promise/detail/status.h +49 -0
  672. data/src/core/lib/promise/detail/switch.h +1455 -0
  673. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  674. data/src/core/lib/promise/loop.h +108 -0
  675. data/src/core/lib/promise/map.h +88 -0
  676. data/src/core/lib/promise/poll.h +60 -0
  677. data/src/core/lib/promise/race.h +84 -0
  678. data/src/core/lib/promise/seq.h +71 -0
  679. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  680. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  681. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +12 -5
  682. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +15 -17
  683. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +5 -7
  684. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  685. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  686. data/src/core/lib/resource_quota/api.cc +108 -0
  687. data/src/core/lib/resource_quota/api.h +40 -0
  688. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  689. data/src/core/lib/{gprpp → resource_quota}/arena.h +32 -11
  690. data/src/core/lib/resource_quota/memory_quota.cc +454 -0
  691. data/src/core/lib/resource_quota/memory_quota.h +421 -0
  692. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  693. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  694. data/src/core/lib/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
  695. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  696. data/src/core/lib/resource_quota/trace.cc +19 -0
  697. data/src/core/lib/resource_quota/trace.h +24 -0
  698. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  699. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  700. data/src/core/lib/security/authorization/evaluate_args.cc +41 -30
  701. data/src/core/lib/security/authorization/evaluate_args.h +3 -1
  702. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  703. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  704. data/src/core/lib/security/authorization/matchers.cc +227 -0
  705. data/src/core/lib/security/authorization/matchers.h +211 -0
  706. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  707. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  708. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
  709. data/src/core/lib/security/context/security_context.cc +8 -4
  710. data/src/core/lib/security/context/security_context.h +1 -1
  711. data/src/core/lib/security/credentials/composite/composite_credentials.cc +6 -6
  712. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  713. data/src/core/lib/security/credentials/credentials.cc +4 -2
  714. data/src/core/lib/security/credentials/credentials.h +16 -21
  715. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +8 -12
  716. data/src/core/lib/security/credentials/external/external_account_credentials.cc +57 -24
  717. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -7
  718. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
  719. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  720. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  721. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -9
  722. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  723. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  724. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  725. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -29
  726. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  727. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -24
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +53 -70
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -9
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  733. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  737. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +15 -88
  738. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +26 -82
  739. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  740. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  741. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  742. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
  743. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  744. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -6
  745. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  746. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
  747. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  748. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
  749. data/src/core/lib/security/security_connector/security_connector.cc +9 -8
  750. data/src/core/lib/security/security_connector/security_connector.h +6 -2
  751. data/src/core/lib/security/security_connector/ssl_utils.cc +25 -27
  752. data/src/core/lib/security/security_connector/ssl_utils.h +6 -15
  753. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +347 -198
  754. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
  755. data/src/core/lib/security/transport/auth_filters.h +7 -0
  756. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  757. data/src/core/lib/security/transport/security_handshaker.cc +75 -45
  758. data/src/core/lib/security/transport/server_auth_filter.cc +40 -37
  759. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  760. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.cc +2 -2
  761. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.h +4 -4
  762. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  763. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +3 -3
  764. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +8 -6
  765. data/src/core/lib/slice/percent_encoding.cc +30 -86
  766. data/src/core/lib/slice/percent_encoding.h +5 -11
  767. data/src/core/lib/slice/slice.cc +10 -24
  768. data/src/core/lib/slice/slice.h +371 -0
  769. data/src/core/lib/{compression/stream_compression_gzip.h → slice/slice_api.cc} +18 -7
  770. data/src/core/lib/slice/slice_buffer.cc +9 -5
  771. data/src/core/lib/slice/slice_intern.cc +4 -107
  772. data/src/core/lib/slice/slice_internal.h +2 -246
  773. data/src/core/lib/slice/slice_refcount.cc +17 -0
  774. data/src/core/lib/slice/slice_refcount.h +116 -0
  775. data/src/core/lib/slice/slice_refcount_base.h +165 -0
  776. data/src/core/lib/slice/slice_split.cc +100 -0
  777. data/src/core/lib/slice/slice_split.h +40 -0
  778. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  779. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  780. data/src/core/lib/surface/builtins.cc +49 -0
  781. data/src/core/lib/surface/builtins.h +26 -0
  782. data/src/core/lib/surface/call.cc +249 -482
  783. data/src/core/lib/surface/call.h +4 -10
  784. data/src/core/lib/surface/channel.cc +53 -93
  785. data/src/core/lib/surface/channel.h +6 -25
  786. data/src/core/lib/surface/channel_init.cc +23 -76
  787. data/src/core/lib/surface/channel_init.h +52 -44
  788. data/src/core/lib/surface/completion_queue.cc +8 -7
  789. data/src/core/lib/surface/init.cc +0 -42
  790. data/src/core/lib/surface/init_secure.cc +17 -14
  791. data/src/core/lib/surface/lame_client.cc +41 -28
  792. data/src/core/lib/surface/lame_client.h +1 -1
  793. data/src/core/lib/surface/server.cc +46 -55
  794. data/src/core/lib/surface/server.h +27 -21
  795. data/src/core/lib/surface/validate_metadata.cc +7 -4
  796. data/src/core/lib/surface/version.cc +2 -2
  797. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  798. data/src/core/lib/transport/byte_stream.cc +4 -0
  799. data/src/core/lib/transport/error_utils.cc +42 -17
  800. data/src/core/lib/transport/error_utils.h +15 -1
  801. data/src/core/lib/transport/metadata_batch.h +1167 -176
  802. data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +14 -17
  803. data/src/core/lib/transport/parsed_metadata.h +385 -0
  804. data/src/core/lib/transport/pid_controller.cc +4 -4
  805. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  806. data/src/core/lib/transport/timeout_encoding.h +40 -10
  807. data/src/core/lib/transport/transport.cc +8 -31
  808. data/src/core/lib/transport/transport.h +1 -2
  809. data/src/core/lib/transport/transport_op_string.cc +7 -20
  810. data/src/core/lib/uri/uri_parser.cc +233 -63
  811. data/src/core/lib/uri/uri_parser.h +38 -23
  812. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -45
  813. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  814. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  815. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  816. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -4
  817. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  820. data/src/core/tsi/fake_transport_security.cc +15 -7
  821. data/src/core/tsi/local_transport_security.cc +43 -80
  822. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  823. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  824. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  825. data/src/core/tsi/ssl_transport_security.cc +93 -16
  826. data/src/core/tsi/ssl_transport_security.h +19 -6
  827. data/src/core/tsi/transport_security.cc +12 -0
  828. data/src/core/tsi/transport_security.h +16 -1
  829. data/src/core/tsi/transport_security_interface.h +26 -0
  830. data/src/ruby/ext/grpc/extconf.rb +21 -11
  831. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -10
  832. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -15
  833. data/src/ruby/lib/grpc/version.rb +1 -1
  834. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  835. data/src/ruby/spec/client_server_spec.rb +1 -1
  836. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  837. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  838. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  839. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  840. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  841. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  842. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  843. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  844. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  845. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  846. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  847. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  848. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  849. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  850. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  851. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  852. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  853. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  854. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  855. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  856. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  857. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  858. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  859. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  860. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  861. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  862. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  863. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  864. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  865. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  866. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  867. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  868. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  869. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  870. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  871. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  872. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  873. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  874. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  875. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  876. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  877. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  878. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  879. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  880. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  881. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  882. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  883. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  884. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  885. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  886. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  887. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  888. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  889. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  890. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  891. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  892. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  893. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  894. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  895. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  896. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  897. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  898. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  899. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  900. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  901. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  902. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  903. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  904. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  905. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  906. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  907. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  908. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  909. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  910. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  911. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  912. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  913. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  914. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  915. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  916. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  917. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  918. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  919. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  920. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  921. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  922. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  923. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  924. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  925. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  926. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  927. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  928. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  930. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  931. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  932. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  933. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  934. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  935. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  936. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  937. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  938. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  939. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  940. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  956. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  960. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  961. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  962. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  963. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  964. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  970. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  971. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  972. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  975. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  976. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  977. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  978. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  979. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  980. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  981. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  982. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  983. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  984. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  985. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  987. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  988. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  989. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  990. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  991. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  993. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  994. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  995. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  996. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  997. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  998. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  999. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1000. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  1001. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1002. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  1003. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1004. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1005. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1006. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +41 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1009. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1011. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1013. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1014. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1015. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  1024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1029. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1030. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1034. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1035. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1036. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1037. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1038. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1039. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1040. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1041. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1042. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1043. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1044. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1045. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1046. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1047. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1048. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1050. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1051. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  1052. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1019 -274
  1053. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1054. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  1055. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1056. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1057. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1058. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1059. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1060. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1061. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1062. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1063. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1064. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1065. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1066. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1067. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +31 -13
  1068. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +491 -58
  1069. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  1070. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1071. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1072. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1073. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1074. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  1075. data/third_party/re2/re2/compile.cc +91 -109
  1076. data/third_party/re2/re2/dfa.cc +27 -39
  1077. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1078. data/third_party/re2/re2/filtered_re2.h +10 -5
  1079. data/third_party/re2/re2/nfa.cc +1 -1
  1080. data/third_party/re2/re2/parse.cc +42 -23
  1081. data/third_party/re2/re2/perl_groups.cc +34 -34
  1082. data/third_party/re2/re2/prefilter.cc +3 -2
  1083. data/third_party/re2/re2/prog.cc +182 -4
  1084. data/third_party/re2/re2/prog.h +28 -9
  1085. data/third_party/re2/re2/re2.cc +87 -118
  1086. data/third_party/re2/re2/re2.h +156 -141
  1087. data/third_party/re2/re2/regexp.cc +12 -5
  1088. data/third_party/re2/re2/regexp.h +8 -2
  1089. data/third_party/re2/re2/set.cc +31 -9
  1090. data/third_party/re2/re2/set.h +9 -4
  1091. data/third_party/re2/re2/simplify.cc +11 -3
  1092. data/third_party/re2/re2/tostring.cc +1 -1
  1093. data/third_party/re2/re2/walker-inl.h +1 -1
  1094. data/third_party/re2/util/mutex.h +2 -2
  1095. data/third_party/re2/util/pcre.h +3 -3
  1096. data/third_party/upb/upb/decode.c +309 -178
  1097. data/third_party/upb/upb/decode_fast.c +1 -1
  1098. data/third_party/upb/upb/decode_internal.h +1 -0
  1099. data/third_party/upb/upb/def.c +330 -85
  1100. data/third_party/upb/upb/def.h +45 -14
  1101. data/third_party/upb/upb/def.hpp +17 -4
  1102. data/third_party/upb/upb/encode.c +100 -40
  1103. data/third_party/upb/upb/msg.c +22 -9
  1104. data/third_party/upb/upb/msg_internal.h +90 -8
  1105. data/third_party/upb/upb/reflection.c +98 -58
  1106. data/third_party/upb/upb/reflection.h +6 -2
  1107. data/third_party/upb/upb/text_encode.c +3 -3
  1108. data/third_party/upb/upb/upb.c +8 -0
  1109. data/third_party/xxhash/xxhash.h +607 -352
  1110. metadata +259 -115
  1111. data/include/grpc/event_engine/slice_allocator.h +0 -71
  1112. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1113. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1114. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1115. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1116. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1117. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1118. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  1119. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1120. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1121. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1122. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1123. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1124. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1125. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1126. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  1127. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1128. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  1129. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1130. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1131. data/src/core/lib/avl/avl.cc +0 -306
  1132. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1133. data/src/core/lib/compression/compression_args.cc +0 -136
  1134. data/src/core/lib/compression/compression_args.h +0 -56
  1135. data/src/core/lib/compression/stream_compression.cc +0 -81
  1136. data/src/core/lib/compression/stream_compression.h +0 -117
  1137. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1138. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1139. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1140. data/src/core/lib/gprpp/match.h +0 -73
  1141. data/src/core/lib/gprpp/overload.h +0 -59
  1142. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1143. data/src/core/lib/iomgr/resource_quota.cc +0 -1104
  1144. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1145. data/src/core/lib/iomgr/udp_server.cc +0 -747
  1146. data/src/core/lib/iomgr/udp_server.h +0 -103
  1147. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1148. data/src/core/lib/transport/metadata.cc +0 -693
  1149. data/src/core/lib/transport/metadata.h +0 -448
  1150. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1151. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1152. data/src/core/lib/transport/static_metadata.h +0 -604
  1153. data/src/core/lib/transport/status_metadata.cc +0 -62
  1154. data/src/core/lib/transport/status_metadata.h +0 -48
  1155. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1156. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -39,17 +39,18 @@
39
39
  #include <grpc/support/string_util.h>
40
40
 
41
41
  #include "src/core/lib/channel/channel_stack.h"
42
- #include "src/core/lib/compression/algorithm_metadata.h"
42
+ #include "src/core/lib/compression/compression_internal.h"
43
43
  #include "src/core/lib/debug/stats.h"
44
44
  #include "src/core/lib/gpr/alloc.h"
45
45
  #include "src/core/lib/gpr/string.h"
46
46
  #include "src/core/lib/gpr/time_precise.h"
47
47
  #include "src/core/lib/gpr/useful.h"
48
- #include "src/core/lib/gprpp/arena.h"
49
48
  #include "src/core/lib/gprpp/manual_constructor.h"
50
49
  #include "src/core/lib/gprpp/ref_counted.h"
51
50
  #include "src/core/lib/iomgr/timer.h"
52
51
  #include "src/core/lib/profiling/timers.h"
52
+ #include "src/core/lib/resource_quota/arena.h"
53
+ #include "src/core/lib/slice/slice_split.h"
53
54
  #include "src/core/lib/slice/slice_string_helpers.h"
54
55
  #include "src/core/lib/slice/slice_utils.h"
55
56
  #include "src/core/lib/surface/api_trace.h"
@@ -59,9 +60,6 @@
59
60
  #include "src/core/lib/surface/server.h"
60
61
  #include "src/core/lib/surface/validate_metadata.h"
61
62
  #include "src/core/lib/transport/error_utils.h"
62
- #include "src/core/lib/transport/metadata.h"
63
- #include "src/core/lib/transport/static_metadata.h"
64
- #include "src/core/lib/transport/status_metadata.h"
65
63
  #include "src/core/lib/transport/transport.h"
66
64
 
67
65
  /** The maximum number of concurrent batches possible.
@@ -75,11 +73,6 @@
75
73
  - status/close recv (depending on client/server) */
76
74
  #define MAX_CONCURRENT_BATCHES 6
77
75
 
78
- #define MAX_SEND_EXTRA_METADATA_COUNT 3
79
-
80
- // Used to create arena for the first call.
81
- #define ESTIMATED_MDELEM_COUNT 16
82
-
83
76
  struct batch_control {
84
77
  batch_control() = default;
85
78
 
@@ -107,7 +100,7 @@ struct batch_control {
107
100
  grpc_closure start_batch;
108
101
  grpc_closure finish_batch;
109
102
  std::atomic<intptr_t> steps_to_complete{0};
110
- gpr_atm batch_error = reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE);
103
+ AtomicError batch_error;
111
104
  void set_num_steps_to_complete(uintptr_t steps) {
112
105
  steps_to_complete.store(steps, std::memory_order_release);
113
106
  }
@@ -143,13 +136,7 @@ struct grpc_call {
143
136
  cq(args.cq),
144
137
  channel(args.channel),
145
138
  is_client(args.server_transport_data == nullptr),
146
- stream_op_payload(context) {
147
- for (int i = 0; i < 2; i++) {
148
- for (int j = 0; j < 2; j++) {
149
- metadata_batch[i][j].deadline = GRPC_MILLIS_INF_FUTURE;
150
- }
151
- }
152
- }
139
+ stream_op_payload(context) {}
153
140
 
154
141
  ~grpc_call() {
155
142
  for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
@@ -192,14 +179,15 @@ struct grpc_call {
192
179
  grpc_transport_stream_op_batch_payload stream_op_payload;
193
180
 
194
181
  /* first idx: is_receiving, second idx: is_trailing */
195
- grpc_metadata_batch metadata_batch[2][2] = {};
182
+ grpc_metadata_batch send_initial_metadata{arena};
183
+ grpc_metadata_batch send_trailing_metadata{arena};
184
+ grpc_metadata_batch recv_initial_metadata{arena};
185
+ grpc_metadata_batch recv_trailing_metadata{arena};
196
186
 
197
187
  /* Buffered read metadata waiting to be returned to the application.
198
188
  Element 0 is initial metadata, element 1 is trailing metadata. */
199
189
  grpc_metadata_array* buffered_metadata[2] = {};
200
190
 
201
- grpc_metadata compression_md;
202
-
203
191
  // A char* indicating the peer name.
204
192
  gpr_atm peer_string = 0;
205
193
 
@@ -208,24 +196,18 @@ struct grpc_call {
208
196
  grpc_call_final_info final_info;
209
197
 
210
198
  /* Compression algorithm for *incoming* data */
211
- grpc_message_compression_algorithm incoming_message_compression_algorithm =
212
- GRPC_MESSAGE_COMPRESS_NONE;
213
- /* Stream compression algorithm for *incoming* data */
214
- grpc_stream_compression_algorithm incoming_stream_compression_algorithm =
215
- GRPC_STREAM_COMPRESS_NONE;
199
+ grpc_compression_algorithm incoming_compression_algorithm =
200
+ GRPC_COMPRESS_NONE;
216
201
  /* Supported encodings (compression algorithms), a bitset.
217
202
  * Always support no compression. */
218
- uint32_t encodings_accepted_by_peer = 1 << GRPC_MESSAGE_COMPRESS_NONE;
203
+ grpc_core::CompressionAlgorithmSet encodings_accepted_by_peer{
204
+ GRPC_COMPRESS_NONE};
219
205
  /* Supported stream encodings (stream compression algorithms), a bitset */
220
206
  uint32_t stream_encodings_accepted_by_peer = 0;
221
207
 
222
208
  /* Contexts for various subsystems (security, tracing, ...). */
223
209
  grpc_call_context_element context[GRPC_CONTEXT_COUNT] = {};
224
210
 
225
- /* for the client, extra metadata is initial metadata; for the
226
- server, it's trailing metadata */
227
- grpc_linked_mdelem send_extra_metadata[MAX_SEND_EXTRA_METADATA_COUNT];
228
- int send_extra_metadata_count;
229
211
  grpc_millis send_deadline;
230
212
 
231
213
  grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> sending_stream;
@@ -257,7 +239,7 @@ struct grpc_call {
257
239
  grpc_core::Server* core_server;
258
240
  } server;
259
241
  } final_op;
260
- gpr_atm status_error = 0;
242
+ AtomicError status_error;
261
243
 
262
244
  /* recv_state can contain one of the following values:
263
245
  RECV_NONE : : no initial metadata and messages received
@@ -341,11 +323,10 @@ static parent_call* get_parent_call(grpc_call* call) {
341
323
  }
342
324
 
343
325
  size_t grpc_call_get_initial_size_estimate() {
344
- return sizeof(grpc_call) + sizeof(batch_control) * MAX_CONCURRENT_BATCHES +
345
- sizeof(grpc_linked_mdelem) * ESTIMATED_MDELEM_COUNT;
326
+ return sizeof(grpc_call) + sizeof(batch_control) * MAX_CONCURRENT_BATCHES;
346
327
  }
347
328
 
348
- grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
329
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
349
330
  grpc_call** out_call) {
350
331
  GPR_TIMER_SCOPE("grpc_call_create", 0);
351
332
 
@@ -365,7 +346,8 @@ grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
365
346
  call_and_stack_size + (args->parent ? sizeof(child_call) : 0);
366
347
 
367
348
  std::pair<grpc_core::Arena*, void*> arena_with_call =
368
- grpc_core::Arena::CreateWithAlloc(initial_size, call_alloc_size);
349
+ grpc_core::Arena::CreateWithAlloc(initial_size, call_alloc_size,
350
+ &*args->channel->allocator);
369
351
  arena = arena_with_call.first;
370
352
  call = new (arena_with_call.second) grpc_call(arena, *args);
371
353
  *out_call = call;
@@ -375,24 +357,17 @@ grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
375
357
  call->final_op.client.status = nullptr;
376
358
  call->final_op.client.error_string = nullptr;
377
359
  GRPC_STATS_INC_CLIENT_CALLS_CREATED();
378
- GPR_ASSERT(args->add_initial_metadata_count <
379
- MAX_SEND_EXTRA_METADATA_COUNT);
380
- for (size_t i = 0; i < args->add_initial_metadata_count; i++) {
381
- call->send_extra_metadata[i].md = args->add_initial_metadata[i];
382
- if (grpc_slice_eq_static_interned(
383
- GRPC_MDKEY(args->add_initial_metadata[i]), GRPC_MDSTR_PATH)) {
384
- path = grpc_slice_ref_internal(
385
- GRPC_MDVALUE(args->add_initial_metadata[i]));
386
- }
360
+ path = grpc_slice_ref_internal(args->path->c_slice());
361
+ call->send_initial_metadata.Set(grpc_core::HttpPathMetadata(),
362
+ std::move(*args->path));
363
+ if (args->authority.has_value()) {
364
+ call->send_initial_metadata.Set(grpc_core::HttpAuthorityMetadata(),
365
+ std::move(*args->authority));
387
366
  }
388
- call->send_extra_metadata_count =
389
- static_cast<int>(args->add_initial_metadata_count);
390
367
  } else {
391
368
  GRPC_STATS_INC_SERVER_CALLS_CREATED();
392
369
  call->final_op.server.cancelled = nullptr;
393
370
  call->final_op.server.core_server = args->server;
394
- GPR_ASSERT(args->add_initial_metadata_count == 0);
395
- call->send_extra_metadata_count = 0;
396
371
  }
397
372
 
398
373
  grpc_millis send_deadline = args->send_deadline;
@@ -407,7 +382,7 @@ grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
407
382
  GPR_ASSERT(!args->parent->is_client);
408
383
 
409
384
  if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
410
- send_deadline = GPR_MIN(send_deadline, args->parent->send_deadline);
385
+ send_deadline = std::min(send_deadline, args->parent->send_deadline);
411
386
  }
412
387
  /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
413
388
  * GRPC_PROPAGATE_STATS_CONTEXT */
@@ -545,31 +520,23 @@ static void release_call(void* call, grpc_error_handle /*error*/) {
545
520
 
546
521
  static void destroy_call(void* call, grpc_error_handle /*error*/) {
547
522
  GPR_TIMER_SCOPE("destroy_call", 0);
548
- size_t i;
549
- int ii;
550
523
  grpc_call* c = static_cast<grpc_call*>(call);
551
- for (i = 0; i < 2; i++) {
552
- grpc_metadata_batch_destroy(
553
- &c->metadata_batch[1 /* is_receiving */][i /* is_initial */]);
554
- }
524
+ c->recv_initial_metadata.Clear();
525
+ c->recv_trailing_metadata.Clear();
555
526
  c->receiving_stream.reset();
556
527
  parent_call* pc = get_parent_call(c);
557
528
  if (pc != nullptr) {
558
529
  pc->~parent_call();
559
530
  }
560
- for (ii = 0; ii < c->send_extra_metadata_count; ii++) {
561
- GRPC_MDELEM_UNREF(c->send_extra_metadata[ii].md);
562
- }
563
531
  if (c->cq) {
564
532
  GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
565
533
  }
566
534
 
567
- grpc_error_handle status_error =
568
- reinterpret_cast<grpc_error_handle>(gpr_atm_acq_load(&c->status_error));
535
+ grpc_error_handle status_error = c->status_error.get();
569
536
  grpc_error_get_status(status_error, c->send_deadline,
570
537
  &c->final_info.final_status, nullptr, nullptr,
571
538
  &(c->final_info.error_string));
572
- GRPC_ERROR_UNREF(status_error);
539
+ c->status_error.set(GRPC_ERROR_NONE);
573
540
  c->final_info.stats.latency =
574
541
  gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time);
575
542
  grpc_call_stack_destroy(CALL_STACK_FROM_CALL(c), &c->final_info,
@@ -734,8 +701,7 @@ static grpc_error_handle error_from_status(grpc_status_code status,
734
701
  // guarantee that can be short-lived.
735
702
  return grpc_error_set_int(
736
703
  grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
737
- GRPC_ERROR_STR_GRPC_MESSAGE,
738
- grpc_slice_from_copied_string(description)),
704
+ GRPC_ERROR_STR_GRPC_MESSAGE, description),
739
705
  GRPC_ERROR_INT_GRPC_STATUS, status);
740
706
  }
741
707
 
@@ -750,13 +716,14 @@ static void set_final_status(grpc_call* call, grpc_error_handle error) {
750
716
  gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
751
717
  }
752
718
  if (call->is_client) {
719
+ std::string status_details;
753
720
  grpc_error_get_status(error, call->send_deadline,
754
- call->final_op.client.status,
755
- call->final_op.client.status_details, nullptr,
756
- call->final_op.client.error_string);
757
- // explicitly take a ref
758
- grpc_slice_ref_internal(*call->final_op.client.status_details);
759
- gpr_atm_rel_store(&call->status_error, reinterpret_cast<gpr_atm>(error));
721
+ call->final_op.client.status, &status_details,
722
+ nullptr, call->final_op.client.error_string);
723
+ *call->final_op.client.status_details =
724
+ grpc_slice_from_cpp_string(std::move(status_details));
725
+ call->status_error.set(error);
726
+ GRPC_ERROR_UNREF(error);
760
727
  grpc_core::channelz::ChannelNode* channelz_channel =
761
728
  grpc_channel_get_channelz_node(call->channel);
762
729
  if (channelz_channel != nullptr) {
@@ -772,9 +739,7 @@ static void set_final_status(grpc_call* call, grpc_error_handle error) {
772
739
  grpc_core::channelz::ServerNode* channelz_node =
773
740
  call->final_op.server.core_server->channelz_node();
774
741
  if (channelz_node != nullptr) {
775
- if (*call->final_op.server.cancelled ||
776
- reinterpret_cast<grpc_error_handle>(
777
- gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
742
+ if (*call->final_op.server.cancelled || !call->status_error.ok()) {
778
743
  channelz_node->RecordCallFailed();
779
744
  } else {
780
745
  channelz_node->RecordCallSucceeded();
@@ -788,31 +753,9 @@ static void set_final_status(grpc_call* call, grpc_error_handle error) {
788
753
  * COMPRESSION
789
754
  */
790
755
 
791
- static void set_incoming_message_compression_algorithm(
792
- grpc_call* call, grpc_message_compression_algorithm algo) {
793
- GPR_ASSERT(algo < GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT);
794
- call->incoming_message_compression_algorithm = algo;
795
- }
796
-
797
- static void set_incoming_stream_compression_algorithm(
798
- grpc_call* call, grpc_stream_compression_algorithm algo) {
799
- GPR_ASSERT(algo < GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT);
800
- call->incoming_stream_compression_algorithm = algo;
801
- }
802
-
803
756
  grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
804
757
  grpc_call* call) {
805
- grpc_compression_algorithm algorithm = GRPC_COMPRESS_NONE;
806
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
807
- &algorithm, call->incoming_message_compression_algorithm,
808
- call->incoming_stream_compression_algorithm);
809
- return algorithm;
810
- }
811
-
812
- static grpc_compression_algorithm compression_algorithm_for_level_locked(
813
- grpc_call* call, grpc_compression_level level) {
814
- return grpc_compression_algorithm_for_level(level,
815
- call->encodings_accepted_by_peer);
758
+ return call->incoming_compression_algorithm;
816
759
  }
817
760
 
818
761
  uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
@@ -821,237 +764,125 @@ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
821
764
  return flags;
822
765
  }
823
766
 
824
- static void destroy_encodings_accepted_by_peer(void* /*p*/) {}
825
-
826
- static void set_encodings_accepted_by_peer(grpc_call* /*call*/,
827
- grpc_mdelem mdel,
828
- uint32_t* encodings_accepted_by_peer,
829
- bool stream_encoding) {
830
- size_t i;
831
- uint32_t algorithm;
832
- grpc_slice_buffer accept_encoding_parts;
833
- grpc_slice accept_encoding_slice;
834
- void* accepted_user_data;
835
-
836
- accepted_user_data =
837
- grpc_mdelem_get_user_data(mdel, destroy_encodings_accepted_by_peer);
838
- if (accepted_user_data != nullptr) {
839
- *encodings_accepted_by_peer = static_cast<uint32_t>(
840
- reinterpret_cast<uintptr_t>(accepted_user_data) - 1);
841
- return;
842
- }
843
-
844
- *encodings_accepted_by_peer = 0;
845
-
846
- accept_encoding_slice = GRPC_MDVALUE(mdel);
847
- grpc_slice_buffer_init(&accept_encoding_parts);
848
- grpc_slice_split_without_space(accept_encoding_slice, ",",
849
- &accept_encoding_parts);
850
-
851
- GPR_BITSET(encodings_accepted_by_peer, GRPC_COMPRESS_NONE);
852
- for (i = 0; i < accept_encoding_parts.count; i++) {
853
- int r;
854
- grpc_slice accept_encoding_entry_slice = accept_encoding_parts.slices[i];
855
- if (!stream_encoding) {
856
- r = grpc_message_compression_algorithm_parse(
857
- accept_encoding_entry_slice,
858
- reinterpret_cast<grpc_message_compression_algorithm*>(&algorithm));
859
- } else {
860
- r = grpc_stream_compression_algorithm_parse(
861
- accept_encoding_entry_slice,
862
- reinterpret_cast<grpc_stream_compression_algorithm*>(&algorithm));
863
- }
864
- if (r) {
865
- GPR_BITSET(encodings_accepted_by_peer, algorithm);
866
- } else {
867
- char* accept_encoding_entry_str =
868
- grpc_slice_to_c_string(accept_encoding_entry_slice);
869
- gpr_log(GPR_DEBUG,
870
- "Unknown entry in accept encoding metadata: '%s'. Ignoring.",
871
- accept_encoding_entry_str);
872
- gpr_free(accept_encoding_entry_str);
873
- }
874
- }
875
-
876
- grpc_slice_buffer_destroy_internal(&accept_encoding_parts);
877
-
878
- grpc_mdelem_set_user_data(
879
- mdel, destroy_encodings_accepted_by_peer,
880
- reinterpret_cast<void*>(
881
- static_cast<uintptr_t>(*encodings_accepted_by_peer) + 1));
882
- }
883
-
884
767
  uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
885
- uint32_t encodings_accepted_by_peer;
886
- encodings_accepted_by_peer = call->encodings_accepted_by_peer;
887
- return encodings_accepted_by_peer;
888
- }
889
-
890
- grpc_stream_compression_algorithm
891
- grpc_call_test_only_get_incoming_stream_encodings(grpc_call* call) {
892
- return call->incoming_stream_compression_algorithm;
893
- }
894
-
895
- static grpc_linked_mdelem* linked_from_md(grpc_metadata* md) {
896
- return reinterpret_cast<grpc_linked_mdelem*>(&md->internal_data);
897
- }
898
-
899
- static grpc_metadata* get_md_elem(grpc_metadata* metadata,
900
- grpc_metadata* additional_metadata, int i,
901
- int count) {
902
- grpc_metadata* res =
903
- i < count ? &metadata[i] : &additional_metadata[i - count];
904
- GPR_ASSERT(res);
905
- return res;
768
+ return call->encodings_accepted_by_peer.ToLegacyBitmask();
906
769
  }
907
770
 
908
771
  static int prepare_application_metadata(grpc_call* call, int count,
909
772
  grpc_metadata* metadata,
910
- int is_trailing,
911
- int prepend_extra_metadata,
912
- grpc_metadata* additional_metadata,
913
- int additional_metadata_count) {
914
- int total_count = count + additional_metadata_count;
773
+ int is_trailing) {
915
774
  int i;
916
- grpc_metadata_batch* batch =
917
- &call->metadata_batch[0 /* is_receiving */][is_trailing];
918
- for (i = 0; i < total_count; i++) {
919
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
920
- grpc_linked_mdelem* l = linked_from_md(md);
921
- GPR_ASSERT(sizeof(grpc_linked_mdelem) == sizeof(md->internal_data));
775
+ grpc_metadata_batch* batch = is_trailing ? &call->send_trailing_metadata
776
+ : &call->send_initial_metadata;
777
+ for (i = 0; i < count; i++) {
778
+ grpc_metadata* md = &metadata[i];
922
779
  if (!GRPC_LOG_IF_ERROR("validate_metadata",
923
780
  grpc_validate_header_key_is_legal(md->key))) {
924
- break;
781
+ return 0;
925
782
  } else if (!grpc_is_binary_header_internal(md->key) &&
926
783
  !GRPC_LOG_IF_ERROR(
927
784
  "validate_metadata",
928
785
  grpc_validate_header_nonbin_value_is_legal(md->value))) {
929
- break;
786
+ return 0;
930
787
  } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
931
788
  // HTTP2 hpack encoding has a maximum limit.
932
- break;
789
+ return 0;
933
790
  }
934
- l->md = grpc_mdelem_from_grpc_metadata(const_cast<grpc_metadata*>(md));
791
+ batch->Append(
792
+ grpc_core::StringViewFromSlice(md->key),
793
+ grpc_core::Slice(grpc_slice_ref_internal(md->value)),
794
+ [md](absl::string_view error, const grpc_core::Slice& value) {
795
+ gpr_log(
796
+ GPR_DEBUG, "Append error: %s",
797
+ absl::StrCat("key=", grpc_core::StringViewFromSlice(md->key),
798
+ " error=", error, " value=", value.as_string_view())
799
+ .c_str());
800
+ });
935
801
  }
936
- if (i != total_count) {
937
- for (int j = 0; j < i; j++) {
938
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, j, count);
939
- grpc_linked_mdelem* l = linked_from_md(md);
940
- GRPC_MDELEM_UNREF(l->md);
941
- }
942
- return 0;
802
+
803
+ return 1;
804
+ }
805
+
806
+ namespace {
807
+ class PublishToAppEncoder {
808
+ public:
809
+ explicit PublishToAppEncoder(grpc_metadata_array* dest) : dest_(dest) {}
810
+
811
+ void Encode(const grpc_core::Slice& key, const grpc_core::Slice& value) {
812
+ Append(key.c_slice(), value.c_slice());
943
813
  }
944
- if (prepend_extra_metadata) {
945
- if (call->send_extra_metadata_count == 0) {
946
- prepend_extra_metadata = 0;
947
- } else {
948
- for (i = 0; i < call->send_extra_metadata_count; i++) {
949
- GRPC_LOG_IF_ERROR("prepare_application_metadata",
950
- grpc_metadata_batch_link_tail(
951
- batch, &call->send_extra_metadata[i]));
952
- }
953
- }
814
+
815
+ // Catch anything that is not explicitly handled, and do not publish it to the
816
+ // application. If new metadata is added to a batch that needs to be
817
+ // published, it should be called out here.
818
+ template <typename Which>
819
+ void Encode(Which, const typename Which::ValueType&) {}
820
+
821
+ void Encode(grpc_core::UserAgentMetadata, const grpc_core::Slice& slice) {
822
+ Append(grpc_core::UserAgentMetadata::key(), slice);
954
823
  }
955
- for (i = 0; i < total_count; i++) {
956
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
957
- grpc_linked_mdelem* l = linked_from_md(md);
958
- grpc_error_handle error = grpc_metadata_batch_link_tail(batch, l);
959
- if (error != GRPC_ERROR_NONE) {
960
- GRPC_MDELEM_UNREF(l->md);
961
- }
962
- GRPC_LOG_IF_ERROR("prepare_application_metadata", error);
824
+
825
+ void Encode(grpc_core::HostMetadata, const grpc_core::Slice& slice) {
826
+ Append(grpc_core::HostMetadata::key(), slice);
963
827
  }
964
- call->send_extra_metadata_count = 0;
965
828
 
966
- return 1;
967
- }
829
+ void Encode(grpc_core::GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
830
+ Append(grpc_core::GrpcPreviousRpcAttemptsMetadata::key(), count);
831
+ }
968
832
 
969
- static grpc_message_compression_algorithm decode_message_compression(
970
- grpc_mdelem md) {
971
- grpc_message_compression_algorithm algorithm =
972
- grpc_message_compression_algorithm_from_slice(GRPC_MDVALUE(md));
973
- if (algorithm == GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) {
974
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
975
- gpr_log(GPR_ERROR,
976
- "Invalid incoming message compression algorithm: '%s'. "
977
- "Interpreting incoming data as uncompressed.",
978
- md_c_str);
979
- gpr_free(md_c_str);
980
- return GRPC_MESSAGE_COMPRESS_NONE;
981
- }
982
- return algorithm;
983
- }
833
+ void Encode(grpc_core::GrpcRetryPushbackMsMetadata, grpc_millis count) {
834
+ Append(grpc_core::GrpcRetryPushbackMsMetadata::key(), count);
835
+ }
984
836
 
985
- static grpc_stream_compression_algorithm decode_stream_compression(
986
- grpc_mdelem md) {
987
- grpc_stream_compression_algorithm algorithm =
988
- grpc_stream_compression_algorithm_from_slice(GRPC_MDVALUE(md));
989
- if (algorithm == GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT) {
990
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
991
- gpr_log(GPR_ERROR,
992
- "Invalid incoming stream compression algorithm: '%s'. Interpreting "
993
- "incoming data as uncompressed.",
994
- md_c_str);
995
- gpr_free(md_c_str);
996
- return GRPC_STREAM_COMPRESS_NONE;
997
- }
998
- return algorithm;
999
- }
837
+ void Encode(grpc_core::LbTokenMetadata, const grpc_core::Slice& slice) {
838
+ Append(grpc_core::LbTokenMetadata::key(), slice);
839
+ }
840
+
841
+ private:
842
+ void Append(absl::string_view key, int64_t value) {
843
+ Append(grpc_core::StaticSlice::FromStaticString(key).c_slice(),
844
+ grpc_core::Slice::FromInt64(value).c_slice());
845
+ }
846
+
847
+ void Append(absl::string_view key, const grpc_core::Slice& value) {
848
+ Append(grpc_core::StaticSlice::FromStaticString(key).c_slice(),
849
+ value.c_slice());
850
+ }
851
+
852
+ void Append(grpc_slice key, grpc_slice value) {
853
+ auto* mdusr = &dest_->metadata[dest_->count++];
854
+ mdusr->key = key;
855
+ mdusr->value = value;
856
+ }
857
+
858
+ grpc_metadata_array* const dest_;
859
+ };
860
+ } // namespace
1000
861
 
1001
862
  static void publish_app_metadata(grpc_call* call, grpc_metadata_batch* b,
1002
863
  int is_trailing) {
1003
- if (b->list.count == 0) return;
864
+ if (b->count() == 0) return;
1004
865
  if (!call->is_client && is_trailing) return;
1005
866
  if (is_trailing && call->buffered_metadata[1] == nullptr) return;
1006
867
  GPR_TIMER_SCOPE("publish_app_metadata", 0);
1007
868
  grpc_metadata_array* dest;
1008
- grpc_metadata* mdusr;
1009
869
  dest = call->buffered_metadata[is_trailing];
1010
- if (dest->count + b->list.count > dest->capacity) {
870
+ if (dest->count + b->count() > dest->capacity) {
1011
871
  dest->capacity =
1012
- GPR_MAX(dest->capacity + b->list.count, dest->capacity * 3 / 2);
872
+ std::max(dest->capacity + b->count(), dest->capacity * 3 / 2);
1013
873
  dest->metadata = static_cast<grpc_metadata*>(
1014
874
  gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
1015
875
  }
1016
- for (grpc_linked_mdelem* l = b->list.head; l != nullptr; l = l->next) {
1017
- mdusr = &dest->metadata[dest->count++];
1018
- /* we pass back borrowed slices that are valid whilst the call is valid */
1019
- mdusr->key = GRPC_MDKEY(l->md);
1020
- mdusr->value = GRPC_MDVALUE(l->md);
1021
- }
876
+ PublishToAppEncoder encoder(dest);
877
+ b->Encode(&encoder);
1022
878
  }
1023
879
 
1024
880
  static void recv_initial_filter(grpc_call* call, grpc_metadata_batch* b) {
1025
- if (b->idx.named.content_encoding != nullptr) {
1026
- GPR_TIMER_SCOPE("incoming_stream_compression_algorithm", 0);
1027
- set_incoming_stream_compression_algorithm(
1028
- call, decode_stream_compression(b->idx.named.content_encoding->md));
1029
- grpc_metadata_batch_remove(b, GRPC_BATCH_CONTENT_ENCODING);
1030
- }
1031
- if (b->idx.named.grpc_encoding != nullptr) {
1032
- GPR_TIMER_SCOPE("incoming_message_compression_algorithm", 0);
1033
- set_incoming_message_compression_algorithm(
1034
- call, decode_message_compression(b->idx.named.grpc_encoding->md));
1035
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ENCODING);
1036
- }
1037
- uint32_t message_encodings_accepted_by_peer = 1u;
1038
- uint32_t stream_encodings_accepted_by_peer = 1u;
1039
- if (b->idx.named.grpc_accept_encoding != nullptr) {
1040
- GPR_TIMER_SCOPE("encodings_accepted_by_peer", 0);
1041
- set_encodings_accepted_by_peer(call, b->idx.named.grpc_accept_encoding->md,
1042
- &message_encodings_accepted_by_peer, false);
1043
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ACCEPT_ENCODING);
1044
- }
1045
- if (b->idx.named.accept_encoding != nullptr) {
1046
- GPR_TIMER_SCOPE("stream_encodings_accepted_by_peer", 0);
1047
- set_encodings_accepted_by_peer(call, b->idx.named.accept_encoding->md,
1048
- &stream_encodings_accepted_by_peer, true);
1049
- grpc_metadata_batch_remove(b, GRPC_BATCH_ACCEPT_ENCODING);
1050
- }
881
+ call->incoming_compression_algorithm =
882
+ b->Take(grpc_core::GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
1051
883
  call->encodings_accepted_by_peer =
1052
- grpc_compression_bitset_from_message_stream_compression_bitset(
1053
- message_encodings_accepted_by_peer,
1054
- stream_encodings_accepted_by_peer);
884
+ b->Take(grpc_core::GrpcAcceptEncodingMetadata())
885
+ .value_or(grpc_core::CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
1055
886
  publish_app_metadata(call, b, false);
1056
887
  }
1057
888
 
@@ -1060,39 +891,39 @@ static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
1060
891
  grpc_call* call = static_cast<grpc_call*>(args);
1061
892
  if (batch_error != GRPC_ERROR_NONE) {
1062
893
  set_final_status(call, batch_error);
1063
- } else if (b->idx.named.grpc_status != nullptr) {
1064
- grpc_status_code status_code =
1065
- grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
1066
- grpc_error_handle error = GRPC_ERROR_NONE;
1067
- if (status_code != GRPC_STATUS_OK) {
1068
- char* peer = grpc_call_get_peer(call);
1069
- error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1070
- "Error received from peer ", peer)),
1071
- GRPC_ERROR_INT_GRPC_STATUS,
1072
- static_cast<intptr_t>(status_code));
1073
- gpr_free(peer);
1074
- }
1075
- if (b->idx.named.grpc_message != nullptr) {
1076
- error = grpc_error_set_str(
1077
- error, GRPC_ERROR_STR_GRPC_MESSAGE,
1078
- grpc_slice_ref_internal(GRPC_MDVALUE(b->idx.named.grpc_message->md)));
1079
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_MESSAGE);
1080
- } else if (error != GRPC_ERROR_NONE) {
1081
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1082
- grpc_empty_slice());
1083
- }
1084
- set_final_status(call, GRPC_ERROR_REF(error));
1085
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_STATUS);
1086
- GRPC_ERROR_UNREF(error);
1087
- } else if (!call->is_client) {
1088
- set_final_status(call, GRPC_ERROR_NONE);
1089
894
  } else {
1090
- gpr_log(GPR_DEBUG,
1091
- "Received trailing metadata with no error and no status");
1092
- set_final_status(
1093
- call, grpc_error_set_int(
1094
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
1095
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
895
+ absl::optional<grpc_status_code> grpc_status =
896
+ b->Take(grpc_core::GrpcStatusMetadata());
897
+ if (grpc_status.has_value()) {
898
+ grpc_status_code status_code = *grpc_status;
899
+ grpc_error_handle error = GRPC_ERROR_NONE;
900
+ if (status_code != GRPC_STATUS_OK) {
901
+ char* peer = grpc_call_get_peer(call);
902
+ error = grpc_error_set_int(
903
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(
904
+ absl::StrCat("Error received from peer ", peer)),
905
+ GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
906
+ gpr_free(peer);
907
+ }
908
+ auto grpc_message = b->Take(grpc_core::GrpcMessageMetadata());
909
+ if (grpc_message.has_value()) {
910
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
911
+ grpc_message->as_string_view());
912
+ } else if (error != GRPC_ERROR_NONE) {
913
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "");
914
+ }
915
+ set_final_status(call, GRPC_ERROR_REF(error));
916
+ GRPC_ERROR_UNREF(error);
917
+ } else if (!call->is_client) {
918
+ set_final_status(call, GRPC_ERROR_NONE);
919
+ } else {
920
+ gpr_log(GPR_DEBUG,
921
+ "Received trailing metadata with no error and no status");
922
+ set_final_status(
923
+ call, grpc_error_set_int(
924
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
925
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
926
+ }
1096
927
  }
1097
928
  publish_app_metadata(call, b, true);
1098
929
  }
@@ -1156,6 +987,7 @@ static batch_control* reuse_or_allocate_batch_control(grpc_call* call,
1156
987
  }
1157
988
  bctl->~batch_control();
1158
989
  bctl->op = {};
990
+ new (&bctl->batch_error) AtomicError();
1159
991
  } else {
1160
992
  bctl = call->arena->New<batch_control>();
1161
993
  *pslot = bctl;
@@ -1174,21 +1006,16 @@ static void finish_batch_completion(void* user_data,
1174
1006
  }
1175
1007
 
1176
1008
  static void reset_batch_errors(batch_control* bctl) {
1177
- GRPC_ERROR_UNREF(reinterpret_cast<grpc_error_handle>(
1178
- gpr_atm_acq_load(&bctl->batch_error)));
1179
- gpr_atm_rel_store(&bctl->batch_error,
1180
- reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE));
1009
+ bctl->batch_error.set(GRPC_ERROR_NONE);
1181
1010
  }
1182
1011
 
1183
1012
  static void post_batch_completion(batch_control* bctl) {
1184
1013
  grpc_call* next_child_call;
1185
1014
  grpc_call* call = bctl->call;
1186
- grpc_error_handle error = GRPC_ERROR_REF(reinterpret_cast<grpc_error_handle>(
1187
- gpr_atm_acq_load(&bctl->batch_error)));
1015
+ grpc_error_handle error = GRPC_ERROR_REF(bctl->batch_error.get());
1188
1016
 
1189
1017
  if (bctl->op.send_initial_metadata) {
1190
- grpc_metadata_batch_destroy(
1191
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */]);
1018
+ call->send_initial_metadata.Clear();
1192
1019
  }
1193
1020
  if (bctl->op.send_message) {
1194
1021
  if (bctl->op.payload->send_message.stream_write_closed &&
@@ -1200,8 +1027,7 @@ static void post_batch_completion(batch_control* bctl) {
1200
1027
  call->sending_message = false;
1201
1028
  }
1202
1029
  if (bctl->op.send_trailing_metadata) {
1203
- grpc_metadata_batch_destroy(
1204
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */]);
1030
+ call->send_trailing_metadata.Clear();
1205
1031
  }
1206
1032
  if (bctl->op.recv_trailing_metadata) {
1207
1033
  /* propagate cancellation to any interested children */
@@ -1330,15 +1156,9 @@ static void process_data_after_md(batch_control* bctl) {
1330
1156
  } else {
1331
1157
  call->test_only_last_message_flags = call->receiving_stream->flags();
1332
1158
  if ((call->receiving_stream->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
1333
- (call->incoming_message_compression_algorithm >
1334
- GRPC_MESSAGE_COMPRESS_NONE)) {
1335
- grpc_compression_algorithm algo;
1336
- GPR_ASSERT(
1337
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1338
- &algo, call->incoming_message_compression_algorithm,
1339
- (grpc_stream_compression_algorithm)0));
1340
- *call->receiving_buffer =
1341
- grpc_raw_compressed_byte_buffer_create(nullptr, 0, algo);
1159
+ (call->incoming_compression_algorithm != GRPC_COMPRESS_NONE)) {
1160
+ *call->receiving_buffer = grpc_raw_compressed_byte_buffer_create(
1161
+ nullptr, 0, call->incoming_compression_algorithm);
1342
1162
  } else {
1343
1163
  *call->receiving_buffer = grpc_raw_byte_buffer_create(nullptr, 0);
1344
1164
  }
@@ -1353,10 +1173,8 @@ static void receiving_stream_ready(void* bctlp, grpc_error_handle error) {
1353
1173
  grpc_call* call = bctl->call;
1354
1174
  if (error != GRPC_ERROR_NONE) {
1355
1175
  call->receiving_stream.reset();
1356
- if (reinterpret_cast<grpc_error_handle>(
1357
- gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1358
- gpr_atm_rel_store(&bctl->batch_error,
1359
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1176
+ if (bctl->batch_error.ok()) {
1177
+ bctl->batch_error.set(error);
1360
1178
  }
1361
1179
  cancel_with_error(call, GRPC_ERROR_REF(error));
1362
1180
  }
@@ -1381,35 +1199,6 @@ static void receiving_stream_ready_in_call_combiner(void* bctlp,
1381
1199
  receiving_stream_ready(bctlp, error);
1382
1200
  }
1383
1201
 
1384
- static void GPR_ATTRIBUTE_NOINLINE
1385
- handle_both_stream_and_msg_compression_set(grpc_call* call) {
1386
- std::string error_msg = absl::StrFormat(
1387
- "Incoming stream has both stream compression (%d) and message "
1388
- "compression (%d).",
1389
- call->incoming_stream_compression_algorithm,
1390
- call->incoming_message_compression_algorithm);
1391
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1392
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1393
- }
1394
-
1395
- static void GPR_ATTRIBUTE_NOINLINE
1396
- handle_error_parsing_compression_algorithm(grpc_call* call) {
1397
- std::string error_msg = absl::StrFormat(
1398
- "Error in incoming message compression (%d) or stream "
1399
- "compression (%d).",
1400
- call->incoming_stream_compression_algorithm,
1401
- call->incoming_message_compression_algorithm);
1402
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1403
- }
1404
-
1405
- static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
1406
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1407
- std::string error_msg = absl::StrFormat(
1408
- "Invalid compression algorithm value '%d'.", compression_algorithm);
1409
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1410
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1411
- }
1412
-
1413
1202
  static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_disabled(
1414
1203
  grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1415
1204
  const char* algo_name = nullptr;
@@ -1425,44 +1214,30 @@ static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_not_accepted(
1425
1214
  const char* algo_name = nullptr;
1426
1215
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1427
1216
  gpr_log(GPR_ERROR,
1428
- "Compression algorithm ('%s') not present in the bitset of "
1429
- "accepted encodings ('0x%x')",
1430
- algo_name, call->encodings_accepted_by_peer);
1217
+ "Compression algorithm ('%s') not present in the "
1218
+ "accepted encodings (%s)",
1219
+ algo_name, call->encodings_accepted_by_peer.ToString().c_str());
1431
1220
  }
1432
1221
 
1433
1222
  static void validate_filtered_metadata(batch_control* bctl) {
1434
- grpc_compression_algorithm compression_algorithm;
1435
1223
  grpc_call* call = bctl->call;
1436
- if (GPR_UNLIKELY(call->incoming_stream_compression_algorithm !=
1437
- GRPC_STREAM_COMPRESS_NONE &&
1438
- call->incoming_message_compression_algorithm !=
1439
- GRPC_MESSAGE_COMPRESS_NONE)) {
1440
- handle_both_stream_and_msg_compression_set(call);
1441
- } else if (
1442
- GPR_UNLIKELY(
1443
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1444
- &compression_algorithm,
1445
- call->incoming_message_compression_algorithm,
1446
- call->incoming_stream_compression_algorithm) == 0)) {
1447
- handle_error_parsing_compression_algorithm(call);
1448
- } else {
1449
- const grpc_compression_options compression_options =
1450
- grpc_channel_compression_options(call->channel);
1451
- if (GPR_UNLIKELY(compression_algorithm >= GRPC_COMPRESS_ALGORITHMS_COUNT)) {
1452
- handle_invalid_compression(call, compression_algorithm);
1453
- } else if (GPR_UNLIKELY(
1454
- grpc_compression_options_is_algorithm_enabled_internal(
1455
- &compression_options, compression_algorithm) == 0)) {
1456
- /* check if algorithm is supported by current channel config */
1457
- handle_compression_algorithm_disabled(call, compression_algorithm);
1458
- }
1459
- /* GRPC_COMPRESS_NONE is always set. */
1460
- GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer != 0);
1461
- if (GPR_UNLIKELY(!GPR_BITGET(call->encodings_accepted_by_peer,
1462
- compression_algorithm))) {
1463
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1464
- handle_compression_algorithm_not_accepted(call, compression_algorithm);
1465
- }
1224
+
1225
+ const grpc_compression_options compression_options =
1226
+ grpc_channel_compression_options(call->channel);
1227
+ const grpc_compression_algorithm compression_algorithm =
1228
+ call->incoming_compression_algorithm;
1229
+ if (GPR_UNLIKELY(!grpc_core::CompressionAlgorithmSet::FromUint32(
1230
+ compression_options.enabled_algorithms_bitset)
1231
+ .IsSet(compression_algorithm))) {
1232
+ /* check if algorithm is supported by current channel config */
1233
+ handle_compression_algorithm_disabled(call, compression_algorithm);
1234
+ }
1235
+ /* GRPC_COMPRESS_NONE is always set. */
1236
+ GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer.IsSet(GRPC_COMPRESS_NONE));
1237
+ if (GPR_UNLIKELY(
1238
+ !call->encodings_accepted_by_peer.IsSet(compression_algorithm))) {
1239
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1240
+ handle_compression_algorithm_not_accepted(call, compression_algorithm);
1466
1241
  }
1467
1242
  }
1468
1243
  }
@@ -1475,22 +1250,21 @@ static void receiving_initial_metadata_ready(void* bctlp,
1475
1250
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_initial_metadata_ready");
1476
1251
 
1477
1252
  if (error == GRPC_ERROR_NONE) {
1478
- grpc_metadata_batch* md =
1479
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1253
+ grpc_metadata_batch* md = &call->recv_initial_metadata;
1480
1254
  recv_initial_filter(call, md);
1481
1255
 
1482
1256
  /* TODO(ctiller): this could be moved into recv_initial_filter now */
1483
1257
  GPR_TIMER_SCOPE("validate_filtered_metadata", 0);
1484
1258
  validate_filtered_metadata(bctl);
1485
1259
 
1486
- if (md->deadline != GRPC_MILLIS_INF_FUTURE && !call->is_client) {
1487
- call->send_deadline = md->deadline;
1260
+ absl::optional<grpc_millis> deadline =
1261
+ md->get(grpc_core::GrpcTimeoutMetadata());
1262
+ if (deadline.has_value() && !call->is_client) {
1263
+ call->send_deadline = *deadline;
1488
1264
  }
1489
1265
  } else {
1490
- if (reinterpret_cast<grpc_error_handle>(
1491
- gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1492
- gpr_atm_rel_store(&bctl->batch_error,
1493
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1266
+ if (bctl->batch_error.ok()) {
1267
+ bctl->batch_error.set(error);
1494
1268
  }
1495
1269
  cancel_with_error(call, GRPC_ERROR_REF(error));
1496
1270
  }
@@ -1532,8 +1306,7 @@ static void receiving_trailing_metadata_ready(void* bctlp,
1532
1306
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1533
1307
  grpc_call* call = bctl->call;
1534
1308
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_trailing_metadata_ready");
1535
- grpc_metadata_batch* md =
1536
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1309
+ grpc_metadata_batch* md = &call->recv_trailing_metadata;
1537
1310
  recv_trailing_filter(call, md, GRPC_ERROR_REF(error));
1538
1311
  finish_batch_step(bctl);
1539
1312
  }
@@ -1542,10 +1315,8 @@ static void finish_batch(void* bctlp, grpc_error_handle error) {
1542
1315
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1543
1316
  grpc_call* call = bctl->call;
1544
1317
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "on_complete");
1545
- if (reinterpret_cast<grpc_error_handle>(
1546
- gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1547
- gpr_atm_rel_store(&bctl->batch_error,
1548
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1318
+ if (bctl->batch_error.ok()) {
1319
+ bctl->batch_error.set(error);
1549
1320
  }
1550
1321
  if (error != GRPC_ERROR_NONE) {
1551
1322
  cancel_with_error(call, GRPC_ERROR_REF(error));
@@ -1570,6 +1341,14 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1570
1341
  grpc_call_error error = GRPC_CALL_OK;
1571
1342
  grpc_transport_stream_op_batch* stream_op;
1572
1343
  grpc_transport_stream_op_batch_payload* stream_op_payload;
1344
+ uint32_t seen_ops = 0;
1345
+
1346
+ for (i = 0; i < nops; i++) {
1347
+ if (seen_ops & (1u << ops[i].op)) {
1348
+ return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1349
+ }
1350
+ seen_ops |= (1u << ops[i].op);
1351
+ }
1573
1352
 
1574
1353
  GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
1575
1354
 
@@ -1623,10 +1402,6 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1623
1402
  // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
1624
1403
  // with the compression algorithm mapped from compression level.
1625
1404
  /* process compression level */
1626
- grpc_metadata& compression_md = call->compression_md;
1627
- compression_md.key = grpc_empty_slice();
1628
- compression_md.value = grpc_empty_slice();
1629
- size_t additional_metadata_count = 0;
1630
1405
  grpc_compression_level effective_compression_level =
1631
1406
  GRPC_COMPRESS_LEVEL_NONE;
1632
1407
  bool level_set = false;
@@ -1645,17 +1420,15 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1645
1420
  // Currently, only server side supports compression level setting.
1646
1421
  if (level_set && !call->is_client) {
1647
1422
  const grpc_compression_algorithm calgo =
1648
- compression_algorithm_for_level_locked(
1649
- call, effective_compression_level);
1423
+ call->encodings_accepted_by_peer.CompressionAlgorithmForLevel(
1424
+ effective_compression_level);
1650
1425
  // The following metadata will be checked and removed by the message
1651
1426
  // compression filter. It will be used as the call's compression
1652
1427
  // algorithm.
1653
- compression_md.key = GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST;
1654
- compression_md.value = grpc_compression_algorithm_slice(calgo);
1655
- additional_metadata_count++;
1428
+ call->send_initial_metadata.Set(
1429
+ grpc_core::GrpcInternalEncodingRequest(), calgo);
1656
1430
  }
1657
- if (op->data.send_initial_metadata.count + additional_metadata_count >
1658
- INT_MAX) {
1431
+ if (op->data.send_initial_metadata.count > INT_MAX) {
1659
1432
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1660
1433
  goto done_with_error;
1661
1434
  }
@@ -1663,17 +1436,17 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1663
1436
  call->sent_initial_metadata = true;
1664
1437
  if (!prepare_application_metadata(
1665
1438
  call, static_cast<int>(op->data.send_initial_metadata.count),
1666
- op->data.send_initial_metadata.metadata, 0, call->is_client,
1667
- &compression_md, static_cast<int>(additional_metadata_count))) {
1439
+ op->data.send_initial_metadata.metadata, 0)) {
1668
1440
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1669
1441
  goto done_with_error;
1670
1442
  }
1671
1443
  /* TODO(ctiller): just make these the same variable? */
1672
- if (call->is_client) {
1673
- call->metadata_batch[0][0].deadline = call->send_deadline;
1444
+ if (call->is_client && call->send_deadline != GRPC_MILLIS_INF_FUTURE) {
1445
+ call->send_initial_metadata.Set(grpc_core::GrpcTimeoutMetadata(),
1446
+ call->send_deadline);
1674
1447
  }
1675
1448
  stream_op_payload->send_initial_metadata.send_initial_metadata =
1676
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */];
1449
+ &call->send_initial_metadata;
1677
1450
  stream_op_payload->send_initial_metadata.send_initial_metadata_flags =
1678
1451
  op->flags;
1679
1452
  if (call->is_client) {
@@ -1730,7 +1503,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1730
1503
  stream_op->send_trailing_metadata = true;
1731
1504
  call->sent_final_op = true;
1732
1505
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1733
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1506
+ &call->send_trailing_metadata;
1734
1507
  has_send_ops = true;
1735
1508
  break;
1736
1509
  }
@@ -1755,10 +1528,16 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1755
1528
  }
1756
1529
  stream_op->send_trailing_metadata = true;
1757
1530
  call->sent_final_op = true;
1758
- GPR_ASSERT(call->send_extra_metadata_count == 0);
1759
- call->send_extra_metadata_count = 1;
1760
- call->send_extra_metadata[0].md = grpc_get_reffed_status_elem(
1761
- op->data.send_status_from_server.status);
1531
+
1532
+ if (!prepare_application_metadata(
1533
+ call,
1534
+ static_cast<int>(
1535
+ op->data.send_status_from_server.trailing_metadata_count),
1536
+ op->data.send_status_from_server.trailing_metadata, 1)) {
1537
+ error = GRPC_CALL_ERROR_INVALID_METADATA;
1538
+ goto done_with_error;
1539
+ }
1540
+
1762
1541
  grpc_error_handle status_error =
1763
1542
  op->data.send_status_from_server.status == GRPC_STATUS_OK
1764
1543
  ? GRPC_ERROR_NONE
@@ -1769,38 +1548,27 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1769
1548
  static_cast<intptr_t>(
1770
1549
  op->data.send_status_from_server.status));
1771
1550
  if (op->data.send_status_from_server.status_details != nullptr) {
1772
- call->send_extra_metadata[1].md = grpc_mdelem_from_slices(
1773
- GRPC_MDSTR_GRPC_MESSAGE,
1774
- grpc_slice_ref_internal(
1775
- *op->data.send_status_from_server.status_details));
1776
- call->send_extra_metadata_count++;
1551
+ call->send_trailing_metadata.Set(
1552
+ grpc_core::GrpcMessageMetadata(),
1553
+ grpc_core::Slice(grpc_slice_copy(
1554
+ *op->data.send_status_from_server.status_details)));
1777
1555
  if (status_error != GRPC_ERROR_NONE) {
1778
- char* msg = grpc_slice_to_c_string(
1779
- GRPC_MDVALUE(call->send_extra_metadata[1].md));
1780
- status_error =
1781
- grpc_error_set_str(status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1782
- grpc_slice_from_copied_string(msg));
1783
- gpr_free(msg);
1556
+ status_error = grpc_error_set_str(
1557
+ status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1558
+ grpc_core::StringViewFromSlice(
1559
+ *op->data.send_status_from_server.status_details));
1784
1560
  }
1785
1561
  }
1786
1562
 
1787
- gpr_atm_rel_store(&call->status_error,
1788
- reinterpret_cast<gpr_atm>(status_error));
1789
- if (!prepare_application_metadata(
1790
- call,
1791
- static_cast<int>(
1792
- op->data.send_status_from_server.trailing_metadata_count),
1793
- op->data.send_status_from_server.trailing_metadata, 1, 1,
1794
- nullptr, 0)) {
1795
- for (int n = 0; n < call->send_extra_metadata_count; n++) {
1796
- GRPC_MDELEM_UNREF(call->send_extra_metadata[n].md);
1797
- }
1798
- call->send_extra_metadata_count = 0;
1799
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1800
- goto done_with_error;
1801
- }
1563
+ call->status_error.set(status_error);
1564
+ GRPC_ERROR_UNREF(status_error);
1565
+
1566
+ call->send_trailing_metadata.Set(
1567
+ grpc_core::GrpcStatusMetadata(),
1568
+ op->data.send_status_from_server.status);
1569
+
1802
1570
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1803
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1571
+ &call->send_trailing_metadata;
1804
1572
  stream_op_payload->send_trailing_metadata.sent =
1805
1573
  &call->sent_server_trailing_metadata;
1806
1574
  has_send_ops = true;
@@ -1824,7 +1592,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1824
1592
  grpc_schedule_on_exec_ctx);
1825
1593
  stream_op->recv_initial_metadata = true;
1826
1594
  stream_op_payload->recv_initial_metadata.recv_initial_metadata =
1827
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1595
+ &call->recv_initial_metadata;
1828
1596
  stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
1829
1597
  &call->receiving_initial_metadata_ready;
1830
1598
  if (call->is_client) {
@@ -1885,7 +1653,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1885
1653
  op->data.recv_status_on_client.error_string;
1886
1654
  stream_op->recv_trailing_metadata = true;
1887
1655
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1888
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1656
+ &call->recv_trailing_metadata;
1889
1657
  stream_op_payload->recv_trailing_metadata.collect_stats =
1890
1658
  &call->final_info.stats.transport_stream_stats;
1891
1659
  GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
@@ -1915,7 +1683,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1915
1683
  op->data.recv_close_on_server.cancelled;
1916
1684
  stream_op->recv_trailing_metadata = true;
1917
1685
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1918
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1686
+ &call->recv_trailing_metadata;
1919
1687
  stream_op_payload->recv_trailing_metadata.collect_stats =
1920
1688
  &call->final_info.stats.transport_stream_stats;
1921
1689
  GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
@@ -1951,15 +1719,18 @@ done_with_error:
1951
1719
  /* reverse any mutations that occurred */
1952
1720
  if (stream_op->send_initial_metadata) {
1953
1721
  call->sent_initial_metadata = false;
1954
- grpc_metadata_batch_clear(&call->metadata_batch[0][0]);
1722
+ call->send_initial_metadata.Clear();
1955
1723
  }
1956
1724
  if (stream_op->send_message) {
1957
1725
  call->sending_message = false;
1958
- call->sending_stream->Orphan();
1726
+ // No need to invoke call->sending_stream->Orphan() explicitly.
1727
+ // stream_op_payload->send_message.send_message.reset() calls Deletor
1728
+ // of call->sending_stream which in-turn invokes the Orphan() method.
1729
+ stream_op_payload->send_message.send_message.reset();
1959
1730
  }
1960
1731
  if (stream_op->send_trailing_metadata) {
1961
1732
  call->sent_final_op = false;
1962
- grpc_metadata_batch_clear(&call->metadata_batch[0][1]);
1733
+ call->send_trailing_metadata.Clear();
1963
1734
  }
1964
1735
  if (stream_op->recv_initial_metadata) {
1965
1736
  call->received_initial_metadata = false;
@@ -2017,20 +1788,16 @@ uint8_t grpc_call_is_client(grpc_call* call) { return call->is_client; }
2017
1788
 
2018
1789
  grpc_compression_algorithm grpc_call_compression_for_level(
2019
1790
  grpc_call* call, grpc_compression_level level) {
2020
- grpc_compression_algorithm algo =
2021
- compression_algorithm_for_level_locked(call, level);
2022
- return algo;
1791
+ return call->encodings_accepted_by_peer.CompressionAlgorithmForLevel(level);
2023
1792
  }
2024
1793
 
2025
1794
  bool grpc_call_is_trailers_only(const grpc_call* call) {
2026
1795
  bool result = call->is_trailers_only;
2027
- GPR_DEBUG_ASSERT(
2028
- !result || call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */]
2029
- .list.count == 0);
1796
+ GPR_DEBUG_ASSERT(!result || call->recv_initial_metadata.empty());
2030
1797
  return result;
2031
1798
  }
2032
1799
 
2033
- bool grpc_call_failed_before_recv_message(const grpc_call* c) {
1800
+ int grpc_call_failed_before_recv_message(const grpc_call* c) {
2034
1801
  return c->call_failed_before_recv_message;
2035
1802
  }
2036
1803