grpc 1.41.1 → 1.42.0.pre1

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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +55 -43
  3. data/include/grpc/event_engine/event_engine.h +82 -42
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  5. data/include/grpc/event_engine/memory_allocator.h +210 -0
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/grpc_security.h +18 -0
  8. data/include/grpc/grpc_security_constants.h +1 -0
  9. data/include/grpc/impl/codegen/port_platform.h +7 -0
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  11. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  12. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  13. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  14. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  18. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  20. data/src/core/ext/filters/client_channel/connector.h +18 -18
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  42. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  44. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  49. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  52. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  59. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  60. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  62. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  63. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  66. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  67. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  68. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  74. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  76. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  77. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  79. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  81. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  82. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  84. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  85. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  87. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  88. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  89. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  90. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  91. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  92. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  93. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  94. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  98. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  99. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  107. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  109. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  110. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  112. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  121. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  123. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  125. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  127. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  128. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  130. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  131. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  138. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  139. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  140. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  142. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  146. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  147. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  148. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  153. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  155. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  161. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  163. data/src/core/ext/xds/xds_api.cc +325 -362
  164. data/src/core/ext/xds/xds_api.h +134 -82
  165. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  166. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  167. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  168. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  169. data/src/core/ext/xds/xds_client.cc +527 -314
  170. data/src/core/ext/xds/xds_client.h +42 -37
  171. data/src/core/ext/xds/xds_client_stats.h +1 -1
  172. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  173. data/src/core/lib/address_utils/parse_address.cc +2 -0
  174. data/src/core/lib/avl/avl.cc +5 -5
  175. data/src/core/lib/backoff/backoff.cc +1 -1
  176. data/src/core/lib/channel/channel_args.cc +24 -6
  177. data/src/core/lib/channel/channel_args.h +9 -0
  178. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  179. data/src/core/lib/channel/channel_trace.cc +1 -1
  180. data/src/core/lib/channel/channel_trace.h +1 -1
  181. data/src/core/lib/channel/channelz.cc +3 -3
  182. data/src/core/lib/channel/channelz.h +2 -2
  183. data/src/core/lib/channel/channelz_registry.cc +1 -1
  184. data/src/core/lib/channel/channelz_registry.h +1 -1
  185. data/src/core/lib/channel/connected_channel.cc +1 -3
  186. data/src/core/lib/channel/connected_channel.h +1 -2
  187. data/src/core/lib/compression/compression.cc +2 -2
  188. data/src/core/lib/compression/compression_args.cc +6 -4
  189. data/src/core/lib/compression/compression_internal.cc +2 -2
  190. data/src/core/lib/compression/compression_internal.h +1 -1
  191. data/src/core/lib/config/core_configuration.cc +44 -2
  192. data/src/core/lib/config/core_configuration.h +39 -1
  193. data/src/core/lib/debug/stats.cc +1 -1
  194. data/src/core/lib/debug/stats_data.cc +13 -13
  195. data/src/core/lib/gpr/atm.cc +1 -1
  196. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  197. data/src/core/lib/gpr/string.cc +2 -2
  198. data/src/core/lib/gpr/tls.h +1 -1
  199. data/src/core/lib/gpr/useful.h +79 -32
  200. data/src/core/lib/gprpp/arena.h +10 -0
  201. data/src/core/lib/gprpp/bitset.h +38 -16
  202. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  203. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  204. data/src/core/lib/gprpp/match.h +1 -1
  205. data/src/core/lib/gprpp/memory.h +6 -0
  206. data/src/core/lib/gprpp/overload.h +1 -1
  207. data/src/core/lib/gprpp/status_helper.cc +23 -3
  208. data/src/core/lib/gprpp/status_helper.h +12 -1
  209. data/src/core/lib/gprpp/table.h +411 -0
  210. data/src/core/lib/http/httpcli.cc +200 -182
  211. data/src/core/lib/http/parser.cc +2 -2
  212. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  213. data/src/core/lib/iomgr/combiner.cc +6 -21
  214. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  215. data/src/core/lib/iomgr/error.cc +113 -52
  216. data/src/core/lib/iomgr/error.h +50 -9
  217. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  218. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  219. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  220. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  221. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  222. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  223. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  224. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  225. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  226. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  227. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  228. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  229. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  230. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  231. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  232. data/src/core/lib/iomgr/executor.cc +6 -20
  233. data/src/core/lib/iomgr/iomgr.cc +3 -1
  234. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  235. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  236. data/src/core/lib/iomgr/load_file.cc +2 -2
  237. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  238. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  239. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  240. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  241. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  242. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  243. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  244. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  246. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  247. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  250. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  252. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  253. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  254. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  255. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  256. data/src/core/lib/json/json_util.cc +68 -0
  257. data/src/core/lib/json/json_util.h +57 -99
  258. data/src/core/lib/json/json_writer.cc +0 -3
  259. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  260. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  261. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  262. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  263. data/src/core/lib/security/context/security_context.cc +4 -2
  264. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  265. data/src/core/lib/security/credentials/credentials.cc +4 -2
  266. data/src/core/lib/security/credentials/credentials.h +6 -1
  267. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  268. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  269. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  270. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  272. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  273. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  274. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  275. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  276. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  278. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  279. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  280. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  281. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  282. data/src/core/lib/slice/slice.cc +0 -16
  283. data/src/core/lib/slice/slice_api.cc +39 -0
  284. data/src/core/lib/slice/slice_buffer.cc +5 -5
  285. data/src/core/lib/slice/slice_intern.cc +8 -13
  286. data/src/core/lib/slice/slice_internal.h +1 -244
  287. data/src/core/lib/slice/slice_refcount.cc +17 -0
  288. data/src/core/lib/slice/slice_refcount.h +121 -0
  289. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  290. data/src/core/lib/slice/slice_split.cc +100 -0
  291. data/src/core/lib/slice/slice_split.h +40 -0
  292. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  293. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  294. data/src/core/lib/slice/static_slice.cc +529 -0
  295. data/src/core/lib/slice/static_slice.h +331 -0
  296. data/src/core/lib/surface/builtins.cc +49 -0
  297. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  298. data/src/core/lib/surface/call.cc +103 -120
  299. data/src/core/lib/surface/call.h +0 -6
  300. data/src/core/lib/surface/channel.cc +19 -32
  301. data/src/core/lib/surface/channel.h +0 -9
  302. data/src/core/lib/surface/channel_init.cc +23 -76
  303. data/src/core/lib/surface/channel_init.h +52 -44
  304. data/src/core/lib/surface/completion_queue.cc +6 -5
  305. data/src/core/lib/surface/init.cc +0 -39
  306. data/src/core/lib/surface/init_secure.cc +17 -14
  307. data/src/core/lib/surface/lame_client.cc +18 -11
  308. data/src/core/lib/surface/lame_client.h +1 -1
  309. data/src/core/lib/surface/server.cc +25 -17
  310. data/src/core/lib/surface/server.h +17 -10
  311. data/src/core/lib/surface/validate_metadata.cc +5 -2
  312. data/src/core/lib/surface/version.cc +2 -2
  313. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  314. data/src/core/lib/transport/error_utils.cc +42 -17
  315. data/src/core/lib/transport/error_utils.h +1 -1
  316. data/src/core/lib/transport/metadata.cc +31 -10
  317. data/src/core/lib/transport/metadata.h +2 -1
  318. data/src/core/lib/transport/metadata_batch.cc +35 -371
  319. data/src/core/lib/transport/metadata_batch.h +905 -71
  320. data/src/core/lib/transport/parsed_metadata.h +263 -0
  321. data/src/core/lib/transport/pid_controller.cc +4 -4
  322. data/src/core/lib/transport/static_metadata.cc +714 -846
  323. data/src/core/lib/transport/static_metadata.h +115 -379
  324. data/src/core/lib/transport/status_metadata.cc +1 -0
  325. data/src/core/lib/transport/transport.cc +4 -5
  326. data/src/core/lib/transport/transport_op_string.cc +40 -20
  327. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  328. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  329. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  330. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  331. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  335. data/src/core/tsi/fake_transport_security.cc +15 -7
  336. data/src/core/tsi/local_transport_security.cc +36 -73
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  339. data/src/core/tsi/ssl_transport_security.cc +10 -2
  340. data/src/core/tsi/transport_security.cc +12 -0
  341. data/src/core/tsi/transport_security.h +16 -1
  342. data/src/core/tsi/transport_security_interface.h +26 -0
  343. data/src/ruby/ext/grpc/extconf.rb +12 -9
  344. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  346. data/src/ruby/lib/grpc/version.rb +1 -1
  347. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  348. data/src/ruby/spec/client_server_spec.rb +1 -1
  349. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  351. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  352. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  353. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
  355. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  356. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  368. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
  370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  371. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
  372. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
  373. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  375. data/third_party/re2/re2/compile.cc +91 -109
  376. data/third_party/re2/re2/dfa.cc +27 -39
  377. data/third_party/re2/re2/filtered_re2.cc +18 -2
  378. data/third_party/re2/re2/filtered_re2.h +10 -5
  379. data/third_party/re2/re2/nfa.cc +1 -1
  380. data/third_party/re2/re2/parse.cc +42 -23
  381. data/third_party/re2/re2/perl_groups.cc +34 -34
  382. data/third_party/re2/re2/prefilter.cc +3 -2
  383. data/third_party/re2/re2/prog.cc +182 -4
  384. data/third_party/re2/re2/prog.h +28 -9
  385. data/third_party/re2/re2/re2.cc +87 -118
  386. data/third_party/re2/re2/re2.h +156 -141
  387. data/third_party/re2/re2/regexp.cc +12 -5
  388. data/third_party/re2/re2/regexp.h +8 -2
  389. data/third_party/re2/re2/set.cc +31 -9
  390. data/third_party/re2/re2/set.h +9 -4
  391. data/third_party/re2/re2/simplify.cc +11 -3
  392. data/third_party/re2/re2/tostring.cc +1 -1
  393. data/third_party/re2/re2/walker-inl.h +1 -1
  394. data/third_party/re2/util/mutex.h +2 -2
  395. data/third_party/re2/util/pcre.h +3 -3
  396. metadata +78 -66
  397. data/include/grpc/event_engine/slice_allocator.h +0 -71
  398. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  399. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  400. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  401. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  402. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  403. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  404. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  405. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  406. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  407. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  408. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  409. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  410. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  411. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  412. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  413. data/src/core/lib/iomgr/udp_server.cc +0 -747
  414. data/src/core/lib/iomgr/udp_server.h +0 -103
  415. data/src/core/lib/transport/authority_override.cc +0 -40
  416. data/src/core/lib/transport/authority_override.h +0 -37
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -26,7 +24,6 @@
26
24
 
