grpc 1.43.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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -26,7 +26,7 @@
26
26
 
27
27
  #include "src/core/lib/channel/channel_stack.h"
28
28
  #include "src/core/lib/channel/context.h"
29
- #include "src/core/lib/gprpp/arena.h"
29
+ #include "src/core/lib/resource_quota/arena.h"
30
30
  #include "src/core/lib/surface/api_trace.h"
31
31
  #include "src/core/lib/surface/server.h"
32
32
 
@@ -46,8 +46,8 @@ typedef struct grpc_call_create_args {
46
46
 
47
47
  const void* server_transport_data;
48
48
 
49
- grpc_mdelem* add_initial_metadata;
50
- size_t add_initial_metadata_count;
49
+ absl::optional<grpc_core::Slice> path;
50
+ absl::optional<grpc_core::Slice> authority;
51
51
 
52
52
  grpc_millis send_deadline;
53
53
  } grpc_call_create_args;
@@ -55,7 +55,7 @@ typedef struct grpc_call_create_args {
55
55
  /* Create a new call based on \a args.
56
56
  Regardless of success or failure, always returns a valid new call into *call
57
57
  */
58
- grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
58
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
59
59
  grpc_call** call);
60
60
 
61
61
  void grpc_call_set_completion_queue(grpc_call* call, grpc_completion_queue* cq);
@@ -41,11 +41,12 @@
41
41
  #include "src/core/lib/gprpp/memory.h"
42
42
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
43
43
  #include "src/core/lib/iomgr/iomgr.h"
44
+ #include "src/core/lib/resource_quota/api.h"
44
45
  #include "src/core/lib/resource_quota/memory_quota.h"
45
46
  #include "src/core/lib/slice/slice_internal.h"
46
47
  #include "src/core/lib/surface/api_trace.h"
47
48
  #include "src/core/lib/surface/call.h"
48
- #include "src/core/lib/transport/static_metadata.h"
49
+ #include "src/core/lib/surface/channel_stack_type.h"
49
50
 
