grpc 1.41.0 → 1.42.0.pre1

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

Potentially problematic release.


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

Files changed (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +83 -70
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -34,13 +32,13 @@
34
32
  #include "src/core/ext/filters/client_channel/client_channel.h"
35
33
  #include "src/core/ext/filters/client_channel/health/health_check_client.h"
36
34
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
37
- #include "src/core/ext/filters/client_channel/service_config.h"
38
35
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
39
36
  #include "src/core/lib/address_utils/parse_address.h"
40
37
  #include "src/core/lib/address_utils/sockaddr_utils.h"
41
38
  #include "src/core/lib/backoff/backoff.h"
42
39
  #include "src/core/lib/channel/channel_args.h"
43
40
  #include "src/core/lib/channel/connected_channel.h"
41
+ #include "src/core/lib/config/core_configuration.h"
44
42
  #include "src/core/lib/debug/stats.h"
45
43
  #include "src/core/lib/gpr/alloc.h"
46
44
  #include "src/core/lib/gprpp/debug_location.h"
@@ -50,7 +48,6 @@
50
48
  #include "src/core/lib/profiling/timers.h"
51
49
  #include "src/core/lib/slice/slice_internal.h"
52
50
  #include "src/core/lib/surface/channel.h"
53
- #include "src/core/lib/surface/channel_init.h"
54
51
  #include "src/core/lib/transport/connectivity_state.h"
55
52
  #include "src/core/lib/transport/error_utils.h"
56
53
  #include "src/core/lib/transport/status_metadata.h"
@@ -255,9 +252,9 @@ void GetCallStatus(grpc_status_code* status, grpc_millis deadline,
255
252
  if (error != GRPC_ERROR_NONE) {
256
253
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
257
254
  } else {
258
- if (md_batch->idx.named.grpc_status != nullptr) {
255
+ if (md_batch->legacy_index()->named.grpc_status != nullptr) {
259
256
  *status = grpc_get_status_code_from_metadata(
260
- md_batch->idx.named.grpc_status->md);
257
+ md_batch->legacy_index()->named.grpc_status->md);
261
258
  } else {
262
259
  *status = GRPC_STATUS_UNKNOWN;
263
260
  }
@@ -319,11 +316,12 @@ class Subchannel::ConnectedSubchannelStateWatcher
319
316
  case GRPC_CHANNEL_TRANSIENT_FAILURE:
320
317
  case GRPC_CHANNEL_SHUTDOWN: {
321
318
  if (!c->disconnected_ && c->connected_subchannel_ != nullptr) {
322
- if (grpc_trace_subchannel.enabled()) {
319
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
323
320
  gpr_log(GPR_INFO,
324
- "Connected subchannel %p of subchannel %p has gone into "
321
+ "subchannel %p %s: Connected subchannel %p has gone into "
325
322
  "%s. Attempting to reconnect.",
326
- c->connected_subchannel_.get(), c,
323
+ c, c->key_.ToString().c_str(),
324
+ c->connected_subchannel_.get(),
327
325
  ConnectivityStateName(new_state));
328
326
  }
329
327
  c->connected_subchannel_.reset();
@@ -363,15 +361,9 @@ class Subchannel::AsyncWatcherNotifierLocked {
363
361
  public:
364
362
  AsyncWatcherNotifierLocked(
365
363
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher,
366
- Subchannel* subchannel, grpc_connectivity_state state,
367
- const absl::Status& status)
364
+ grpc_connectivity_state state, const absl::Status& status)
368
365
  : watcher_(std::move(watcher)) {
369
- RefCountedPtr<ConnectedSubchannel> connected_subchannel;
370
- if (state == GRPC_CHANNEL_READY) {
371
- connected_subchannel = subchannel->connected_subchannel_;
372
- }
373
- watcher_->PushConnectivityStateChange(
374
- {state, status, std::move(connected_subchannel)});
366
+ watcher_->PushConnectivityStateChange({state, status});
375
367
  ExecCtx::Run(DEBUG_LOCATION,
376
368
  GRPC_CLOSURE_INIT(
377
369
  &closure_,
@@ -405,10 +397,9 @@ void Subchannel::ConnectivityStateWatcherList::RemoveWatcherLocked(
405
397
  }
406
398
 
407
399
  void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
408
- Subchannel* subchannel, grpc_connectivity_state state,
409
- const absl::Status& status) {
400
+ grpc_connectivity_state state, const absl::Status& status) {
410
401
  for (const auto& p : watchers_) {
411
- new AsyncWatcherNotifierLocked(p.second, subchannel, state, status);
402
+ new AsyncWatcherNotifierLocked(p.second, state, status);
412
403
  }
413
404
  }
414
405
 
@@ -446,8 +437,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
446
437
  grpc_connectivity_state initial_state,
447
438
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
448
439
  if (state_ != initial_state) {
449
- new AsyncWatcherNotifierLocked(watcher, subchannel_.get(), state_,
450
- status_);
440
+ new AsyncWatcherNotifierLocked(watcher, state_, status_);
451
441
  }
452
442
  watcher_list_.AddWatcherLocked(std::move(watcher));
453
443
  }
@@ -469,14 +459,14 @@ class Subchannel::HealthWatcherMap::HealthWatcher
469
459
  if (state_ != GRPC_CHANNEL_CONNECTING) {
470
460
  state_ = GRPC_CHANNEL_CONNECTING;
471
461
  status_ = status;
472
- watcher_list_.NotifyLocked(subchannel_.get(), state_, status);
462
+ watcher_list_.NotifyLocked(state_, status);
473
463
  }
474
464
  // If we've become connected, start health checking.
475
465
  StartHealthCheckingLocked();
476
466
  } else {
477
467
  state_ = state;
478
468
  status_ = status;
479
- watcher_list_.NotifyLocked(subchannel_.get(), state_, status);
469
+ watcher_list_.NotifyLocked(state_, status);
480
470
  // We're not connected, so stop health checking.
481
471
  health_check_client_.reset();
482
472
  }
@@ -495,7 +485,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
495
485
  if (new_state != GRPC_CHANNEL_SHUTDOWN && health_check_client_ != nullptr) {
496
486
  state_ = new_state;
497
487
  status_ = status;
498
- watcher_list_.NotifyLocked(subchannel_.get(), new_state, status);
488
+ watcher_list_.NotifyLocked(new_state, status);
499
489
  }
500
490
  }
501
491
 
@@ -655,42 +645,39 @@ Subchannel::Subchannel(SubchannelKey key,
655
645
  GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel_refcount) ? "Subchannel"
656
646
  : nullptr),
657
647
  key_(std::move(key)),
648
+ pollset_set_(grpc_pollset_set_create()),
658
649
  connector_(std::move(connector)),
659
650
  backoff_(ParseArgsForBackoffValues(args, &min_connect_timeout_ms_)) {
660
651
  GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
661
- pollset_set_ = grpc_pollset_set_create();
662
- grpc_resolved_address* addr =
663
- static_cast<grpc_resolved_address*>(gpr_malloc(sizeof(*addr)));
664
- GetAddressFromSubchannelAddressArg(args, addr);
652
+ GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
653
+ grpc_schedule_on_exec_ctx);
654
+ // Check proxy mapper to determine address to connect to and channel
655
+ // args to use.
656
+ address_for_connect_ = key_.address();
665
657
  grpc_resolved_address* new_address = nullptr;
666
658
  grpc_channel_args* new_args = nullptr;
667
- if (ProxyMapperRegistry::MapAddress(*addr, args, &new_address, &new_args)) {
659
+ if (ProxyMapperRegistry::MapAddress(address_for_connect_, args, &new_address,
660
+ &new_args)) {
668
661
  GPR_ASSERT(new_address != nullptr);
669
- gpr_free(addr);
670
- addr = new_address;
662
+ address_for_connect_ = *new_address;
663
+ gpr_free(new_address);
671
664
  }
672
- static const char* keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
673
- grpc_arg new_arg = CreateSubchannelAddressArg(addr);
674
- gpr_free(addr);
675
- args_ = grpc_channel_args_copy_and_add_and_remove(
676
- new_args != nullptr ? new_args : args, keys_to_remove,
677
- GPR_ARRAY_SIZE(keys_to_remove), &new_arg, 1);
678
- gpr_free(new_arg.value.string);
679
- if (new_args != nullptr) grpc_channel_args_destroy(new_args);
680
- GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
681
- grpc_schedule_on_exec_ctx);
682
- const grpc_arg* arg = grpc_channel_args_find(args_, GRPC_ARG_ENABLE_CHANNELZ);
683
- const bool channelz_enabled =
684
- grpc_channel_arg_get_bool(arg, GRPC_ENABLE_CHANNELZ_DEFAULT);
685
- arg = grpc_channel_args_find(
686
- args_, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE);
687
- const grpc_integer_options options = {
688
- GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX};
689
- size_t channel_tracer_max_memory =
690
- static_cast<size_t>(grpc_channel_arg_get_integer(arg, options));
665
+ if (new_args != nullptr) {
666
+ args_ = new_args;
667
+ } else {
668
+ args_ = grpc_channel_args_copy(args);
669
+ }
670
+ // Initialize channelz.
671
+ const bool channelz_enabled = grpc_channel_args_find_bool(
672
+ args_, GRPC_ARG_ENABLE_CHANNELZ, GRPC_ENABLE_CHANNELZ_DEFAULT);
691
673
  if (channelz_enabled) {
674
+ const size_t channel_tracer_max_memory =
675
+ static_cast<size_t>(grpc_channel_args_find_integer(
676
+ args_, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
677
+ {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0,
678
+ INT_MAX}));
692
679
  channelz_node_ = MakeRefCounted<channelz::SubchannelNode>(
693
- GetTargetAddress(), channel_tracer_max_memory);
680
+ grpc_sockaddr_to_uri(&key_.address()), channel_tracer_max_memory);
694
681
  channelz_node_->AddTraceEvent(
695
682
  channelz::ChannelTrace::Severity::Info,
696
683
  grpc_slice_from_static_string("subchannel created"));
@@ -711,8 +698,8 @@ Subchannel::~Subchannel() {
711
698
 
712
699
  RefCountedPtr<Subchannel> Subchannel::Create(
713
700
  OrphanablePtr<SubchannelConnector> connector,
714
- const grpc_channel_args* args) {
715
- SubchannelKey key(args);
701
+ const grpc_resolved_address& address, const grpc_channel_args* args) {
702
+ SubchannelKey key(address, args);
716
703
  SubchannelPoolInterface* subchannel_pool =
717
704
  SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(args);
718
705
  GPR_ASSERT(subchannel_pool != nullptr);
@@ -736,9 +723,9 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
736
723
  // Only update the value if the new keepalive time is larger.
737
724
  if (new_keepalive_time > keepalive_time_) {
738
725
  keepalive_time_ = new_keepalive_time;
739
- if (grpc_trace_subchannel.enabled()) {
740
- gpr_log(GPR_INFO, "Subchannel=%p: Throttling keepalive time to %d", this,
741
- new_keepalive_time);
726
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
727
+ gpr_log(GPR_INFO, "subchannel %p %s: throttling keepalive time to %d",
728
+ this, key_.ToString().c_str(), new_keepalive_time);
742
729
  }
743
730
  const grpc_arg arg_to_add = grpc_channel_arg_integer_create(
744
731
  const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS), new_keepalive_time);
@@ -750,33 +737,18 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
750
737
  }
751
738
  }
752
739
 
753
- const char* Subchannel::GetTargetAddress() {
754
- const grpc_arg* addr_arg =
755
- grpc_channel_args_find(args_, GRPC_ARG_SUBCHANNEL_ADDRESS);
756
- const char* addr_str = grpc_channel_arg_get_string(addr_arg);
757
- GPR_ASSERT(addr_str != nullptr); // Should have been set by LB policy.
758
- return addr_str;
759
- }
760
-
761
740
  channelz::SubchannelNode* Subchannel::channelz_node() {
762
741
  return channelz_node_.get();
763
742
  }
764
743
 
765
744
  grpc_connectivity_state Subchannel::CheckConnectivityState(
766
- const absl::optional<std::string>& health_check_service_name,
767
- RefCountedPtr<ConnectedSubchannel>* connected_subchannel) {
745
+ const absl::optional<std::string>& health_check_service_name) {
768
746
  MutexLock lock(&mu_);
769
- grpc_connectivity_state state;
770
- if (!health_check_service_name.has_value()) {
771
- state = state_;
772
- } else {
773
- state = health_watcher_map_.CheckConnectivityStateLocked(
747
+ if (health_check_service_name.has_value()) {
748
+ return health_watcher_map_.CheckConnectivityStateLocked(
774
749
  this, *health_check_service_name);
775
750
  }
776
- if (connected_subchannel != nullptr && state == GRPC_CHANNEL_READY) {
777
- *connected_subchannel = connected_subchannel_;
778
- }
779
- return state;
751
+ return state_;
780
752
  }
781
753
 
782
754
  void Subchannel::WatchConnectivityState(
@@ -790,7 +762,7 @@ void Subchannel::WatchConnectivityState(
790
762
  }
791
763
  if (!health_check_service_name.has_value()) {
792
764
  if (state_ != initial_state) {
793
- new AsyncWatcherNotifierLocked(watcher, this, state_, status_);
765
+ new AsyncWatcherNotifierLocked(watcher, state_, status_);
794
766
  }
795
767
  watcher_list_.AddWatcherLocked(std::move(watcher));
796
768
  } else {
@@ -848,44 +820,6 @@ void Subchannel::Orphan() {
848
820
  health_watcher_map_.ShutdownLocked();
849
821
  }
850
822
 
851
- grpc_arg Subchannel::CreateSubchannelAddressArg(
852
- const grpc_resolved_address* addr) {
853
- return grpc_channel_arg_string_create(
854
- const_cast<char*>(GRPC_ARG_SUBCHANNEL_ADDRESS),
855
- gpr_strdup(addr->len > 0 ? grpc_sockaddr_to_uri(addr).c_str() : ""));
856
- }
857
-
858
- const char* Subchannel::GetUriFromSubchannelAddressArg(
859
- const grpc_channel_args* args) {
860
- const grpc_arg* addr_arg =
861
- grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_ADDRESS);
862
- const char* addr_str = grpc_channel_arg_get_string(addr_arg);
863
- GPR_ASSERT(addr_str != nullptr); // Should have been set by LB policy.
864
- return addr_str;
865
- }
866
-
867
- namespace {
868
-
869
- void UriToSockaddr(const char* uri_str, grpc_resolved_address* addr) {
870
- absl::StatusOr<URI> uri = URI::Parse(uri_str);
871
- if (!uri.ok()) {
872
- gpr_log(GPR_ERROR, "%s", uri.status().ToString().c_str());
873
- GPR_ASSERT(uri.ok());
874
- }
875
- if (!grpc_parse_uri(*uri, addr)) memset(addr, 0, sizeof(*addr));
876
- }
877
-
878
- } // namespace
879
-
880
- void Subchannel::GetAddressFromSubchannelAddressArg(
881
- const grpc_channel_args* args, grpc_resolved_address* addr) {
882
- const char* addr_uri_str = GetUriFromSubchannelAddressArg(args);
883
- memset(addr, 0, sizeof(*addr));
884
- if (*addr_uri_str != '\0') {
885
- UriToSockaddr(addr_uri_str, addr);
886
- }
887
- }
888
-
889
823
  namespace {
890
824
 
891
825
  // Returns a string indicating the subchannel's connectivity state change to
@@ -922,7 +856,7 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
922
856
  SubchannelConnectivityStateChangeString(state)));
923
857
  }
924
858
  // Notify non-health watchers.
925
- watcher_list_.NotifyLocked(this, state, status);
859
+ watcher_list_.NotifyLocked(state, status);
926
860
  // Notify health watchers.
927
861
  health_watcher_map_.NotifyLocked(state, status);
928
862
  }
@@ -952,10 +886,11 @@ void Subchannel::MaybeStartConnectingLocked() {
952
886
  const grpc_millis time_til_next =
953
887
  next_attempt_deadline_ - ExecCtx::Get()->Now();
954
888
  if (time_til_next <= 0) {
955
- gpr_log(GPR_INFO, "Subchannel %p: Retry immediately", this);
889
+ gpr_log(GPR_INFO, "subchannel %p %s: Retry immediately", this,
890
+ key_.ToString().c_str());
956
891
  } else {
957
- gpr_log(GPR_INFO, "Subchannel %p: Retry in %" PRId64 " milliseconds",
958
- this, time_til_next);
892
+ gpr_log(GPR_INFO, "subchannel %p %s: Retry in %" PRId64 " milliseconds",
893
+ this, key_.ToString().c_str(), time_til_next);
959
894
  }
960
895
  GRPC_CLOSURE_INIT(&on_retry_alarm_, OnRetryAlarm, this,
961
896
  grpc_schedule_on_exec_ctx);
@@ -974,10 +909,12 @@ void Subchannel::OnRetryAlarm(void* arg, grpc_error_handle error) {
974
909
  c->retry_immediately_ = false;
975
910
  error = GRPC_ERROR_NONE;
976
911
  } else {
977
- GRPC_ERROR_REF(error);
912
+ (void)GRPC_ERROR_REF(error);
978
913
  }
979
914
  if (error == GRPC_ERROR_NONE) {
980
- gpr_log(GPR_INFO, "Failed to connect to channel, retrying");
915
+ gpr_log(GPR_INFO,
916
+ "subchannel %p %s: failed to connect to channel, retrying", c.get(),
917
+ c->key_.ToString().c_str());
981
918
  c->ContinueConnectingLocked();
982
919
  // Still connecting, keep ref around. Note that this stolen ref won't
983
920
  // be dropped without first acquiring c->mu_.
@@ -988,6 +925,7 @@ void Subchannel::OnRetryAlarm(void* arg, grpc_error_handle error) {
988
925
 
989
926
  void Subchannel::ContinueConnectingLocked() {
990
927
  SubchannelConnector::Args args;
928
+ args.address = &address_for_connect_;
991
929
  args.interested_parties = pollset_set_;
992
930
  const grpc_millis min_deadline =
993
931
  min_connect_timeout_ms_ + ExecCtx::Get()->Now();
@@ -1009,8 +947,8 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error_handle error) {
1009
947
  c->PublishTransportLocked()) {
1010
948
  // Do nothing, transport was published.
1011
949
  } else if (!c->disconnected_) {
1012
- gpr_log(GPR_INFO, "Connect failed: %s",
1013
- grpc_error_std_string(error).c_str());
950
+ gpr_log(GPR_INFO, "subchannel %p %s: connect failed: %s", c.get(),
951
+ c->key_.ToString().c_str(), grpc_error_std_string(error).c_str());
1014
952
  c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
1015
953
  grpc_error_to_absl_status(error));
1016
954
  }
@@ -1036,7 +974,8 @@ bool Subchannel::PublishTransportLocked() {
1036
974
  builder, connecting_result_.channel_args);
1037
975
  grpc_channel_stack_builder_set_transport(builder,
1038
976
  connecting_result_.transport);
1039
- if (!grpc_channel_init_create_stack(builder, GRPC_CLIENT_SUBCHANNEL)) {
977
+ if (!CoreConfiguration::Get().channel_init().CreateStack(
978
+ builder, GRPC_CLIENT_SUBCHANNEL)) {
1040
979
  grpc_channel_stack_builder_destroy(builder);
1041
980
  return false;
1042
981
  }
@@ -1046,8 +985,9 @@ bool Subchannel::PublishTransportLocked() {
1046
985
  reinterpret_cast<void**>(&stk));
1047
986
  if (error != GRPC_ERROR_NONE) {
1048
987
  grpc_transport_destroy(connecting_result_.transport);
1049
- gpr_log(GPR_ERROR, "error initializing subchannel stack: %s",
1050
- grpc_error_std_string(error).c_str());
988
+ gpr_log(GPR_ERROR,
989
+ "subchannel %p %s: error initializing subchannel stack: %s", this,
990
+ key_.ToString().c_str(), grpc_error_std_string(error).c_str());
1051
991
  GRPC_ERROR_UNREF(error);
1052
992
  return false;
1053
993
  }
@@ -1062,8 +1002,10 @@ bool Subchannel::PublishTransportLocked() {
1062
1002
  // Publish.
1063
1003
  connected_subchannel_.reset(
1064
1004
  new ConnectedSubchannel(stk, args_, channelz_node_));
1065
- gpr_log(GPR_INFO, "New connected subchannel at %p for subchannel %p",
1066
- connected_subchannel_.get(), this);
1005
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
1006
+ gpr_log(GPR_INFO, "subchannel %p %s: new connected subchannel at %p", this,
1007
+ key_.ToString().c_str(), connected_subchannel_.get());
1008
+ }
1067
1009
  if (channelz_node_ != nullptr) {
1068
1010
  channelz_node_->SetChildSocket(std::move(socket));
1069
1011
  }
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
@@ -39,9 +37,6 @@
39
37
  #include "src/core/lib/transport/connectivity_state.h"
40
38
  #include "src/core/lib/transport/metadata.h"
41
39
 
42
- // Channel arg containing a URI indicating the address to connect to.
43
- #define GRPC_ARG_SUBCHANNEL_ADDRESS "grpc.subchannel_address"
44
-
45
40
  namespace grpc_core {
46
41
 
47
42
  class SubchannelCall;
@@ -153,7 +148,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
153
148
  struct ConnectivityStateChange {
154
149
  grpc_connectivity_state state;
155
150
  absl::Status status;
156
- RefCountedPtr<ConnectedSubchannel> connected_subchannel;
157
151
  };
158
152
 
159
153
  ~ConnectivityStateWatcherInterface() override = default;
@@ -190,10 +184,10 @@ class Subchannel : public DualRefCounted<Subchannel> {
190
184
  ABSL_GUARDED_BY(&mu_);
191
185
  };
192
186
 
193
- // Creates a subchannel given \a connector and \a args.
187
+ // Creates a subchannel.
194
188
  static RefCountedPtr<Subchannel> Create(
195
189
  OrphanablePtr<SubchannelConnector> connector,
196
- const grpc_channel_args* args);
190
+ const grpc_resolved_address& address, const grpc_channel_args* args);
197
191
 
198
192
  // The ctor and dtor are not intended to use directly.
199
193
  Subchannel(SubchannelKey key, OrphanablePtr<SubchannelConnector> connector,
@@ -205,10 +199,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
205
199
  // will have an affect when the subchannel creates a new ConnectedSubchannel.
206
200
  void ThrottleKeepaliveTime(int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
207
201
 
208
- // Gets the string representing the subchannel address.
209
- // Caller doesn't take ownership.
210
- const char* GetTargetAddress();
211
-
212
202
  const grpc_channel_args* channel_args() const { return args_; }
213
203
 
214
204
  channelz::SubchannelNode* channelz_node();
@@ -217,10 +207,8 @@ class Subchannel : public DualRefCounted<Subchannel> {
217
207
  // If health_check_service_name is non-null, the returned connectivity
218
208
  // state will be based on the state reported by the backend for that
219
209
  // service name.
220
- // If the return value is GRPC_CHANNEL_READY, also sets *connected_subchannel.
221
210
  grpc_connectivity_state CheckConnectivityState(
222
- const absl::optional<std::string>& health_check_service_name,
223
- RefCountedPtr<ConnectedSubchannel>* connected_subchannel)
211
+ const absl::optional<std::string>& health_check_service_name)
224
212
  ABSL_LOCKS_EXCLUDED(mu_);
225
213
 
226
214
  // Starts watching the subchannel's connectivity state.
@@ -243,31 +231,21 @@ class Subchannel : public DualRefCounted<Subchannel> {
243
231
  const absl::optional<std::string>& health_check_service_name,
244
232
  ConnectivityStateWatcherInterface* watcher) ABSL_LOCKS_EXCLUDED(mu_);
245
233
 
234
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel()
235
+ ABSL_LOCKS_EXCLUDED(mu_) {
236
+ MutexLock lock(&mu_);
237
+ return connected_subchannel_;
238
+ }
239
+
246
240
  // Attempt to connect to the backend. Has no effect if already connected.
247
241
  void AttemptToConnect() ABSL_LOCKS_EXCLUDED(mu_);
248
242
 
249
243
  // Resets the connection backoff of the subchannel.
250
- // TODO(roth): Move connection backoff out of subchannels and up into LB
251
- // policy code (probably by adding a SubchannelGroup between
252
- // SubchannelList and SubchannelData), at which point this method can
253
- // go away.
254
244
  void ResetBackoff() ABSL_LOCKS_EXCLUDED(mu_);
255
245
 
256
246
  // Tears down any existing connection, and arranges for destruction
257
247
  void Orphan() override ABSL_LOCKS_EXCLUDED(mu_);
258
248
 
259
- // Returns a new channel arg encoding the subchannel address as a URI
260
- // string. Caller is responsible for freeing the string.
261
- static grpc_arg CreateSubchannelAddressArg(const grpc_resolved_address* addr);
262
-
263
- // Returns the URI string from the subchannel address arg in \a args.
264
- static const char* GetUriFromSubchannelAddressArg(
265
- const grpc_channel_args* args);
266
-
267
- // Sets \a addr from the subchannel address arg in \a args.
268
- static void GetAddressFromSubchannelAddressArg(const grpc_channel_args* args,
269
- grpc_resolved_address* addr);
270
-
271
249
  private:
272
250
  // A linked list of ConnectivityStateWatcherInterfaces that are monitoring
273
251
  // the subchannel's state.
@@ -280,7 +258,7 @@ class Subchannel : public DualRefCounted<Subchannel> {
280
258
  void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
281
259
 
282
260
  // Notifies all watchers in the list about a change to state.
283
- void NotifyLocked(Subchannel* subchannel, grpc_connectivity_state state,
261
+ void NotifyLocked(grpc_connectivity_state state,
284
262
  const absl::Status& status);
285
263
 
286
264
  void Clear() { watchers_.clear(); }
@@ -350,9 +328,11 @@ class Subchannel : public DualRefCounted<Subchannel> {
350
328
 
351
329
  // The subchannel pool this subchannel is in.
352
330
  RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
353
- // TODO(juanlishen): Consider using args_ as key_ directly.
354
331
  // Subchannel key that identifies this subchannel in the subchannel pool.
355
332
  const SubchannelKey key_;
333
+ // Actual address to connect to. May be different than the address in
334
+ // key_ if overridden by proxy mapper.
335
+ grpc_resolved_address address_for_connect_;
356
336
  // Channel args.
357
337
  grpc_channel_args* args_;
358
338
  // pollset_set tracking who's interested in a connection being setup.
@@ -399,4 +379,4 @@ class Subchannel : public DualRefCounted<Subchannel> {
399
379
 
400
380
  } // namespace grpc_core
401
381
 
402
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H */
382
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
@@ -20,10 +20,11 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
22
22
 
23
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
23
24
  #include "src/core/lib/gpr/useful.h"
24
25
 
25
26
  // The subchannel pool to reuse subchannels.
26
- #define GRPC_ARG_SUBCHANNEL_POOL "grpc.subchannel_pool"
27
+ #define GRPC_ARG_SUBCHANNEL_POOL "grpc.internal.subchannel_pool"
27
28
  // The subchannel key ID that is only used in test to make each key unique.
28
29
  #define GRPC_ARG_SUBCHANNEL_KEY_TEST_ONLY_ID "grpc.subchannel_key_test_only_id"
29
30
 
@@ -31,8 +32,9 @@ namespace grpc_core {
31
32
 
32
33
  TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
33
34
 
34
- SubchannelKey::SubchannelKey(const grpc_channel_args* args) {
35
- Init(args, grpc_channel_args_normalize);
35
+ SubchannelKey::SubchannelKey(const grpc_resolved_address& address,
36
+ const grpc_channel_args* args) {
37
+ Init(address, args, grpc_channel_args_normalize);
36
38
  }
37
39
 
38
40
  SubchannelKey::~SubchannelKey() {
@@ -40,7 +42,7 @@ SubchannelKey::~SubchannelKey() {
40
42
  }
41
43
 
42
44
  SubchannelKey::SubchannelKey(const SubchannelKey& other) {
43
- Init(other.args_, grpc_channel_args_copy);
45
+ Init(other.address_, other.args_, grpc_channel_args_copy);
44
46
  }
45
47
 
46
48
  SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
@@ -48,31 +50,44 @@ SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
48
50
  return *this;
49
51
  }
50
52
  grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
51
- Init(other.args_, grpc_channel_args_copy);
53
+ Init(other.address_, other.args_, grpc_channel_args_copy);
52
54
  return *this;
53
55
  }
54
56
 
55
57
  SubchannelKey::SubchannelKey(SubchannelKey&& other) noexcept {
58
+ address_ = other.address_;
56
59
  args_ = other.args_;
57
60
  other.args_ = nullptr;
58
61
  }
59
62
 
60
63
  SubchannelKey& SubchannelKey::operator=(SubchannelKey&& other) noexcept {
64
+ address_ = other.address_;
61
65
  args_ = other.args_;
62
66
  other.args_ = nullptr;
63
67
  return *this;
64
68
  }
65
69
 
66
70
  bool SubchannelKey::operator<(const SubchannelKey& other) const {
71
+ if (address_.len < other.address_.len) return true;
72
+ if (address_.len > other.address_.len) return false;
73
+ int r = memcmp(address_.addr, other.address_.addr, address_.len);
74
+ if (r < 0) return true;
75
+ if (r > 0) return false;
67
76
  return grpc_channel_args_compare(args_, other.args_) < 0;
68
77
  }
69
78
 
70
79
  void SubchannelKey::Init(
71
- const grpc_channel_args* args,
80
+ const grpc_resolved_address& address, const grpc_channel_args* args,
72
81
  grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
82
+ address_ = address;
73
83
  args_ = copy_channel_args(args);
74
84
  }
75
85
 
86
+ std::string SubchannelKey::ToString() const {
87
+ return absl::StrCat("{address=", grpc_sockaddr_to_uri(&address_),
88
+ ", args=", grpc_channel_args_string(args_), "}");
89
+ }
90
+
76
91
  namespace {
77
92
 
78
93
  void* arg_copy(void* p) {
@@ -86,7 +101,7 @@ void arg_destroy(void* p) {
86
101
  subchannel_pool->Unref();
87
102
  }
88
103
 
89
- int arg_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
104
+ int arg_cmp(void* a, void* b) { return QsortCompare(a, b); }
90
105
 
91
106
  const grpc_arg_pointer_vtable subchannel_pool_arg_vtable = {
92
107
  arg_copy, arg_destroy, arg_cmp};