27
25
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
26
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
29
- #include "src/core/ext/transport/chttp2/client/authority.h"
30
27
  #include "src/core/ext/transport/chttp2/client/chttp2_connector.h"
31
28
  #include "src/core/lib/channel/channel_args.h"
32
29
  #include "src/core/lib/surface/api_trace.h"
@@ -37,13 +34,9 @@ namespace grpc_core {
37
34
  class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
38
35
  public:
39
36
  RefCountedPtr<Subchannel> CreateSubchannel(
37
+ const grpc_resolved_address& address,
40
38
  const grpc_channel_args* args) override {
41
- grpc_channel_args* new_args =
42
- grpc_default_authority_add_if_not_present(args);
43
- RefCountedPtr<Subchannel> s =
44
- Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
45
- grpc_channel_args_destroy(new_args);
46
- return s;
39
+ return Subchannel::Create(MakeOrphanable<Chttp2Connector>(), address, args);
47
40
  }
48
41
  };
49
42
 
@@ -95,6 +88,7 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
95
88
  const grpc_channel_args* args,
96
89
  void* reserved) {
97
90
  grpc_core::ExecCtx exec_ctx;
91
+ args = grpc_channel_args_remove_grpc_internal(args);
98
92
  GRPC_API_TRACE(
99
93
  "grpc_insecure_channel_create(target=%s, args=%p, reserved=%p)", 3,
100
94
  (target, args, reserved));
@@ -110,6 +104,7 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
110
104
  grpc_channel* channel = grpc_core::CreateChannel(target, new_args, &error);
111
105
  // Clean up.
112
106
  grpc_channel_args_destroy(new_args);
107
+ grpc_channel_args_destroy(args);
113
108
  if (channel == nullptr) {
114
109
  intptr_t integer;
115
110
  grpc_status_code status = GRPC_STATUS_INTERNAL;
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -35,7 +33,6 @@
35
33
  #include "src/core/lib/slice/slice_internal.h"
36
34
  #include "src/core/lib/surface/api_trace.h"
37
35
  #include "src/core/lib/surface/channel.h"
38
- #include "src/core/lib/transport/authority_override.h"
39
36
  #include "src/core/lib/uri/uri_parser.h"
40
37
 
41
38
  namespace grpc_core {
@@ -43,6 +40,7 @@ namespace grpc_core {
43
40
  class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
44
41
  public:
45
42
  RefCountedPtr<Subchannel> CreateSubchannel(
43
+ const grpc_resolved_address& address,
46
44
  const grpc_channel_args* args) override {
47
45
  grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
48
46
  if (new_args == nullptr) {
@@ -50,8 +48,8 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
50
48
  "Failed to create channel args during subchannel creation.");
51
49
  return nullptr;
52
50
  }
53
- RefCountedPtr<Subchannel> s =
54
- Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
51
+ RefCountedPtr<Subchannel> s = Subchannel::Create(
52
+ MakeOrphanable<Chttp2Connector>(), address, new_args);
55
53
  grpc_channel_args_destroy(new_args);
56
54
  return s;
57
55
  }
@@ -75,52 +73,29 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
75
73
  return nullptr;
76
74
  }
77
75
  // Find the authority to use in the security connector.
78
- // First, check the authority override channel arg.
79
- // Otherwise, get it from the server name used to construct the
80
- // channel.
81
- std::string authority(FindAuthorityOverrideInArgs(args));
82
- if (authority.empty()) {
83
- const char* server_uri_str =
84
- grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
85
- GPR_ASSERT(server_uri_str != nullptr);
86
- authority = ResolverRegistry::GetDefaultAuthority(server_uri_str);
87
- }
88
- grpc_arg args_to_add[2];
89
- size_t num_args_to_add = 0;
90
- if (grpc_channel_args_find(args, GRPC_ARG_DEFAULT_AUTHORITY) == nullptr) {
91
- // If the channel args don't already contain GRPC_ARG_DEFAULT_AUTHORITY,
92
- // add the arg, setting it to the value just obtained.
93
- args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
94
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
95
- const_cast<char*>(authority.c_str()));
96
- }
97
- grpc_channel_args* args_with_authority =
98
- grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
76
+ const char* authority =
77
+ grpc_channel_args_find_string(args, GRPC_ARG_DEFAULT_AUTHORITY);
78
+ GPR_ASSERT(authority != nullptr);
99
79
  // Create the security connector using the credentials and target name.
100
80
  grpc_channel_args* new_args_from_connector = nullptr;
101
81
  RefCountedPtr<grpc_channel_security_connector>
102
82
  subchannel_security_connector =
103
83
  channel_credentials->create_security_connector(
104
- /*call_creds=*/nullptr, authority.c_str(), args_with_authority,
84
+ /*call_creds=*/nullptr, authority, args,
105
85
  &new_args_from_connector);
106
86
  if (subchannel_security_connector == nullptr) {
107
87
  gpr_log(GPR_ERROR,
108
88
  "Failed to create secure subchannel for secure name '%s'",
109
- authority.c_str());
110
- grpc_channel_args_destroy(args_with_authority);
89
+ authority);
111
90
  return nullptr;
112
91
  }
