grpc 1.31.1 → 1.32.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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +595 -15723
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/impl/codegen/README.md +22 -0
  5. data/include/grpc/impl/codegen/port_platform.h +6 -1
  6. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  7. data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
  8. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  9. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  12. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  13. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  29. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  30. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +363 -14
  32. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  33. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
  34. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  35. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  36. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  37. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  38. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  39. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  40. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  41. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  44. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  45. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  46. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  47. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
  48. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  50. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  51. data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
  52. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  53. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  54. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  55. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  56. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  57. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  58. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  59. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  60. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  61. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  62. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  63. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  66. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  68. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  69. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  70. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  71. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  72. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  73. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  74. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  75. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  78. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  84. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  86. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  88. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  89. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  90. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  91. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  92. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  93. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  94. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  95. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  96. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  97. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  98. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  99. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  100. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  101. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  102. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  103. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  104. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  105. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  106. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  107. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  108. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  109. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  118. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  119. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  120. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  121. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  122. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  123. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  124. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  125. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  126. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  127. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  128. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  129. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  130. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  131. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  132. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  133. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  134. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  135. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  136. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  137. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  138. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  139. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  140. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  141. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  142. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  143. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  144. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  145. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  146. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  147. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  148. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  149. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  150. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  151. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  152. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  153. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  154. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  155. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  156. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  157. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  158. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  159. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  160. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  161. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  162. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  163. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  164. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  165. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  166. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  167. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  168. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
  169. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
  170. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  171. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  172. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  173. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  174. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  175. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
  176. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  177. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  178. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
  179. data/src/core/lib/channel/channelz.cc +14 -15
  180. data/src/core/lib/channel/channelz.h +1 -1
  181. data/src/core/lib/channel/channelz_registry.cc +3 -1
  182. data/src/core/lib/gpr/sync_posix.cc +2 -8
  183. data/src/core/lib/iomgr/endpoint.cc +5 -1
  184. data/src/core/lib/iomgr/endpoint.h +7 -3
  185. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  186. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  187. data/src/core/lib/iomgr/iomgr.cc +0 -10
  188. data/src/core/lib/iomgr/iomgr.h +0 -10
  189. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  190. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  191. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  192. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  193. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  194. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  195. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  196. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  197. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  198. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  199. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  200. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  201. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  202. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  203. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  204. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  205. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  206. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  207. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
  209. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  210. data/src/core/lib/surface/call.cc +12 -12
  211. data/src/core/lib/surface/call.h +2 -1
  212. data/src/core/lib/surface/channel.cc +28 -20
  213. data/src/core/lib/surface/channel.h +12 -2
  214. data/src/core/lib/surface/completion_queue.cc +10 -272
  215. data/src/core/lib/surface/completion_queue.h +0 -8
  216. data/src/core/lib/surface/init.cc +1 -3
  217. data/src/core/lib/surface/server.cc +1066 -1244
  218. data/src/core/lib/surface/server.h +363 -87
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/authority_override.cc +38 -0
  221. data/src/core/lib/transport/authority_override.h +32 -0
  222. data/src/core/lib/transport/connectivity_state.cc +18 -13
  223. data/src/core/lib/transport/connectivity_state.h +18 -6
  224. data/src/core/lib/transport/error_utils.cc +13 -0
  225. data/src/core/lib/transport/error_utils.h +6 -0
  226. data/src/core/lib/transport/static_metadata.cc +295 -276
  227. data/src/core/lib/transport/static_metadata.h +80 -73
  228. data/src/core/lib/transport/transport.h +7 -0
  229. data/src/core/lib/uri/uri_parser.cc +23 -21
  230. data/src/core/lib/uri/uri_parser.h +3 -1
  231. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  232. data/src/core/tsi/ssl_transport_security.cc +3 -9
  233. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  235. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  236. data/src/ruby/lib/grpc/version.rb +1 -1
  237. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  238. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  239. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  240. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  241. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  242. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  243. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  244. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  245. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  246. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  247. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  248. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  249. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  250. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  251. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  252. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  253. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  254. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  255. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  256. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  257. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  258. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  259. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  260. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  261. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  262. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  263. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  264. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  268. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  269. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  270. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  271. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  272. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  273. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  274. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  275. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  276. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  277. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  278. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  279. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  280. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  281. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  282. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  283. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  284. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  285. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  286. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  287. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  288. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  289. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  290. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  291. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  292. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  293. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  294. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  295. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  296. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  297. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  298. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  299. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  300. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  301. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  302. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  303. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  304. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  305. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  306. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  307. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  308. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  309. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  310. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  311. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  312. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  313. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  314. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  315. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  316. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  317. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  318. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  319. data/third_party/boringssl-with-bazel/err_data.c +263 -257
  320. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  325. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  326. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
  327. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  328. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
  329. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  332. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  333. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
  334. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  335. data/third_party/upb/upb/decode.c +64 -15
  336. data/third_party/upb/upb/encode.c +2 -2
  337. data/third_party/upb/upb/msg.h +2 -2
  338. data/third_party/upb/upb/port_def.inc +1 -1
  339. data/third_party/upb/upb/table.c +0 -11
  340. data/third_party/upb/upb/table.int.h +0 -9
  341. data/third_party/upb/upb/upb.c +16 -14
  342. data/third_party/upb/upb/upb.h +26 -0
  343. data/third_party/upb/upb/upb.hpp +2 -0
  344. metadata +257 -155
  345. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  346. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  347. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  348. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  349. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  350. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  351. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  352. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  353. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  354. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  355. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  356. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  357. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  358. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  359. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  360. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  361. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  362. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  363. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  364. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  365. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  366. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  367. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  368. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  369. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  370. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  371. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  372. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  373. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  374. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  375. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  376. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  377. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  378. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  379. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  380. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  381. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  382. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  383. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  384. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  385. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  386. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  387. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  388. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  389. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  390. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  391. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  392. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  393. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  394. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  395. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  396. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  397. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  398. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  399. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  400. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  401. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  402. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  403. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  404. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  405. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  406. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  407. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  408. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  409. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  410. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  411. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  412. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  413. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  415. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  416. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  417. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  418. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  419. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  420. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  421. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  422. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  423. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  424. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  425. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  426. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  427. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  428. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  429. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  430. data/src/core/lib/slice/slice_hash_table.h +0 -199
  431. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