50
51
  /** Cache grpc-status: X mdelems for X = 0..NUM_CACHED_STATUS_ELEMS.
51
52
  * Avoids needing to take a metadata context lock for sending status
@@ -59,7 +60,7 @@ static void destroy_channel(void* arg, grpc_error_handle error);
59
60
  grpc_channel* grpc_channel_create_with_builder(
60
61
  grpc_channel_stack_builder* builder,
61
62
  grpc_channel_stack_type channel_stack_type, grpc_error_handle* error) {
62
- char* target = gpr_strdup(grpc_channel_stack_builder_get_target(builder));
63
+ std::string target = grpc_channel_stack_builder_get_target(builder);
63
64
  grpc_channel_args* args = grpc_channel_args_copy(
64
65
  grpc_channel_stack_builder_get_channel_arguments(builder));
65
66
  grpc_channel* channel;
@@ -68,6 +69,7 @@ grpc_channel* grpc_channel_create_with_builder(
68
69
  } else {
69
70
  GRPC_STATS_INC_CLIENT_CHANNELS_CREATED();
70
71
  }
72
+ std::string name = grpc_channel_stack_builder_get_target(builder);
71
73
  grpc_error_handle builder_error = grpc_channel_stack_builder_finish(
72
74
  builder, sizeof(grpc_channel), 1, destroy_channel, nullptr,
73
75
  reinterpret_cast<void**>(&channel));
@@ -80,13 +82,15 @@ grpc_channel* grpc_channel_create_with_builder(
80
82
  } else {
81
83
  GRPC_ERROR_UNREF(builder_error);
82
84
  }
83
- gpr_free(target);
84
85
  grpc_channel_args_destroy(args);
85
86
  return nullptr;
86
87
  }
87
- channel->target = target;
88
+ channel->target.Init(std::move(target));
88
89
  channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type);
89
90
  channel->registration_table.Init();
91
+ channel->allocator.Init(grpc_core::ResourceQuotaFromChannelArgs(args)
92
+ ->memory_quota()
93
+ ->CreateMemoryOwner(name));
90
94
 
91
95
  gpr_atm_no_barrier_store(
92
96
  &channel->call_size_estimate,
@@ -197,11 +201,10 @@ void CreateChannelzNode(grpc_channel_stack_builder* builder) {
197
201
  const bool is_internal_channel = grpc_channel_args_find_bool(
198
202
  args, GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, false);
199
203
  // Create the channelz node.
200
- const char* target = grpc_channel_stack_builder_get_target(builder);
204
+ std::string target = grpc_channel_stack_builder_get_target(builder);
201
205
  grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node =
202
206
  grpc_core::MakeRefCounted<grpc_core::channelz::ChannelNode>(
203
- target != nullptr ? target : "", channel_tracer_max_memory,
204
- is_internal_channel);
207
+ target.c_str(), channel_tracer_max_memory, is_internal_channel);
205
208
  channelz_node->AddTraceEvent(
206
209
  grpc_core::channelz::ChannelTrace::Severity::Info,
207
210
  grpc_slice_from_static_string("Channel created"));
@@ -241,7 +244,8 @@ grpc_channel* grpc_channel_create(const char* target,
241
244
  // grpc_shutdown() when the channel is actually destroyed, thus
242
245
  // ensuring that shutdown is deferred until that point.
243
246
  grpc_init();
244
- grpc_channel_stack_builder* builder = grpc_channel_stack_builder_create();
247
+ grpc_channel_stack_builder* builder = grpc_channel_stack_builder_create(
248
+ grpc_channel_stack_type_string(channel_stack_type));
245
249
  const grpc_core::UniquePtr<char> default_authority =
246
250
  get_default_authority(input_args);
247
251
  grpc_channel_args* args =
@@ -313,7 +317,7 @@ void grpc_channel_update_call_size_estimate(grpc_channel* channel,
313
317
 
314
318
  char* grpc_channel_get_target(grpc_channel* channel) {
315
319
  GRPC_API_TRACE("grpc_channel_get_target(channel=%p)", 1, (channel));
316
- return gpr_strdup(channel->target);
320
+ return gpr_strdup(channel->target->c_str());
317
321
  }
318
322
 
319
323
  void grpc_channel_get_info(grpc_channel* channel,
@@ -340,19 +344,11 @@ void grpc_channel_reset_connect_backoff(grpc_channel* channel) {
340
344
  static grpc_call* grpc_channel_create_call_internal(
341
345
  grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
342
346
  grpc_completion_queue* cq, grpc_pollset_set* pollset_set_alternative,
343
- grpc_mdelem path_mdelem, grpc_mdelem authority_mdelem,
347
+ grpc_core::Slice path, absl::optional<grpc_core::Slice> authority,
344
348
  grpc_millis deadline) {
345
- grpc_mdelem send_metadata[2];
346
- size_t num_metadata = 0;
347
-
348
349
  GPR_ASSERT(channel->is_client);
349
350
  GPR_ASSERT(!(cq != nullptr && pollset_set_alternative != nullptr));
350
351
 
351
- send_metadata[num_metadata++] = path_mdelem;
352
- if (!GRPC_MDISNULL(authority_mdelem)) {
353
- send_metadata[num_metadata++] = authority_mdelem;
354
- }
355
-
356
352
  grpc_call_create_args args;
357
353
  args.channel = channel;
358
354
  args.server = nullptr;
@@ -361,8 +357,8 @@ static grpc_call* grpc_channel_create_call_internal(
361
357
  args.cq = cq;
362
358
  args.pollset_set_alternative = pollset_set_alternative;
363
359
  args.server_transport_data = nullptr;
364
- args.add_initial_metadata = send_metadata;
365
- args.add_initial_metadata_count = num_metadata;
360
+ args.path = std::move(path);
361
+ args.authority = std::move(authority);
366
362
  args.send_deadline = deadline;
367
363
 
368
364
  grpc_call* call;
@@ -381,9 +377,10 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
381
377
  grpc_core::ExecCtx exec_ctx;
382
378
  grpc_call* call = grpc_channel_create_call_internal(
383
379
  channel, parent_call, propagation_mask, completion_queue, nullptr,
384
- grpc_mdelem_create(GRPC_MDSTR_PATH, method, nullptr),
385
- host != nullptr ? grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, *host, nullptr)
386
- : GRPC_MDNULL,
380
+ grpc_core::Slice(grpc_slice_ref_internal(method)),
381
+ host != nullptr
382
+ ? absl::optional<grpc_core::Slice>(grpc_slice_ref_internal(*host))
383
+ : absl::nullopt,
387
384
  grpc_timespec_to_millis_round_up(deadline));
388
385
 
389
386
  return call;
@@ -396,34 +393,31 @@ grpc_call* grpc_channel_create_pollset_set_call(
396
393
  GPR_ASSERT(!reserved);
397
394
  return grpc_channel_create_call_internal(
398
395
  channel, parent_call, propagation_mask, nullptr, pollset_set,
399
- grpc_mdelem_create(GRPC_MDSTR_PATH, method, nullptr),
400
- host != nullptr ? grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, *host, nullptr)
401
- : GRPC_MDNULL,
396
+ grpc_core::Slice(method),
397
+ host != nullptr
398
+ ? absl::optional<grpc_core::Slice>(grpc_slice_ref_internal(*host))
399
+ : absl::nullopt,
402
400
  deadline);
403
401
  }
404
402
 
405
403
  namespace grpc_core {
406
404
 
407
- RegisteredCall::RegisteredCall(const char* method_arg, const char* host_arg)
408
- : path(method_arg != nullptr && method_arg[0] != 0
409
- ? grpc_mdelem_from_slices(
410
- GRPC_MDSTR_PATH, grpc_slice_from_copied_string(method_arg))
411
- : GRPC_MDNULL),
412
- authority(
413
- host_arg != nullptr && host_arg[0] != 0
414
- ? grpc_mdelem_from_slices(GRPC_MDSTR_AUTHORITY,
415
- grpc_slice_from_copied_string(host_arg))
416
- : GRPC_MDNULL) {}
405
+ RegisteredCall::RegisteredCall(const char* method_arg, const char* host_arg) {
406
+ path = Slice::FromCopiedString(method_arg);
407
+ if (host_arg != nullptr && host_arg[0] != 0) {
408
+ authority = Slice::FromCopiedString(host_arg);
409
+ }
410
+ }
417
411
 
418
412
  RegisteredCall::RegisteredCall(const RegisteredCall& other)
419
- : path(GRPC_MDELEM_REF(other.path)),
420
- authority(GRPC_MDELEM_REF(other.authority)) {}
421
-
422
- RegisteredCall::~RegisteredCall() {
423
- GRPC_MDELEM_UNREF(path);
424
- GRPC_MDELEM_UNREF(authority);
413
+ : path(other.path.Ref()) {
414
+ if (other.authority.has_value()) {
415
+ authority = other.authority->Ref();
416
+ }
425
417
  }
426
418
 
419
+ RegisteredCall::~RegisteredCall() {}
420
+
427
421
  } // namespace grpc_core
428
422
 
429
423
  void* grpc_channel_register_call(grpc_channel* channel, const char* method,
@@ -470,7 +464,10 @@ grpc_call* grpc_channel_create_registered_call(
470
464
  grpc_core::ExecCtx exec_ctx;
471
465
  grpc_call* call = grpc_channel_create_call_internal(
472
466
  channel, parent_call, propagation_mask, completion_queue, nullptr,
473
- GRPC_MDELEM_REF(rc->path), GRPC_MDELEM_REF(rc->authority),
467
+ rc->path.Ref(),
468
+ rc->authority.has_value()
469
+ ? absl::optional<grpc_core::Slice>(rc->authority->Ref())
470
+ : absl::nullopt,
474
471
  grpc_timespec_to_millis_round_up(deadline));
475
472
 
476
473
  return call;
@@ -486,7 +483,8 @@ static void destroy_channel(void* arg, grpc_error_handle /*error*/) {
486
483
  }