113
92
  grpc_arg new_security_connector_arg =
114
93
  grpc_security_connector_to_arg(subchannel_security_connector.get());
115
94
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
116
- new_args_from_connector != nullptr ? new_args_from_connector
117
- : args_with_authority,
95
+ new_args_from_connector != nullptr ? new_args_from_connector : args,
118
96
  &new_security_connector_arg, 1);
119
97
  subchannel_security_connector.reset(DEBUG_LOCATION, "lb_channel_create");
120
- if (new_args_from_connector != nullptr) {
121
- grpc_channel_args_destroy(new_args_from_connector);
122
- }
123
- grpc_channel_args_destroy(args_with_authority);
98
+ grpc_channel_args_destroy(new_args_from_connector);
124
99
  return new_args;
125
100
  }
126
101
  };
@@ -179,6 +154,7 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
179
154
  "reserved=%p)",
180
155
  4, ((void*)creds, target, (void*)args, (void*)reserved));
181
156
  GPR_ASSERT(reserved == nullptr);
157
+ args = grpc_channel_args_remove_grpc_internal(args);
182
158
  grpc_channel* channel = nullptr;
183
159
  grpc_error_handle error = GRPC_ERROR_NONE;
184
160
  if (creds != nullptr) {
@@ -198,6 +174,7 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
198
174
  // Clean up.
199
175
  grpc_channel_args_destroy(new_args);
200
176
  }