@@ -229,7 +229,8 @@ class ConnectivityWatcher : public AsyncConnectivityStateWatcherInterface {
229
229
  }
230
230
 
231
231
  private:
232
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
232
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
233
+ const absl::Status& /* status */) override {
233
234
  if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
234
235
  {
235
236
  MutexLock lock(&chand_->max_age_timer_mu);
@@ -129,6 +129,15 @@ void Chttp2Connector::StartHandshakeLocked() {
129
129
  endpoint_ = nullptr; // Endpoint handed off to handshake manager.
130
130
  }
131
131
 
132
+ namespace {
133
+ void NullThenSchedClosure(const DebugLocation& location, grpc_closure** closure,
134
+ grpc_error* error) {
135
+ grpc_closure* c = *closure;
136
+ *closure = nullptr;
137
+ ExecCtx::Run(location, c, error);
138
+ }
139
+ } // namespace
140
+
132
141
  void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
133
142
  auto* args = static_cast<HandshakerArgs*>(arg);
134
143
  Chttp2Connector* self = static_cast<Chttp2Connector*>(args->user_data);
@@ -154,53 +163,100 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
154
163
  error = GRPC_ERROR_REF(error);
155
164
  }
156
165
  self->result_->Reset();
166
+ NullThenSchedClosure(DEBUG_LOCATION, &self->notify_, error);
157
167
  } else if (args->endpoint != nullptr) {
158
- grpc_endpoint_delete_from_pollset_set(args->endpoint,
159
- self->args_.interested_parties);
160
168
  self->result_->transport =
161
169
  grpc_create_chttp2_transport(args->args, args->endpoint, true);
162
170
  self->result_->socket_node =
163
171
  grpc_chttp2_transport_get_socket_node(self->result_->transport);
172
+ self->result_->channel_args = args->args;
164
173
  GPR_ASSERT(self->result_->transport != nullptr);
165
- // TODO(roth): We ideally want to wait until we receive HTTP/2
166
- // settings from the server before we consider the connection
167
- // established. If that doesn't happen before the connection
168
- // timeout expires, then we should consider the connection attempt a
169
- // failure and feed that information back into the backoff code.
170
- // We could pass a notify_on_receive_settings callback to
171
- // grpc_chttp2_transport_start_reading() to let us know when
172
- // settings are received, but we would need to figure out how to use
173
- // that information here.
174
- //
175
- // Unfortunately, we don't currently have a way to split apart the two
176
- // effects of scheduling c->notify: we start sending RPCs immediately
177
- // (which we want to do) and we consider the connection attempt successful
178
- // (which we don't want to do until we get the notify_on_receive_settings
179
- // callback from the transport). If we could split those things
180
- // apart, then we could start sending RPCs but then wait for our
181
- // timeout before deciding if the connection attempt is successful.
182
- // If the attempt is not successful, then we would tear down the
183
- // transport and feed the failure back into the backoff code.
184
- //
185
- // In addition, even if we did that, we would probably not want to do
186
- // so until after transparent retries is implemented. Otherwise, any
187
- // RPC that we attempt to send on the connection before the timeout
188
- // would fail instead of being retried on a subsequent attempt.
174
+ self->endpoint_ = args->endpoint;
175
+ self->Ref().release(); // Ref held by OnReceiveSettings()
176
+ GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings, self,
177
+ grpc_schedule_on_exec_ctx);
178
+ self->Ref().release(); // Ref held by OnTimeout()
189
179
  grpc_chttp2_transport_start_reading(self->result_->transport,
190
- args->read_buffer, nullptr);
191
- self->result_->channel_args = args->args;
180
+ args->read_buffer,
181
+ &self->on_receive_settings_);
182
+ GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
183
+ grpc_schedule_on_exec_ctx);
184
+ grpc_timer_init(&self->timer_, self->args_.deadline, &self->on_timeout_);
192
185
  } else {
193
186
  // If the handshaking succeeded but there is no endpoint, then the
194
187
  // handshaker may have handed off the connection to some external
195
188
  // code. Just verify that exit_early flag is set.
196
189
  GPR_DEBUG_ASSERT(args->exit_early);
190
+ NullThenSchedClosure(DEBUG_LOCATION, &self->notify_, error);
197
191
  }