487
484
  grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel));
488
485
  channel->registration_table.Destroy();
489
- gpr_free(channel->target);
486
+ channel->allocator.Destroy();
487
+ channel->target.Destroy();
490
488
  gpr_free(channel);
491
489
  // See comment in grpc_channel_create() for why we do this.
492
490
  grpc_shutdown();
@@ -29,7 +29,6 @@
29
29
  #include "src/core/lib/gprpp/manual_constructor.h"
30
30
  #include "src/core/lib/resource_quota/memory_quota.h"
31
31
  #include "src/core/lib/surface/channel_stack_type.h"
32
- #include "src/core/lib/transport/metadata.h"
33
32
 
34
33
  /// Creates a grpc_channel.
35
34
  grpc_channel* grpc_channel_create(const char* target,
@@ -74,8 +73,8 @@ void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
74
73
  namespace grpc_core {
75
74
 
76
75
  struct RegisteredCall {
77
- grpc_mdelem path;
78
- grpc_mdelem authority;
76
+ Slice path;
77
+ absl::optional<Slice> authority;
79
78
 
80
79
  explicit RegisteredCall(const char* method_arg, const char* host_arg);
81
80
  RegisteredCall(const RegisteredCall& other);
@@ -110,8 +109,9 @@ struct grpc_channel {
110
109
  grpc_core::ManualConstructor<grpc_core::CallRegistrationTable>
111
110
  registration_table;
112
111
  grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node;
112
+ grpc_core::ManualConstructor<grpc_core::MemoryAllocator> allocator;
113
113
 
114
- char* target;
114
+ grpc_core::ManualConstructor<std::string> target;
115
115
  };
116
116
  #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack*)((c) + 1))
117
117
 
@@ -105,7 +105,6 @@ void grpc_init(void) {
105
105
  grpc_fork_handlers_auto_register();
106
106
  grpc_stats_init();
107
107
  grpc_slice_intern_init();
108
- grpc_mdctx_global_init();
109
108
  grpc_core::channelz::ChannelzRegistry::Init();
110
109
  grpc_security_pre_init();
111
110
  grpc_core::ApplicationCallbackExecCtx::GlobalInit();
@@ -141,7 +140,6 @@ void grpc_shutdown_internal_locked(void)
141
140
  grpc_iomgr_shutdown();
142
141
  gpr_timers_global_destroy();
143
142
  grpc_tracer_shutdown();
144
- grpc_mdctx_global_shutdown();
145
143
  grpc_slice_intern_shutdown();
146
144
  grpc_core::channelz::ChannelzRegistry::Shutdown();
147
145
  grpc_stats_shutdown();
@@ -35,7 +35,6 @@
35
35
  #include "src/core/lib/surface/call.h"
36
36
  #include "src/core/lib/surface/channel.h"
37
37
  #include "src/core/lib/transport/connectivity_state.h"
38
- #include "src/core/lib/transport/static_metadata.h"
39
38
 
40
39
  #define GRPC_ARG_LAME_FILTER_ERROR "grpc.lame_filter_error"
41
40
 
@@ -53,8 +53,6 @@
53
53
  #include "src/core/lib/surface/channel.h"
54
54
  #include "src/core/lib/surface/completion_queue.h"
55
55
  #include "src/core/lib/surface/init.h"
56
- #include "src/core/lib/transport/metadata.h"
57
- #include "src/core/lib/transport/static_metadata.h"
58
56
 
59
57
  namespace grpc_core {
60
58
 
@@ -1035,8 +1033,7 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
1035
1033
  if (has_host) {
1036
1034
  host = ExternallyManagedSlice(rm->host.c_str());
1037
1035
  }
1038
- uint32_t hash =
1039
- GRPC_MDSTR_KV_HASH(has_host ? host.Hash() : 0, method.Hash());
1036
+ uint32_t hash = MixHash32(has_host ? host.Hash() : 0, method.Hash());
1040
1037
  uint32_t probes = 0;
1041
1038
  for (probes = 0; (*registered_methods_)[(hash + probes) % slots]
1042
1039
  .server_registered_method != nullptr;
@@ -1080,8 +1077,8 @@ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1080
1077
  if (registered_methods_ == nullptr) return nullptr;
1081
1078
  /* TODO(ctiller): unify these two searches */
1082
1079
  /* check for an exact match with host */
1083
- uint32_t hash = GRPC_MDSTR_KV_HASH(grpc_slice_hash_internal(host),
1084
- grpc_slice_hash_internal(path));
1080
+ uint32_t hash =
1081
+ MixHash32(grpc_slice_hash_internal(host), grpc_slice_hash_internal(path));
1085
1082
  for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1086
1083
  ChannelRegisteredMethod* rm =
1087
1084
  &(*registered_methods_)[(hash + i) % registered_methods_->size()];
@@ -1096,7 +1093,7 @@ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1096
1093
  return rm;
1097
1094
  }
1098
1095
  /* check for a wildcard method definition (no host set) */
1099
- hash = GRPC_MDSTR_KV_HASH(0, grpc_slice_hash_internal(path));
1096
+ hash = MixHash32(0, grpc_slice_hash_internal(path));
1100
1097
  for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1101
1098
  ChannelRegisteredMethod* rm =
1102
1099
  &(*registered_methods_)[(hash + i) % registered_methods_->size()];
@@ -1124,8 +1121,6 @@ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
1124
1121
  args.cq = nullptr;
1125
1122
  args.pollset_set_alternative = nullptr;
1126
1123
  args.server_transport_data = transport_server_data;
1127
- args.add_initial_metadata = nullptr;
1128
- args.add_initial_metadata_count = 0;
1129
1124
  args.send_deadline = GRPC_MILLIS_INF_FUTURE;
1130
1125
  grpc_call* call;
1131
1126
  grpc_error_handle error = grpc_call_create(&args, &call);
@@ -1200,12 +1195,6 @@ Server::CallData::CallData(grpc_call_element* elem,
1200
1195
  Server::CallData::~CallData() {
1201
1196
  GPR_ASSERT(state_.load(std::memory_order_relaxed) != CallState::PENDING);
1202
1197
  GRPC_ERROR_UNREF(recv_initial_metadata_error_);
1203
- if (host_.has_value()) {
1204
- grpc_slice_unref_internal(*host_);
1205
- }
1206
- if (path_.has_value()) {
1207
- grpc_slice_unref_internal(*path_);
1208
- }
1209
1198
  grpc_metadata_array_destroy(&initial_metadata_);
1210
1199
  grpc_byte_buffer_destroy(payload_);
1211
1200
  }
@@ -1258,8 +1247,9 @@ void Server::CallData::Publish(size_t cq_idx, RequestedCall* rc) {
1258
1247
  case RequestedCall::Type::BATCH_CALL:
1259
1248
  GPR_ASSERT(host_.has_value());
1260
1249
  GPR_ASSERT(path_.has_value());
1261
- rc->data.batch.details->host = grpc_slice_ref_internal(*host_);
1262
- rc->data.batch.details->method = grpc_slice_ref_internal(*path_);
1250
+ rc->data.batch.details->host = grpc_slice_ref_internal(host_->c_slice());
1251
+ rc->data.batch.details->method =
1252
+ grpc_slice_ref_internal(path_->c_slice());
1263
1253
  rc->data.batch.details->deadline =
1264
1254
  grpc_millis_to_timespec(deadline_, GPR_CLOCK_MONOTONIC);
1265
1255
  rc->data.batch.details->flags = recv_initial_metadata_flags_;
@@ -1320,7 +1310,7 @@ void Server::CallData::StartNewRpc(grpc_call_element* elem) {
1320
1310
  GRPC_SRM_PAYLOAD_NONE;
1321
1311
  if (path_.has_value() && host_.has_value()) {
1322
1312
  ChannelRegisteredMethod* rm =
1323
- chand->GetRegisteredMethod(*host_, *path_,
1313
+ chand->GetRegisteredMethod(host_->c_slice(), path_->c_slice(),
1324
1314
  (recv_initial_metadata_flags_ &
1325
1315
  GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST));
1326
1316
  if (rm != nullptr) {
@@ -1352,6 +1342,8 @@ void Server::CallData::RecvInitialMetadataBatchComplete(
1352
1342
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1353
1343
  auto* calld = static_cast<Server::CallData*>(elem->call_data);
1354
1344
  if (error != GRPC_ERROR_NONE) {
1345
+ gpr_log(GPR_DEBUG, "Failed call creation: %s",
1346
+ grpc_error_std_string(error).c_str());
1355
1347
  calld->FailCallCreation();
1356
1348
  return;
1357
1349
  }
@@ -1385,17 +1377,8 @@ void Server::CallData::RecvInitialMetadataReady(void* arg,
1385
1377
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1386
1378
  CallData* calld = static_cast<CallData*>(elem->call_data);
1387
1379
  if (error == GRPC_ERROR_NONE) {
1388
- GPR_DEBUG_ASSERT(
1389
- calld->recv_initial_metadata_->legacy_index()->named.path != nullptr);
1390
- GPR_DEBUG_ASSERT(
1391
- calld->recv_initial_metadata_->legacy_index()->named.authority !=
1392
- nullptr);
1393
- calld->path_.emplace(grpc_slice_ref_internal(GRPC_MDVALUE(
1394
- calld->recv_initial_metadata_->legacy_index()->named.path->md)));
1395
- calld->host_.emplace(grpc_slice_ref_internal(GRPC_MDVALUE(
1396
- calld->recv_initial_metadata_->legacy_index()->named.authority->md)));
1397
- calld->recv_initial_metadata_->Remove(GRPC_BATCH_PATH);
1398
- calld->recv_initial_metadata_->Remove(GRPC_BATCH_AUTHORITY);
1380
+ calld->path_ = calld->recv_initial_metadata_->Take(HttpPathMetadata());
1381
+ calld->host_ = calld->recv_initial_metadata_->Take(HttpAuthorityMetadata());
1399
1382
  } else {
1400
1383
  (void)GRPC_ERROR_REF(error);
1401
1384
  }
@@ -293,8 +293,8 @@ class Server : public InternallyRefCounted<Server>,
293
293
 
294
294
  std::atomic<CallState> state_{CallState::NOT_STARTED};
295
295
 
296
- absl::optional<grpc_slice> path_;
297
- absl::optional<grpc_slice> host_;
296
+ absl::optional<Slice> path_;
297
+ absl::optional<Slice> host_;
298
298
  grpc_millis deadline_ = GRPC_MILLIS_INF_FUTURE;
299
299
 
300
300
  grpc_completion_queue* cq_new_ = nullptr;
@@ -23,6 +23,6 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
- const char* grpc_version_string(void) { return "21.0.0"; }
26
+ const char* grpc_version_string(void) { return "22.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "green"; }
28
+ const char* grpc_g_stands_for(void) { return "great"; }
@@ -27,6 +27,20 @@
27
27
  #include "src/core/lib/iomgr/exec_ctx.h"
28
28
  #include "src/core/lib/transport/http2_errors.h"
29
29
 
30
+ namespace grpc_core {
31
+
32
+ enum class StreamNetworkState {
33
+ // Stream was never sent on the wire (e.g., because the transport became
34
+ // disconnected by the time the call got down to it).
35
+ kNotSentOnWire,
36
+ // Stream was sent on the wire but was not seen by the server application
37
+ // code (e.g., client sent data but then received a GOAWAY with a lower
38
+ // stream ID).
39
+ kNotSeenByServer,
40
+ };
41
+
42
+ } // namespace grpc_core
43
+
30
44
  /// A utility function to get the status code and message to be returned
31
45
  /// to the application. If not set in the top-level message, looks
32
46
  /// through child errors until it finds the first one with these attributes.