177
+ grpc_channel_args_destroy(args);
201
178
  if (channel == nullptr) {
202
179
  intptr_t integer;
203
180
  grpc_status_code status = GRPC_STATUS_INTERNAL;
@@ -221,10 +221,10 @@ class Chttp2ServerListener : public Server::ListenerInterface {
221
221
  grpc_resolved_address resolved_address_;
222
222
  Chttp2ServerArgsModifier const args_modifier_;
223
223
  ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
224
- Mutex channel_args_mu_;
225
- grpc_channel_args* args_ ABSL_GUARDED_BY(channel_args_mu_);
224
+ grpc_channel_args* args_;
225
+ Mutex connection_manager_mu_;
226
226
  RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
227
- connection_manager_ ABSL_GUARDED_BY(channel_args_mu_);
227
+ connection_manager_ ABSL_GUARDED_BY(connection_manager_mu_);
228
228
  Mutex mu_;
229
229
  // Signals whether grpc_tcp_server_start() has been called.
230
230
  bool started_ ABSL_GUARDED_BY(mu_) = false;
@@ -252,7 +252,7 @@ void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
252
252
  RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
253
253
  connection_manager_to_destroy;
254
254
  {
255
- MutexLock lock(&listener_->channel_args_mu_);
255
+ MutexLock lock(&listener_->connection_manager_mu_);
256
256
  connection_manager_to_destroy = listener_->connection_manager_;
257
257
  listener_->connection_manager_ = std::move(connection_manager);
258
258
  }
@@ -596,6 +596,7 @@ grpc_error_handle Chttp2ServerListener::Create(
596
596
  // The bulk of this method is inside of a lambda to make cleanup
597
597
  // easier without using goto.
598
598
  grpc_error_handle error = [&]() {
599
+ grpc_error_handle error = GRPC_ERROR_NONE;
599
600
  // Create Chttp2ServerListener.
600
601
  listener = new Chttp2ServerListener(
601
602
  server, args, args_modifier,
@@ -692,16 +693,10 @@ Chttp2ServerListener::~Chttp2ServerListener() {
692
693
  void Chttp2ServerListener::Start(
693
694
  Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
694
695
  if (server_->config_fetcher() != nullptr) {
695
- grpc_channel_args* args = nullptr;
696
696
  auto watcher = absl::make_unique<ConfigFetcherWatcher>(Ref());
697
697
  config_fetcher_watcher_ = watcher.get();
698
- {
699
- MutexLock lock(&channel_args_mu_);
700
- args = grpc_channel_args_copy(args_);
701
- }
702
698
  server_->config_fetcher()->StartWatch(
703
- grpc_sockaddr_to_string(&resolved_address_, false), args,
704
- std::move(watcher));
699
+ grpc_sockaddr_to_string(&resolved_address_, false), std::move(watcher));
705
700
  } else {
706
701
  {
707
702
  MutexLock lock(&mu_);
@@ -725,12 +720,12 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
725
720
  grpc_pollset* accepting_pollset,
726
721
  grpc_tcp_server_acceptor* acceptor) {
727
722
  Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
728
- grpc_channel_args* args = nullptr;
723
+ grpc_channel_args* args = self->args_;
724
+ grpc_channel_args* args_to_destroy = nullptr;
729
725
  RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
730
726
  connection_manager;
731
727
  {
732
- MutexLock lock(&self->channel_args_mu_);
733
- args = grpc_channel_args_copy(self->args_);
728
+ MutexLock lock(&self->connection_manager_mu_);
734
729
  connection_manager = self->connection_manager_;
735
730
  }
736
731
  auto endpoint_cleanup = [&](grpc_error_handle error) {
@@ -743,11 +738,12 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
743
738
  grpc_error_handle error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
744
739
  "No ConnectionManager configured. Closing connection.");
745
740
  endpoint_cleanup(error);
746
- grpc_channel_args_destroy(args);
747
741
  return;
748
742
  }
749
743
  // TODO(yashykt): Maybe combine the following two arg modifiers into a
750
744
  // single one.
745
+ // Make a copy of the args so as to avoid destroying the original.
746
+ args = grpc_channel_args_copy(args);
751
747
  absl::StatusOr<grpc_channel_args*> args_result =
752
748
  connection_manager->UpdateChannelArgsForConnection(args, tcp);
753
749
  if (!args_result.ok()) {
@@ -766,6 +762,7 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
766
762
  grpc_channel_args_destroy(args);
767
763
  return;
768
764
  }
765
+ args_to_destroy = args;
769
766
  }
770
767
  grpc_resource_user* channel_resource_user = grpc_resource_user_create(
771
768
  self->resource_quota_,
@@ -803,7 +800,7 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
803
800
  } else {
804
801
  connection_ref->Start(std::move(listener_ref), tcp, args);
805
802
  }
806
- grpc_channel_args_destroy(args);
803
+ grpc_channel_args_destroy(args_to_destroy);
807
804
  }
808
805
 
809
806
  void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
@@ -861,6 +858,7 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
861
858
  std::vector<grpc_error_handle> error_list;
862
859
  // Using lambda to avoid use of goto.
863
860
  grpc_error_handle error = [&]() {
861
+ grpc_error_handle error = GRPC_ERROR_NONE;
864
862
  if (absl::StartsWith(addr, kUnixUriPrefix)) {
865
863
  error = grpc_resolve_unix_domain_address(
866
864
  addr + sizeof(kUnixUriPrefix) - 1, &resolved);
@@ -646,8 +646,8 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
646
646
  : t(t),
647
647
  refcount(refcount),
648
648
  reffer(this),
649
- metadata_buffer{grpc_chttp2_incoming_metadata_buffer(arena),
650
- grpc_chttp2_incoming_metadata_buffer(arena)} {
649
+ initial_metadata_buffer(arena),
650
+ trailing_metadata_buffer(arena) {
651
651
  if (server_data) {
652
652
  id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
653
653
  *t->accepting_stream = this;
@@ -1064,7 +1064,7 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1064
1064
  grpc_chttp2_setting_id id, uint32_t value) {
1065
1065
  const grpc_chttp2_setting_parameters* sp =
1066
1066
  &grpc_chttp2_settings_parameters[id];
1067
- uint32_t use_value = GPR_CLAMP(value, sp->min_value, sp->max_value);
1067
+ uint32_t use_value = grpc_core::Clamp(value, sp->min_value, sp->max_value);
1068
1068
  if (use_value != value) {
1069
1069
  gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
1070
1070
  value, use_value);
@@ -1078,7 +1078,7 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1078
1078
  void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1079
1079
  uint32_t goaway_error,
1080
1080
  uint32_t last_stream_id,
1081
- const grpc_slice& goaway_text) {
1081
+ absl::string_view goaway_text) {
1082
1082
  // Discard the error from a previous goaway frame (if any)
1083
1083
  if (t->goaway_error != GRPC_ERROR_NONE) {
1084
1084
  GRPC_ERROR_UNREF(t->goaway_error);
@@ -1107,7 +1107,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1107
1107
  // for new connections on that channel.
1108
1108
  if (GPR_UNLIKELY(t->is_client &&
1109
1109
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1110
- grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
1110
+ goaway_text == "too_many_pings")) {
1111
1111
  gpr_log(GPR_ERROR,
1112
1112
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1113
1113
  "data equal to \"too_many_pings\"");
@@ -1230,9 +1230,9 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1230
1230
  if (closure->error_data.error == GRPC_ERROR_NONE) {
1231
1231
  closure->error_data.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1232
1232
  "Error in HTTP transport completing operation");
1233
- closure->error_data.error = grpc_error_set_str(
1234
- closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
1235
- grpc_slice_from_copied_string(t->peer_string.c_str()));
1233
+ closure->error_data.error =
1234
+ grpc_error_set_str(closure->error_data.error,
1235
+ GRPC_ERROR_STR_TARGET_ADDRESS, t->peer_string);
1236
1236
  }
1237
1237
  closure->error_data.error =
1238
1238
  grpc_error_add_child(closure->error_data.error, error);
@@ -1252,9 +1252,10 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1252
1252
  }
1253
1253
 
1254
1254
  static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1255
- if (batch->idx.named.grpc_status != nullptr) {
1256
- return !grpc_mdelem_static_value_eq(batch->idx.named.grpc_status->md,
1257
- GRPC_MDELEM_GRPC_STATUS_0);
1255
+ if (batch->legacy_index()->named.grpc_status != nullptr) {
1256
+ return !grpc_mdelem_static_value_eq(
1257
+ batch->legacy_index()->named.grpc_status->md,
1258
+ GRPC_MDELEM_GRPC_STATUS_0);
1258
1259
  }
1259
1260
  return false;
1260
1261
  }
@@ -1349,15 +1350,14 @@ static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1349
1350
 
1350
1351
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1351
1352
  bool is_client, bool is_initial) {
1352
- for (grpc_linked_mdelem* md = md_batch->list.head; md != nullptr;
1353
- md = md->next) {
1354
- char* key = grpc_slice_to_c_string(GRPC_MDKEY(md->md));
1355
- char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md->md));
1353
+ md_batch->ForEach([=](grpc_mdelem md) {
1354
+ char* key = grpc_slice_to_c_string(GRPC_MDKEY(md));
1355
+ char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md));
1356
1356
  gpr_log(GPR_INFO, "HTTP:%d:%s:%s: %s: %s", id, is_initial ? "HDR" : "TRL",
1357
1357
  is_client ? "CLI" : "SVR", key, value);
1358
1358
  gpr_free(key);
1359
1359
  gpr_free(value);
1360
- }
1360
+ });
1361
1361
  }
1362
1362
 
1363
1363
  static void perform_stream_op_locked(void* stream_op,
@@ -1411,12 +1411,13 @@ static void perform_stream_op_locked(void* stream_op,
1411
1411
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1412
1412
 
1413
1413
  // Identify stream compression
1414
- if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
1415
- .content_encoding == nullptr ||
1414
+ if (op_payload->send_initial_metadata.send_initial_metadata->legacy_index()
1415
+ ->named.content_encoding == nullptr ||
1416
1416
  grpc_stream_compression_method_parse(
1417
1417
  GRPC_MDVALUE(
1418
- op_payload->send_initial_metadata.send_initial_metadata->idx
1419
- .named.content_encoding->md),
1418
+ op_payload->send_initial_metadata.send_initial_metadata
1419
+ ->legacy_index()
1420
+ ->named.content_encoding->md),
1420
1421
  true, &s->stream_compression_method) == 0) {
1421
1422
  s->stream_compression_method = GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS;
1422
1423
  }
@@ -1430,7 +1431,10 @@ static void perform_stream_op_locked(void* stream_op,
1430
1431
  s->send_initial_metadata =
1431
1432
  op_payload->send_initial_metadata.send_initial_metadata;
1432
1433
  if (t->is_client) {
1433
- s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
1434
+ s->deadline = std::min(
1435
+ s->deadline,
1436
+ s->send_initial_metadata->get(grpc_core::GrpcTimeoutMetadata())
1437
+ .value_or(GRPC_MILLIS_INF_FUTURE));
1434
1438
  }
1435
1439
  if (contains_non_ok_status(s->send_initial_metadata)) {
1436
1440
  s->seen_error = true;
@@ -1536,8 +1540,7 @@ static void perform_stream_op_locked(void* stream_op,
1536
1540
  s->sent_trailing_metadata_op = nullptr;
1537
1541
  grpc_chttp2_complete_closure_step(
1538
1542
  t, s, &s->send_trailing_metadata_finished,
1539
- grpc_metadata_batch_is_empty(
1540
- op->payload->send_trailing_metadata.send_trailing_metadata)
1543
+ op->payload->send_trailing_metadata.send_trailing_metadata->empty()
1541
1544
  ? GRPC_ERROR_NONE
1542
1545
  : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1543
1546
  "Attempt to send trailing metadata after "
@@ -1623,14 +1626,14 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1623
1626
 
1624
1627
  if (!t->is_client) {
1625
1628
  if (op->send_initial_metadata) {
1626
- grpc_millis deadline =
1627
- op->payload->send_initial_metadata.send_initial_metadata->deadline;
1628
- GPR_ASSERT(deadline == GRPC_MILLIS_INF_FUTURE);
1629
+ GPR_ASSERT(!op->payload->send_initial_metadata.send_initial_metadata
1630
+ ->get(grpc_core::GrpcTimeoutMetadata())
1631
+ .has_value());
1629
1632
  }
1630
1633
  if (op->send_trailing_metadata) {
1631
- grpc_millis deadline =
1632
- op->payload->send_trailing_metadata.send_trailing_metadata->deadline;
1633
- GPR_ASSERT(deadline == GRPC_MILLIS_INF_FUTURE);
1634
+ GPR_ASSERT(!op->payload->send_trailing_metadata.send_trailing_metadata
1635
+ ->get(grpc_core::GrpcTimeoutMetadata())
1636
+ .has_value());
1634
1637
  }
1635
1638
  }
1636
1639
 
@@ -1749,12 +1752,12 @@ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1749
1752
  grpc_error_std_string(error).c_str());
1750
1753
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1751
1754
  grpc_http2_error_code http_error;
1752
- grpc_slice slice;
1753
- grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, nullptr, &slice,
1755
+ std::string message;
1756
+ grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, nullptr, &message,
1754
1757
  &http_error, nullptr);
1755
- grpc_chttp2_goaway_append(t->last_new_stream_id,
1756
- static_cast<uint32_t>(http_error),
1757
- grpc_slice_ref_internal(slice), &t->qbuf);
1758
+ grpc_chttp2_goaway_append(
1759
+ t->last_new_stream_id, static_cast<uint32_t>(http_error),
1760
+ grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
1758
1761
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1759
1762
  GRPC_ERROR_UNREF(error);
1760
1763
  }
@@ -1856,8 +1859,7 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(
1856
1859
  &s->unprocessed_incoming_frames_buffer);
1857
1860
  }
1858
1861
  }
1859
- grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[0],
1860
- s->recv_initial_metadata);
1862
+ *s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
1861
1863
  null_then_sched_closure(&s->recv_initial_metadata_ready);
1862
1864
  }
1863
1865
  }
@@ -1973,7 +1975,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1973
1975
  GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1974
1976
  grpc_slice_buffer_move_first(
1975
1977
  &s->frame_storage,
1976
- GPR_MIN(s->frame_storage.length, GRPC_HEADER_SIZE_IN_BYTES),
1978
+ std::min(s->frame_storage.length,
1979
+ size_t(GRPC_HEADER_SIZE_IN_BYTES)),
1977
1980
  &s->unprocessed_incoming_frames_buffer);
1978
1981
  if (s->unprocessed_incoming_frames_buffer.length > 0) {
1979
1982
  s->unprocessed_incoming_frames_decompressed = true;
@@ -2010,8 +2013,7 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2010
2013
  s->recv_trailing_metadata_finished != nullptr) {
2011
2014
  grpc_transport_move_stats(&s->stats, s->collecting_stats);
2012
2015
  s->collecting_stats = nullptr;
2013
- grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[1],
2014
- s->recv_trailing_metadata);
2016
+ *s->recv_trailing_metadata = std::move(s->trailing_metadata_buffer);
2015
2017
  null_then_sched_closure(&s->recv_trailing_metadata_finished);
2016
2018
  }
2017
2019
  }
@@ -2087,8 +2089,9 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2087
2089
  void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2088
2090
  grpc_error_handle error) {
2089
2091
  grpc_status_code status;
2090
- grpc_slice slice;
2091
- grpc_error_get_status(error, s->deadline, &status, &slice, nullptr, nullptr);
2092
+ std::string message;
2093
+ grpc_error_get_status(error, s->deadline, &status, &message, nullptr,
2094
+ nullptr);
2092
2095
  if (status != GRPC_STATUS_OK) {
2093
2096
  s->seen_error = true;
2094
2097
  }
@@ -2103,17 +2106,14 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2103
2106
  char status_string[GPR_LTOA_MIN_BUFSIZE];
2104
2107
  gpr_ltoa(status, status_string);
2105
2108
  GRPC_LOG_IF_ERROR("add_status",
2106
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
2107
- &s->metadata_buffer[1],
2108
- grpc_mdelem_from_slices(
2109
- GRPC_MDSTR_GRPC_STATUS,
2110
- grpc_core::UnmanagedMemorySlice(status_string))));
2111
- if (!GRPC_SLICE_IS_EMPTY(slice)) {
2112
- GRPC_LOG_IF_ERROR(
2113
- "add_status_message",
2114
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
2115
- &s->metadata_buffer[1],
2116
- grpc_mdelem_create(GRPC_MDSTR_GRPC_MESSAGE, slice, nullptr)));
2109
+ s->trailing_metadata_buffer.ReplaceOrAppend(
2110
+ GRPC_MDSTR_GRPC_STATUS,
2111
+ grpc_core::UnmanagedMemorySlice(status_string)));
2112
+ if (!message.empty()) {
2113
+ grpc_slice message_slice = grpc_slice_from_cpp_string(std::move(message));
2114
+ GRPC_LOG_IF_ERROR("add_status_message",
2115
+ s->trailing_metadata_buffer.ReplaceOrAppend(
2116
+ GRPC_MDSTR_GRPC_MESSAGE, message_slice));
2117
2117
  }