198
- grpc_closure* notify = self->notify_;
199
- self->notify_ = nullptr;
200
- ExecCtx::Run(DEBUG_LOCATION, notify, error);
201
192
  self->handshake_mgr_.reset();
202
193
  }
203
194
  self->Unref();
204
195
  }
205
196
 
197
+ void Chttp2Connector::OnReceiveSettings(void* arg, grpc_error* error) {
198
+ Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
199
+ {
200
+ MutexLock lock(&self->mu_);
201
+ if (!self->notify_error_.has_value()) {
202
+ grpc_endpoint_delete_from_pollset_set(self->endpoint_,
203
+ self->args_.interested_parties);
204
+ if (error != GRPC_ERROR_NONE) {
205
+ // Transport got an error while waiting on SETTINGS frame.
206
+ // TODO(yashykt): The following two lines should be moved to
207
+ // SubchannelConnector::Result::Reset()
208
+ grpc_transport_destroy(self->result_->transport);
209
+ grpc_channel_args_destroy(self->result_->channel_args);
210
+ self->result_->Reset();
211
+ }
212
+ self->MaybeNotify(GRPC_ERROR_REF(error));
213
+ grpc_timer_cancel(&self->timer_);
214
+ } else {
215
+ // OnTimeout() was already invoked. Call Notify() again so that notify_
216
+ // can be invoked.
217
+ self->MaybeNotify(GRPC_ERROR_NONE);
218
+ }
219
+ }
220
+ self->Unref();
221
+ }
222
+
223
+ void Chttp2Connector::OnTimeout(void* arg, grpc_error* error) {
224
+ Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
225
+ {
226
+ MutexLock lock(&self->mu_);
227
+ if (!self->notify_error_.has_value()) {
228
+ // The transport did not receive the settings frame in time. Destroy the
229
+ // transport.
230
+ grpc_endpoint_delete_from_pollset_set(self->endpoint_,
231
+ self->args_.interested_parties);
232
+ // TODO(yashykt): The following two lines should be moved to
233
+ // SubchannelConnector::Result::Reset()
234
+ grpc_transport_destroy(self->result_->transport);
235
+ grpc_channel_args_destroy(self->result_->channel_args);
236
+ self->result_->Reset();
237
+ self->MaybeNotify(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
238
+ "connection attempt timed out before receiving SETTINGS frame"));
239
+ } else {
240
+ // OnReceiveSettings() was already invoked. Call Notify() again so that
241
+ // notify_ can be invoked.
242
+ self->MaybeNotify(GRPC_ERROR_NONE);
243
+ }
244
+ }
245
+ self->Unref();
246
+ }
247
+
248
+ void Chttp2Connector::MaybeNotify(grpc_error* error) {
249
+ if (notify_error_.has_value()) {
250
+ GRPC_ERROR_UNREF(error);
251
+ NullThenSchedClosure(DEBUG_LOCATION, &notify_, notify_error_.value());
252
+ // Clear state for a new Connect().
253
+ // Clear out the endpoint_, since it is the responsibility of
254
+ // the transport to shut it down.
255
+ endpoint_ = nullptr;
256
+ notify_error_.reset();
257
+ } else {
258
+ notify_error_ = error;
259
+ }
260
+ }
261
+
206
262
  } // namespace grpc_core