2118
2118
  s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
2119
2119
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2253,8 +2253,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2253
2253
  uint8_t* p;
2254
2254
  uint32_t len = 0;
2255
2255
  grpc_status_code grpc_status;
2256
- grpc_slice slice;
2257
- grpc_error_get_status(error, s->deadline, &grpc_status, &slice, nullptr,
2256
+ std::string message;
2257
+ grpc_error_get_status(error, s->deadline, &grpc_status, &message, nullptr,
2258
2258
  nullptr);
2259
2259
 
2260
2260
  GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
@@ -2347,7 +2347,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2347
2347
  GPR_ASSERT(p == GRPC_SLICE_END_PTR(status_hdr));
2348
2348
  len += static_cast<uint32_t> GRPC_SLICE_LENGTH(status_hdr);
2349
2349
 
2350
- size_t msg_len = GRPC_SLICE_LENGTH(slice);
2350
+ size_t msg_len = message.length();
2351
2351
  GPR_ASSERT(msg_len <= UINT32_MAX);
2352
2352
  grpc_core::VarintWriter<1> msg_len_writer(msg_len);
2353
2353
  message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
@@ -2392,7 +2392,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2392
2392
  }
2393
2393
  grpc_slice_buffer_add(&t->qbuf, status_hdr);
2394
2394
  grpc_slice_buffer_add(&t->qbuf, message_pfx);
2395
- grpc_slice_buffer_add(&t->qbuf, grpc_slice_ref_internal(slice));
2395
+ grpc_slice_buffer_add(&t->qbuf,
2396
+ grpc_slice_from_cpp_string(std::move(message)));
2396
2397
  grpc_chttp2_reset_ping_clock(t);
2397
2398
  grpc_chttp2_add_rst_stream_to_next_write(t, s->id, GRPC_HTTP2_NO_ERROR,
2398
2399
  &s->stats.outgoing);
@@ -2508,7 +2509,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2508
2509
 
2509
2510
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2510
2511
 
2511
- GRPC_ERROR_REF(error);
2512
+ (void)GRPC_ERROR_REF(error);
2512
2513
 
2513
2514
  grpc_error_handle err = error;
2514
2515
  if (err != GRPC_ERROR_NONE) {
@@ -2517,7 +2518,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2517
2518
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
2518
2519
  t->write_state);
2519
2520
  }
2520
- GPR_SWAP(grpc_error_handle, err, error);
2521
+ std::swap(err, error);
2521
2522
  GRPC_ERROR_UNREF(err);
2522
2523
  if (t->closed_with_error == GRPC_ERROR_NONE) {
2523
2524
  GPR_TIMER_SCOPE("reading_action.parse", 0);