@@ -39,6 +39,19 @@ class Chttp2Connector : public SubchannelConnector {
39
39
  static void Connected(void* arg, grpc_error* error);
40
40
  void StartHandshakeLocked();
41
41
  static void OnHandshakeDone(void* arg, grpc_error* error);
42
+ static void OnReceiveSettings(void* arg, grpc_error* error);
43
+ static void OnTimeout(void* arg, grpc_error* error);
44
+
45
+ // We cannot invoke notify_ until both OnTimeout() and OnReceiveSettings()
46
+ // have been called since that is an indicator to the upper layer that we are
47
+ // done with the connection attempt. So, the notification process is broken
48
+ // into two steps. 1) Either OnTimeout() or OnReceiveSettings() gets invoked
49
+ // first. Whichever gets invoked, calls MaybeNotify() to set the result and
50
+ // triggers the other callback to be invoked. 2) When the other callback is
51
+ // invoked, we call MaybeNotify() again to actually invoke the notify_
52
+ // callback. Note that this only happens if the handshake is done and the
53
+ // connector is waiting on the SETTINGS frame.
54
+ void MaybeNotify(grpc_error* error);
42
55
 
43
56
  Mutex mu_;
44
57
  Args args_;
@@ -47,9 +60,13 @@ class Chttp2Connector : public SubchannelConnector {
47
60
  bool shutdown_ = false;
48
61
  bool connecting_ = false;
49
62
  // Holds the endpoint when first created before being handed off to
50
- // the handshake manager.
63
+ // the handshake manager, and then again after handshake is done.
51
64
  grpc_endpoint* endpoint_ = nullptr;
52
65
  grpc_closure connected_;
66
+ grpc_closure on_receive_settings_;
67
+ grpc_timer timer_;
68
+ grpc_closure on_timeout_;
69
+ absl::optional<grpc_error*> notify_error_;
53
70
  RefCountedPtr<HandshakeManager> handshake_mgr_;
54
71
  };
55
72
 
@@ -33,11 +33,10 @@
33
33
  #include "src/core/lib/iomgr/sockaddr_utils.h"
34
34
  #include "src/core/lib/security/credentials/credentials.h"
35
35
  #include "src/core/lib/security/security_connector/security_connector.h"
36
- #include "src/core/lib/security/transport/target_authority_table.h"
37
- #include "src/core/lib/slice/slice_hash_table.h"
38
36
  #include "src/core/lib/slice/slice_internal.h"
39
37
  #include "src/core/lib/surface/api_trace.h"
40
38
  #include "src/core/lib/surface/channel.h"
39
+ #include "src/core/lib/transport/authority_override.h"
41
40
  #include "src/core/lib/uri/uri_parser.h"
42
41
 
43
42
  namespace grpc_core {
@@ -75,39 +74,16 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
75
74
  "channel args.");
76
75
  return nullptr;
77
76
  }
78
- // To which address are we connecting? By default, use the server URI.
79
- const grpc_arg* server_uri_arg =
80
- grpc_channel_args_find(args, GRPC_ARG_SERVER_URI);
81
- const char* server_uri_str = grpc_channel_arg_get_string(server_uri_arg);
82
- GPR_ASSERT(server_uri_str != nullptr);
83
- grpc_uri* server_uri =
84
- grpc_uri_parse(server_uri_str, true /* suppress errors */);
85
- GPR_ASSERT(server_uri != nullptr);
86
- const TargetAuthorityTable* target_authority_table =
87
- FindTargetAuthorityTableInArgs(args);
88
- grpc_core::UniquePtr<char> authority;
89
- if (target_authority_table != nullptr) {
90
- // Find the authority for the target.
91
- const char* target_uri_str =
92
- Subchannel::GetUriFromSubchannelAddressArg(args);
93
- grpc_uri* target_uri =
94
- grpc_uri_parse(target_uri_str, false /* suppress errors */);
95
- GPR_ASSERT(target_uri != nullptr);
96
- if (target_uri->path[0] != '\0') { // "path" may be empty
97
- const grpc_slice key = grpc_slice_from_static_string(
98
- target_uri->path[0] == '/' ? target_uri->path + 1
99
- : target_uri->path);
100
- const grpc_core::UniquePtr<char>* value =
101
- target_authority_table->Get(key);
102
- if (value != nullptr) authority.reset(gpr_strdup(value->get()));
103
- grpc_slice_unref_internal(key);
104
- }
105
- grpc_uri_destroy(target_uri);
106
- }
107
- // If the authority hasn't already been set (either because no target
108
- // authority table was present or because the target was not present
109
- // in the table), fall back to using the original server URI.
77
+ // 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
+ grpc_core::UniquePtr<char> authority(
82
+ gpr_strdup(FindAuthorityOverrideInArgs(args)));
110
83
  if (authority == nullptr) {
84
+ const char* server_uri_str =
85
+ grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
86
+ GPR_ASSERT(server_uri_str != nullptr);
111
87
  authority = ResolverRegistry::GetDefaultAuthority(server_uri_str);
112
88
  }
113
89
  grpc_arg args_to_add[2];
@@ -120,7 +96,6 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
120
96
  }
121
97
  grpc_channel_args* args_with_authority =
122
98
  grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
123
- grpc_uri_destroy(server_uri);
124
99
  // Create the security connector using the credentials and target name.
125
100
  grpc_channel_args* new_args_from_connector = nullptr;
126
101
  RefCountedPtr<grpc_channel_security_connector>
@@ -53,19 +53,19 @@
53
53
  namespace grpc_core {
54
54
  namespace {
55
55
 
56
- class Chttp2ServerListener : public ServerListenerInterface {
56
+ class Chttp2ServerListener : public Server::ListenerInterface {
57
57
  public:
58
- static grpc_error* Create(grpc_server* server, const char* addr,
58
+ static grpc_error* Create(Server* server, const char* addr,
59
59
  grpc_channel_args* args, int* port_num);
60
60
 
61
- static grpc_error* CreateWithAcceptor(grpc_server* server, const char* name,
61
+ static grpc_error* CreateWithAcceptor(Server* server, const char* name,
62
62
  grpc_channel_args* args);
63
63
 
64
64
  // Do not instantiate directly. Use one of the factory methods above.
65
- Chttp2ServerListener(grpc_server* server, grpc_channel_args* args);
65
+ Chttp2ServerListener(Server* server, grpc_channel_args* args);
66
66
  ~Chttp2ServerListener();
67
67
 
68
- void Start(grpc_server* server,
68
+ void Start(Server* server,
69
69
  const std::vector<grpc_pollset*>* pollsets) override;
70
70
 
71
71
  channelz::ListenSocketNode* channelz_listen_socket_node() const override {
@@ -113,10 +113,10 @@ class Chttp2ServerListener : public ServerListenerInterface {
113
113
 
114
114
  static void TcpServerShutdownComplete(void* arg, grpc_error* error);
115
115
 
116
- static void DestroyListener(grpc_server* /*server*/, void* arg,
116
+ static void DestroyListener(Server* /*server*/, void* arg,
117
117
  grpc_closure* destroy_done);
118
118
 
119
- grpc_server* const server_;
119
+ Server* const server_;
120
120
  grpc_channel_args* const args_;
121
121
  grpc_tcp_server* tcp_server_;
122
122
  Mutex mu_;
@@ -194,12 +194,10 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
194
194
  {
195
195
  MutexLock lock(&self->listener_->mu_);
196
196
  grpc_resource_user* resource_user =
197
- grpc_server_get_default_resource_user(self->listener_->server_);
197
+ self->listener_->server_->default_resource_user();
198
198
  if (error != GRPC_ERROR_NONE || self->listener_->shutdown_) {
199
199
  const char* error_str = grpc_error_string(error);
200
200
  gpr_log(GPR_DEBUG, "Handshaking failed: %s", error_str);
201
- grpc_resource_user* resource_user =
202
- grpc_server_get_default_resource_user(self->listener_->server_);
203
201
  if (resource_user != nullptr) {
204
202
  grpc_resource_user_free(resource_user,
205
203
  GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
@@ -224,10 +222,9 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
224
222
  if (args->endpoint != nullptr) {
225
223
  grpc_transport* transport = grpc_create_chttp2_transport(
226
224
  args->args, args->endpoint, false, resource_user);
227
- grpc_server_setup_transport(
228
- self->listener_->server_, transport, self->accepting_pollset_,
229
- args->args, grpc_chttp2_transport_get_socket_node(transport),
230
- resource_user);
225
+ self->listener_->server_->SetupTransport(
226
+ transport, self->accepting_pollset_, args->args,
227
+ grpc_chttp2_transport_get_socket_node(transport), resource_user);
231
228
  // Use notify_on_receive_settings callback to enforce the
232
229
  // handshake deadline.
233
230
  // Note: The reinterpret_cast<>s here are safe, because
@@ -270,7 +267,7 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
270
267
  // Chttp2ServerListener
271
268
  //
272
269
 
273
- grpc_error* Chttp2ServerListener::Create(grpc_server* server, const char* addr,
270
+ grpc_error* Chttp2ServerListener::Create(Server* server, const char* addr,
274
271
  grpc_channel_args* args,
275
272
  int* port_num) {
276
273
  std::vector<grpc_error*> error_list;
@@ -327,8 +324,7 @@ grpc_error* Chttp2ServerListener::Create(grpc_server* server, const char* addr,
327
324
  addr, absl::StrFormat("chttp2 listener %s", addr));
328
325
  }
329
326
  /* Register with the server only upon success */
330
- grpc_server_add_listener(server,
331
- OrphanablePtr<ServerListenerInterface>(listener));
327
+ server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
332
328
  return GRPC_ERROR_NONE;
333
329
  }();
334
330
  if (resolved != nullptr) {
@@ -352,7 +348,7 @@ grpc_error* Chttp2ServerListener::Create(grpc_server* server, const char* addr,
352
348
  return error;
353
349
  }
354
350
 
355
- grpc_error* Chttp2ServerListener::CreateWithAcceptor(grpc_server* server,
351
+ grpc_error* Chttp2ServerListener::CreateWithAcceptor(Server* server,
356
352
  const char* name,
357
353
  grpc_channel_args* args) {
358
354
  Chttp2ServerListener* listener = new Chttp2ServerListener(server, args);
@@ -366,12 +362,11 @@ grpc_error* Chttp2ServerListener::CreateWithAcceptor(grpc_server* server,
366
362
  TcpServerFdHandler** arg_val =
367
363
  grpc_channel_args_find_pointer<TcpServerFdHandler*>(args, name);
368
364
  *arg_val = grpc_tcp_server_create_fd_handler(listener->tcp_server_);
369
- grpc_server_add_listener(server,
370
- OrphanablePtr<ServerListenerInterface>(listener));
365
+ server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
371
366
  return GRPC_ERROR_NONE;
372
367
  }
373
368
 
374
- Chttp2ServerListener::Chttp2ServerListener(grpc_server* server,
369
+ Chttp2ServerListener::Chttp2ServerListener(Server* server,
375
370
  grpc_channel_args* args)
376
371
  : server_(server), args_(args) {
377
372
  GRPC_CLOSURE_INIT(&tcp_server_shutdown_complete_, TcpServerShutdownComplete,
@@ -383,7 +378,7 @@ Chttp2ServerListener::~Chttp2ServerListener() {
383
378
  }
384
379
 
385
380
  /* Server callback: start listening on our ports */
386
- void Chttp2ServerListener::Start(grpc_server* /*server*/,
381
+ void Chttp2ServerListener::Start(Server* /*server*/,
387
382
  const std::vector<grpc_pollset*>* pollsets) {
388
383
  {
389
384
  MutexLock lock(&mu_);
@@ -400,8 +395,7 @@ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
400
395
  RefCountedPtr<HandshakeManager> Chttp2ServerListener::CreateHandshakeManager() {
401
396
  MutexLock lock(&mu_);
402
397
  if (shutdown_) return nullptr;
403
- grpc_resource_user* resource_user =
404
- grpc_server_get_default_resource_user(server_);
398
+ grpc_resource_user* resource_user = server_->default_resource_user();
405
399
  if (resource_user != nullptr &&
406
400
  !grpc_resource_user_safe_alloc(resource_user,
407
401
  GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
@@ -475,7 +469,7 @@ void Chttp2ServerListener::Orphan() {
475
469
  // Chttp2ServerAddPort()
476
470
  //
477
471
 
478
- grpc_error* Chttp2ServerAddPort(grpc_server* server, const char* addr,
472
+ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
479
473
  grpc_channel_args* args, int* port_num) {
480
474
  if (strncmp(addr, "external:", 9) == 0) {
481
475
  return grpc_core::Chttp2ServerListener::CreateWithAcceptor(server, addr,
@@ -24,12 +24,13 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
26
  #include "src/core/lib/iomgr/error.h"
27
+ #include "src/core/lib/surface/server.h"
27
28
 
28
29
  namespace grpc_core {
29
30
 
30
31
  /// Adds a port to \a server. Sets \a port_num to the port number.
31
32
  /// Takes ownership of \a args.
32
- grpc_error* Chttp2ServerAddPort(grpc_server* server, const char* addr,
33
+ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
33
34
  grpc_channel_args* args, int* port_num);
34
35
 
35
36
  } // namespace grpc_core
@@ -33,8 +33,8 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
33
33
  GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
34
34
  (server, addr));
35
35
  grpc_error* err = grpc_core::Chttp2ServerAddPort(
36
- server, addr,
37
- grpc_channel_args_copy(grpc_server_get_channel_args(server)), &port_num);
36
+ server->core_server.get(), addr,
37
+ grpc_channel_args_copy(server->core_server->channel_args()), &port_num);
38
38
  if (err != GRPC_ERROR_NONE) {
39
39
  const char* msg = grpc_error_string(err);
40
40
  gpr_log(GPR_ERROR, "%s", msg);
@@ -41,21 +41,21 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
41
41
  GPR_ASSERT(reserved == nullptr);
42
42
 
43
43
  grpc_core::ExecCtx exec_ctx;
44
+ grpc_core::Server* core_server = server->core_server.get();
44
45
 
46
+ const grpc_channel_args* server_args = core_server->channel_args();
45
47
  std::string name = absl::StrCat("fd:", fd);
46
- grpc_endpoint* server_endpoint =
47
- grpc_tcp_create(grpc_fd_create(fd, name.c_str(), true),
48
- grpc_server_get_channel_args(server), name.c_str());
48
+ grpc_endpoint* server_endpoint = grpc_tcp_create(
49
+ grpc_fd_create(fd, name.c_str(), true), server_args, name.c_str());
49
50
 
50
- const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
51
51
  grpc_transport* transport = grpc_create_chttp2_transport(
52
52
  server_args, server_endpoint, false /* is_client */);
53
53
 
54
- for (grpc_pollset* pollset : grpc_server_get_pollsets(server)) {
54
+ for (grpc_pollset* pollset : core_server->pollsets()) {
55
55
  grpc_endpoint_add_to_pollset(server_endpoint, pollset);
56
56
  }
57
57
 
58
- grpc_server_setup_transport(server, transport, nullptr, server_args, nullptr);
58
+ core_server->SetupTransport(transport, nullptr, server_args, nullptr);
59
59
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
60
60
  }
61
61