grpc 1.41.1 → 1.42.0.pre1

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

Potentially problematic release.


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

Files changed (416) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +55 -43
  3. data/include/grpc/event_engine/event_engine.h +82 -42
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  5. data/include/grpc/event_engine/memory_allocator.h +210 -0
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/grpc_security.h +18 -0
  8. data/include/grpc/grpc_security_constants.h +1 -0
  9. data/include/grpc/impl/codegen/port_platform.h +7 -0
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  11. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  12. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  13. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  14. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  18. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  20. data/src/core/ext/filters/client_channel/connector.h +18 -18
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  42. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  44. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  49. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  52. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  59. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  60. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  62. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  63. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  66. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  67. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  68. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  74. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  76. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  77. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  79. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  81. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  82. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  84. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  85. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  87. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  88. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  89. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  90. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  91. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  92. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  93. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  94. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  98. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  99. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  107. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  109. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  110. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  112. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  121. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  123. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  125. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  127. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  128. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  130. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  131. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  138. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  139. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  140. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  142. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  146. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  147. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  148. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  153. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  155. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  161. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  163. data/src/core/ext/xds/xds_api.cc +325 -362
  164. data/src/core/ext/xds/xds_api.h +134 -82
  165. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  166. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  167. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  168. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  169. data/src/core/ext/xds/xds_client.cc +527 -314
  170. data/src/core/ext/xds/xds_client.h +42 -37
  171. data/src/core/ext/xds/xds_client_stats.h +1 -1
  172. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  173. data/src/core/lib/address_utils/parse_address.cc +2 -0
  174. data/src/core/lib/avl/avl.cc +5 -5
  175. data/src/core/lib/backoff/backoff.cc +1 -1
  176. data/src/core/lib/channel/channel_args.cc +24 -6
  177. data/src/core/lib/channel/channel_args.h +9 -0
  178. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  179. data/src/core/lib/channel/channel_trace.cc +1 -1
  180. data/src/core/lib/channel/channel_trace.h +1 -1
  181. data/src/core/lib/channel/channelz.cc +3 -3
  182. data/src/core/lib/channel/channelz.h +2 -2
  183. data/src/core/lib/channel/channelz_registry.cc +1 -1
  184. data/src/core/lib/channel/channelz_registry.h +1 -1
  185. data/src/core/lib/channel/connected_channel.cc +1 -3
  186. data/src/core/lib/channel/connected_channel.h +1 -2
  187. data/src/core/lib/compression/compression.cc +2 -2
  188. data/src/core/lib/compression/compression_args.cc +6 -4
  189. data/src/core/lib/compression/compression_internal.cc +2 -2
  190. data/src/core/lib/compression/compression_internal.h +1 -1
  191. data/src/core/lib/config/core_configuration.cc +44 -2
  192. data/src/core/lib/config/core_configuration.h +39 -1
  193. data/src/core/lib/debug/stats.cc +1 -1
  194. data/src/core/lib/debug/stats_data.cc +13 -13
  195. data/src/core/lib/gpr/atm.cc +1 -1
  196. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  197. data/src/core/lib/gpr/string.cc +2 -2
  198. data/src/core/lib/gpr/tls.h +1 -1
  199. data/src/core/lib/gpr/useful.h +79 -32
  200. data/src/core/lib/gprpp/arena.h +10 -0
  201. data/src/core/lib/gprpp/bitset.h +38 -16
  202. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  203. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  204. data/src/core/lib/gprpp/match.h +1 -1
  205. data/src/core/lib/gprpp/memory.h +6 -0
  206. data/src/core/lib/gprpp/overload.h +1 -1
  207. data/src/core/lib/gprpp/status_helper.cc +23 -3
  208. data/src/core/lib/gprpp/status_helper.h +12 -1
  209. data/src/core/lib/gprpp/table.h +411 -0
  210. data/src/core/lib/http/httpcli.cc +200 -182
  211. data/src/core/lib/http/parser.cc +2 -2
  212. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  213. data/src/core/lib/iomgr/combiner.cc +6 -21
  214. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  215. data/src/core/lib/iomgr/error.cc +113 -52
  216. data/src/core/lib/iomgr/error.h +50 -9
  217. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  218. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  219. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  220. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  221. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  222. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  223. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  224. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  225. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  226. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  227. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  228. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  229. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  230. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  231. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  232. data/src/core/lib/iomgr/executor.cc +6 -20
  233. data/src/core/lib/iomgr/iomgr.cc +3 -1
  234. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  235. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  236. data/src/core/lib/iomgr/load_file.cc +2 -2
  237. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  238. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  239. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  240. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  241. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  242. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  243. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  244. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  246. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  247. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  250. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  252. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  253. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  254. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  255. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  256. data/src/core/lib/json/json_util.cc +68 -0
  257. data/src/core/lib/json/json_util.h +57 -99
  258. data/src/core/lib/json/json_writer.cc +0 -3
  259. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  260. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  261. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  262. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  263. data/src/core/lib/security/context/security_context.cc +4 -2
  264. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  265. data/src/core/lib/security/credentials/credentials.cc +4 -2
  266. data/src/core/lib/security/credentials/credentials.h +6 -1
  267. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  268. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  269. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  270. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  272. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  273. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  274. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  275. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  276. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  278. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  279. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  280. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  281. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  282. data/src/core/lib/slice/slice.cc +0 -16
  283. data/src/core/lib/slice/slice_api.cc +39 -0
  284. data/src/core/lib/slice/slice_buffer.cc +5 -5
  285. data/src/core/lib/slice/slice_intern.cc +8 -13
  286. data/src/core/lib/slice/slice_internal.h +1 -244
  287. data/src/core/lib/slice/slice_refcount.cc +17 -0
  288. data/src/core/lib/slice/slice_refcount.h +121 -0
  289. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  290. data/src/core/lib/slice/slice_split.cc +100 -0
  291. data/src/core/lib/slice/slice_split.h +40 -0
  292. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  293. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  294. data/src/core/lib/slice/static_slice.cc +529 -0
  295. data/src/core/lib/slice/static_slice.h +331 -0
  296. data/src/core/lib/surface/builtins.cc +49 -0
  297. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  298. data/src/core/lib/surface/call.cc +103 -120
  299. data/src/core/lib/surface/call.h +0 -6
  300. data/src/core/lib/surface/channel.cc +19 -32
  301. data/src/core/lib/surface/channel.h +0 -9
  302. data/src/core/lib/surface/channel_init.cc +23 -76
  303. data/src/core/lib/surface/channel_init.h +52 -44
  304. data/src/core/lib/surface/completion_queue.cc +6 -5
  305. data/src/core/lib/surface/init.cc +0 -39
  306. data/src/core/lib/surface/init_secure.cc +17 -14
  307. data/src/core/lib/surface/lame_client.cc +18 -11
  308. data/src/core/lib/surface/lame_client.h +1 -1
  309. data/src/core/lib/surface/server.cc +25 -17
  310. data/src/core/lib/surface/server.h +17 -10
  311. data/src/core/lib/surface/validate_metadata.cc +5 -2
  312. data/src/core/lib/surface/version.cc +2 -2
  313. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  314. data/src/core/lib/transport/error_utils.cc +42 -17
  315. data/src/core/lib/transport/error_utils.h +1 -1
  316. data/src/core/lib/transport/metadata.cc +31 -10
  317. data/src/core/lib/transport/metadata.h +2 -1
  318. data/src/core/lib/transport/metadata_batch.cc +35 -371
  319. data/src/core/lib/transport/metadata_batch.h +905 -71
  320. data/src/core/lib/transport/parsed_metadata.h +263 -0
  321. data/src/core/lib/transport/pid_controller.cc +4 -4
  322. data/src/core/lib/transport/static_metadata.cc +714 -846
  323. data/src/core/lib/transport/static_metadata.h +115 -379
  324. data/src/core/lib/transport/status_metadata.cc +1 -0
  325. data/src/core/lib/transport/transport.cc +4 -5
  326. data/src/core/lib/transport/transport_op_string.cc +40 -20
  327. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  328. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  329. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  330. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  331. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  335. data/src/core/tsi/fake_transport_security.cc +15 -7
  336. data/src/core/tsi/local_transport_security.cc +36 -73
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  339. data/src/core/tsi/ssl_transport_security.cc +10 -2
  340. data/src/core/tsi/transport_security.cc +12 -0
  341. data/src/core/tsi/transport_security.h +16 -1
  342. data/src/core/tsi/transport_security_interface.h +26 -0
  343. data/src/ruby/ext/grpc/extconf.rb +12 -9
  344. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  346. data/src/ruby/lib/grpc/version.rb +1 -1
  347. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  348. data/src/ruby/spec/client_server_spec.rb +1 -1
  349. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  351. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  352. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  353. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
  355. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  356. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  368. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
  370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  371. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
  372. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
  373. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  375. data/third_party/re2/re2/compile.cc +91 -109
  376. data/third_party/re2/re2/dfa.cc +27 -39
  377. data/third_party/re2/re2/filtered_re2.cc +18 -2
  378. data/third_party/re2/re2/filtered_re2.h +10 -5
  379. data/third_party/re2/re2/nfa.cc +1 -1
  380. data/third_party/re2/re2/parse.cc +42 -23
  381. data/third_party/re2/re2/perl_groups.cc +34 -34
  382. data/third_party/re2/re2/prefilter.cc +3 -2
  383. data/third_party/re2/re2/prog.cc +182 -4
  384. data/third_party/re2/re2/prog.h +28 -9
  385. data/third_party/re2/re2/re2.cc +87 -118
  386. data/third_party/re2/re2/re2.h +156 -141
  387. data/third_party/re2/re2/regexp.cc +12 -5
  388. data/third_party/re2/re2/regexp.h +8 -2
  389. data/third_party/re2/re2/set.cc +31 -9
  390. data/third_party/re2/re2/set.h +9 -4
  391. data/third_party/re2/re2/simplify.cc +11 -3
  392. data/third_party/re2/re2/tostring.cc +1 -1
  393. data/third_party/re2/re2/walker-inl.h +1 -1
  394. data/third_party/re2/util/mutex.h +2 -2
  395. data/third_party/re2/util/pcre.h +3 -3
  396. metadata +78 -66
  397. data/include/grpc/event_engine/slice_allocator.h +0 -71
  398. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  399. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  400. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  401. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  402. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  403. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  404. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  405. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  406. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  407. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  408. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  409. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  410. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  411. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  412. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  413. data/src/core/lib/iomgr/udp_server.cc +0 -747
  414. data/src/core/lib/iomgr/udp_server.h +0 -103
  415. data/src/core/lib/transport/authority_override.cc +0 -40
  416. data/src/core/lib/transport/authority_override.h +0 -37
@@ -339,7 +339,12 @@ void RoundRobin::RoundRobinSubchannelList::
339
339
  void RoundRobin::RoundRobinSubchannelList::
340
340
  UpdateRoundRobinStateFromSubchannelStateCountsLocked() {
341
341
  RoundRobin* p = static_cast<RoundRobin*>(policy());
342
- if (num_ready_ > 0) {
342
+ // If we have at least one READY subchannel, then swap to the new list.
343
+ // Also, if all of the subchannels are in TRANSIENT_FAILURE, then we know
344
+ // we've tried all of them and failed, so we go ahead and swap over
345
+ // anyway; this may cause the channel to go from READY to TRANSIENT_FAILURE,
346
+ // but we are doing what the control plane told us to do.
347
+ if (num_ready_ > 0 || num_transient_failure_ == num_subchannels()) {
343
348
  if (p->subchannel_list_.get() != this) {
344
349
  // Promote this list to p->subchannel_list_.
345
350
  // This list must be p->latest_pending_subchannel_list_, because
@@ -150,6 +150,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
150
150
  const absl::Status& status,
151
151
  std::unique_ptr<SubchannelPicker> picker) override;
152
152
  void RequestReresolution() override;
153
+ absl::string_view GetAuthority() override;
153
154
  void AddTraceEvent(TraceSeverity severity,
154
155
  absl::string_view message) override;
155
156
 
@@ -564,7 +565,7 @@ void WeightedTargetLb::WeightedChild::DeactivateLocked() {
564
565
  void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(
565
566
  void* arg, grpc_error_handle error) {
566
567
  WeightedChild* self = static_cast<WeightedChild*>(arg);
567
- GRPC_ERROR_REF(error); // ref owned by lambda
568
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
568
569
  self->weighted_target_policy_->work_serializer()->Run(
569
570
  [self, error]() { self->OnDelayedRemovalTimerLocked(error); },
570
571
  DEBUG_LOCATION);
@@ -607,6 +608,11 @@ void WeightedTargetLb::WeightedChild::Helper::RequestReresolution() {
607
608
  ->RequestReresolution();
608
609
  }
609
610
 
611
+ absl::string_view WeightedTargetLb::WeightedChild::Helper::GetAuthority() {
612
+ return weighted_child_->weighted_target_policy_->channel_control_helper()
613
+ ->GetAuthority();
614
+ }
615
+
610
616
  void WeightedTargetLb::WeightedChild::Helper::AddTraceEvent(
611
617
  TraceSeverity severity, absl::string_view message) {
612
618
  if (weighted_child_->weighted_target_policy_->shutting_down_) return;
@@ -23,7 +23,6 @@
23
23
  #include "src/core/ext/filters/client_channel/lb_policy.h"
24
24
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
25
25
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
26
- #include "src/core/ext/filters/client_channel/service_config.h"
27
26
  #include "src/core/ext/xds/xds_certificate_provider.h"
28
27
  #include "src/core/ext/xds/xds_client.h"
29
28
  #include "src/core/lib/channel/channel_args.h"
@@ -123,6 +122,7 @@ class CdsLb : public LoadBalancingPolicy {
123
122
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
124
123
  std::unique_ptr<SubchannelPicker> picker) override;
125
124
  void RequestReresolution() override;
125
+ absl::string_view GetAuthority() override;
126
126
  void AddTraceEvent(TraceSeverity severity,
127
127
  absl::string_view message) override;
128
128
 
@@ -207,7 +207,7 @@ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
207
207
  void CdsLb::ClusterWatcher::Notifier::RunInExecCtx(void* arg,
208
208
  grpc_error_handle error) {
209
209
  Notifier* self = static_cast<Notifier*>(arg);
210
- GRPC_ERROR_REF(error);
210
+ (void)GRPC_ERROR_REF(error);
211
211
  self->parent_->work_serializer()->Run(
212
212
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
213
213
  }
@@ -261,6 +261,10 @@ void CdsLb::Helper::RequestReresolution() {
261
261
  parent_->channel_control_helper()->RequestReresolution();
262
262
  }
263
263
 
264
+ absl::string_view CdsLb::Helper::GetAuthority() {
265
+ return parent_->channel_control_helper()->GetAuthority();
266
+ }
267
+
264
268
  void CdsLb::Helper::AddTraceEvent(TraceSeverity severity,
265
269
  absl::string_view message) {
266
270
  if (parent_->shutting_down_) return;
@@ -24,6 +24,6 @@
24
24
  // For testing purpose, this channel arg indicating xds_cluster_resolver LB
25
25
  // policy should use the fake DNS resolver to resolve logical dns cluster.
26
26
  #define GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR \
27
- "grpc.internal.xds_logical_dns_cluster_fake_resolver_response_generator"
27
+ "grpc.TEST_ONLY.xds_logical_dns_cluster_fake_resolver_response_generator"
28
28
 
29
29
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_CHANNEL_ARGS_H
@@ -222,6 +222,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
222
222
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
223
223
  std::unique_ptr<SubchannelPicker> picker) override;
224
224
  void RequestReresolution() override;
225
+ absl::string_view GetAuthority() override;
225
226
  void AddTraceEvent(TraceSeverity severity,
226
227
  absl::string_view message) override;
227
228
 
@@ -576,6 +577,10 @@ void XdsClusterImplLb::Helper::RequestReresolution() {
576
577
  xds_cluster_impl_policy_->channel_control_helper()->RequestReresolution();
577
578
  }
578
579
 
580
+ absl::string_view XdsClusterImplLb::Helper::GetAuthority() {
581
+ return xds_cluster_impl_policy_->channel_control_helper()->GetAuthority();
582
+ }
583
+
579
584
  void XdsClusterImplLb::Helper::AddTraceEvent(TraceSeverity severity,
580
585
  absl::string_view message) {
581
586
  if (xds_cluster_impl_policy_->shutting_down_) return;
@@ -151,6 +151,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
151
151
  const absl::Status& status,
152
152
  std::unique_ptr<SubchannelPicker> picker) override;
153
153
  void RequestReresolution() override;
154
+ absl::string_view GetAuthority() override;
154
155
  void AddTraceEvent(TraceSeverity severity,
155
156
  absl::string_view message) override;
156
157
 
@@ -493,7 +494,7 @@ void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
493
494
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
494
495
  void* arg, grpc_error_handle error) {
495
496
  ClusterChild* self = static_cast<ClusterChild*>(arg);
496
- GRPC_ERROR_REF(error); // Ref owned by the lambda
497
+ (void)GRPC_ERROR_REF(error); // Ref owned by the lambda
497
498
  self->xds_cluster_manager_policy_->work_serializer()->Run(
498
499
  [self, error]() { self->OnDelayedRemovalTimerLocked(error); },
499
500
  DEBUG_LOCATION);
@@ -570,6 +571,12 @@ void XdsClusterManagerLb::ClusterChild::Helper::RequestReresolution() {
570
571
  ->RequestReresolution();
571
572
  }
572
573
 
574
+ absl::string_view XdsClusterManagerLb::ClusterChild::Helper::GetAuthority() {
575
+ return xds_cluster_manager_child_->xds_cluster_manager_policy_
576
+ ->channel_control_helper()
577
+ ->GetAuthority();
578
+ }
579
+
573
580
  void XdsClusterManagerLb::ClusterChild::Helper::AddTraceEvent(
574
581
  TraceSeverity severity, absl::string_view message) {
575
582
  if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
@@ -299,6 +299,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
299
299
  // This is a no-op, because we get the addresses from the xds
300
300
  // client, which is a watch-based API.
301
301
  void RequestReresolution() override {}
302
+ absl::string_view GetAuthority() override;
302
303
  void AddTraceEvent(TraceSeverity severity,
303
304
  absl::string_view message) override;
304
305
 
@@ -380,6 +381,10 @@ void XdsClusterResolverLb::Helper::UpdateState(
380
381
  state, status, std::move(picker));
381
382
  }
382
383
 
384
+ absl::string_view XdsClusterResolverLb::Helper::GetAuthority() {
385
+ return xds_cluster_resolver_policy_->channel_control_helper()->GetAuthority();
386
+ }
387
+
383
388
  void XdsClusterResolverLb::Helper::AddTraceEvent(TraceSeverity severity,
384
389
  absl::string_view message) {
385
390
  if (xds_cluster_resolver_policy_->shutting_down_) return;
@@ -453,7 +458,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
453
458
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
454
459
  RunInExecCtx(void* arg, grpc_error_handle error) {
455
460
  Notifier* self = static_cast<Notifier*>(arg);
456
- GRPC_ERROR_REF(error);
461
+ (void)GRPC_ERROR_REF(error);
457
462
  self->discovery_mechanism_->parent()->work_serializer()->Run(
458
463
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
459
464
  }
@@ -572,13 +577,6 @@ XdsClusterResolverLb::XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client,
572
577
  }
573
578
  // EDS-only flow.
574
579
  if (!is_xds_uri_) {
575
- // Setup channelz linkage.
576
- channelz::ChannelNode* parent_channelz_node =
577
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
578
- args.args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
579
- if (parent_channelz_node != nullptr) {
580
- xds_client_->AddChannelzLinkage(parent_channelz_node);
581
- }
582
580
  // Couple polling.
583
581
  grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
584
582
  interested_parties());
@@ -602,13 +600,6 @@ void XdsClusterResolverLb::ShutdownLocked() {
602
600
  MaybeDestroyChildPolicyLocked();
603
601
  discovery_mechanisms_.clear();
604
602
  if (!is_xds_uri_) {
605
- // Remove channelz linkage.
606
- channelz::ChannelNode* parent_channelz_node =
607
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
608
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
609
- if (parent_channelz_node != nullptr) {
610
- xds_client_->RemoveChannelzLinkage(parent_channelz_node);
611
- }
612
603
  // Decouple polling.
613
604
  grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
614
605
  interested_parties());
@@ -1171,7 +1162,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1171
1162
  if (!discovery_mechanism_errors.empty()) {
1172
1163
  grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1173
1164
  absl::StrCat("field:discovery_mechanism element: ", i, " error"));
1174
- for (grpc_error_handle discovery_mechanism_error :
1165
+ for (const grpc_error_handle& discovery_mechanism_error :
1175
1166
  discovery_mechanism_errors) {
1176
1167
  error = grpc_error_add_child(error, discovery_mechanism_error);
1177
1168
  }
@@ -29,7 +29,6 @@
29
29
  #include "absl/types/variant.h"
30
30
 
31
31
  #include "src/core/ext/filters/client_channel/server_address.h"
32
- #include "src/core/ext/filters/client_channel/service_config.h"
33
32
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
34
33
  #include "src/core/lib/gprpp/orphanable.h"
35
34
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -154,6 +153,9 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
154
153
  /// Produce a vector of metadata key/value strings for tests.
155
154
  virtual std::vector<std::pair<std::string, std::string>>
156
155
  TestOnlyCopyToVector() = 0;
156
+
157
+ virtual absl::optional<absl::string_view> Lookup(
158
+ absl::string_view key, std::string* buffer) const = 0;
157
159
  };
158
160
 
159
161
  /// Arguments used when picking a subchannel for a call.
@@ -261,6 +263,11 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
261
263
 
262
264
  /// A proxy object implemented by the client channel and used by the
263
265
  /// LB policy to communicate with the channel.
266
+ // TODO(roth): Once insecure builds go away, add methods for accessing
267
+ // channel creds. By default, that should strip off the call creds
268
+ // attached to the channel creds, but there should also be a "use at
269
+ // your own risk" option to get the channel creds without stripping
270
+ // off the attached call creds.
264
271
  class ChannelControlHelper {
265
272
  public:
266
273
  ChannelControlHelper() = default;
@@ -279,6 +286,9 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
279
286
  /// Requests that the resolver re-resolve.
280
287
  virtual void RequestReresolution() = 0;
281
288
 
289
+ /// Returns the channel authority.
290
+ virtual absl::string_view GetAuthority() = 0;
291
+
282
292
  /// Adds a trace message associated with the channel.
283
293
  enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
284
294
  virtual void AddTraceEvent(TraceSeverity severity,
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include "src/core/ext/filters/client_channel/lb_policy.h"
25
25
  #include "src/core/lib/gprpp/orphanable.h"
26
+ #include "src/core/lib/json/json.h"
26
27
 
27
28
  namespace grpc_core {
28
29
 
@@ -0,0 +1,139 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/iomgr/port.h"
18
+
19
+ #ifdef GRPC_HAVE_UNIX_SOCKET
20
+
21
+ #include <sys/un.h>
22
+
23
+ #include <grpc/support/alloc.h>
24
+ #include <grpc/support/string_util.h>
25
+
26
+ #include "src/core/ext/filters/client_channel/resolver_registry.h"
27
+ #include "src/core/ext/filters/client_channel/server_address.h"
28
+ #include "src/core/lib/address_utils/parse_address.h"
29
+ #include "src/core/lib/channel/channel_args.h"
30
+ #include "src/core/lib/gpr/string.h"
31
+
32
+ namespace grpc_core {
33
+ namespace {
34
+
35
+ class BinderResolver : public Resolver {
36
+ public:
37
+ BinderResolver(ServerAddressList addresses, ResolverArgs args)
38
+ : result_handler_(std::move(args.result_handler)),
39
+ addresses_(std::move(addresses)),
40
+ channel_args_(grpc_channel_args_copy(args.args)) {}
41
+
42
+ ~BinderResolver() override { grpc_channel_args_destroy(channel_args_); };
43
+
44
+ void StartLocked() override {
45
+ Result result;
46
+ result.addresses = std::move(addresses_);
47
+ result.args = channel_args_;
48
+ channel_args_ = nullptr;
49
+ result_handler_->ReturnResult(std::move(result));
50
+ }
51
+
52
+ void ShutdownLocked() override {}
53
+
54
+ private:
55
+ std::unique_ptr<ResultHandler> result_handler_;
56
+ ServerAddressList addresses_;
57
+ const grpc_channel_args* channel_args_ = nullptr;
58
+ };
59
+
60
+ class BinderResolverFactory : public ResolverFactory {
61
+ public:
62
+ bool IsValidUri(const URI& uri) const override {
63
+ return ParseUri(uri, nullptr);
64
+ }
65
+
66
+ OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
67
+ ServerAddressList addresses;
68
+ if (!ParseUri(args.uri, &addresses)) return nullptr;
69
+ return MakeOrphanable<BinderResolver>(std::move(addresses),
70
+ std::move(args));
71
+ }
72
+
73
+ const char* scheme() const override { return "binder"; }
74
+
75
+ private:
76
+ static grpc_error_handle BinderAddrPopulate(
77
+ absl::string_view path, grpc_resolved_address* resolved_addr) {
78
+ path = absl::StripPrefix(path, "/");
79
+ if (path.empty()) {
80
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING("path is empty");
81
+ }
82
+ // Store parsed path in a unix socket so it can be reinterpreted as
83
+ // sockaddr. An invalid address family (AF_MAX) is set to make sure it won't
84
+ // be accidentally used.
85
+ memset(resolved_addr, 0, sizeof(*resolved_addr));
86
+ struct sockaddr_un* un =
87
+ reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
88
+ un->sun_family = AF_MAX;
89
+ static_assert(sizeof(un->sun_path) >= 101,
90
+ "unix socket path size is unexpectedly short");
91
+ if (path.size() + 1 > sizeof(un->sun_path)) {
92
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(
93
+ absl::StrCat(path, " is too long to be handled"));
94
+ }
95
+ // `un` has already be set to zero, no need to append null after the string
96
+ memcpy(un->sun_path, path.data(), path.size());
97
+ resolved_addr->len =
98
+ static_cast<socklen_t>(sizeof(un->sun_family) + path.size() + 1);
99
+ return GRPC_ERROR_NONE;
100
+ }
101
+
102
+ static bool ParseUri(const URI& uri, ServerAddressList* addresses) {
103
+ grpc_resolved_address addr;
104
+ {
105
+ if (!uri.authority().empty()) {
106
+ gpr_log(GPR_ERROR, "authority is not supported in binder scheme");
107
+ return false;
108
+ }
109
+ grpc_error_handle error = BinderAddrPopulate(uri.path(), &addr);
110
+ if (error != GRPC_ERROR_NONE) {
111
+ gpr_log(GPR_ERROR, "%s", grpc_error_std_string(error).c_str());
112
+ GRPC_ERROR_UNREF(error);
113
+ return false;
114
+ }
115
+ }
116
+ if (addresses != nullptr) {
117
+ addresses->emplace_back(addr, nullptr /* args */);
118
+ }
119
+ return true;
120
+ }
121
+ };
122
+
123
+ } // namespace
124
+ } // namespace grpc_core
125
+
126
+ void grpc_resolver_binder_init() {
127
+ grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
128
+ absl::make_unique<grpc_core::BinderResolverFactory>());
129
+ }
130
+
131
+ void grpc_resolver_binder_shutdown() {}
132
+
133
+ #else
134
+
135
+ void grpc_resolver_binder_init() {}
136
+
137
+ void grpc_resolver_binder_shutdown() {}
138
+
139
+ #endif
@@ -39,7 +39,7 @@
39
39
  #include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
40
40
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
41
41
  #include "src/core/ext/filters/client_channel/server_address.h"
42
- #include "src/core/ext/filters/client_channel/service_config.h"
42
+ #include "src/core/ext/service_config/service_config.h"
43
43
  #include "src/core/lib/backoff/backoff.h"
44
44
  #include "src/core/lib/channel/channel_args.h"
45
45
  #include "src/core/lib/gpr/string.h"
@@ -193,7 +193,7 @@ void AresDnsResolver::ShutdownLocked() {
193
193
 
194
194
  void AresDnsResolver::OnNextResolution(void* arg, grpc_error_handle error) {
195
195
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
196
- GRPC_ERROR_REF(error); // ref owned by lambda
196
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
197
197
  r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
198
198
  DEBUG_LOCATION);
199
199
  }
@@ -305,7 +305,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
305
305
 
306
306
  void AresDnsResolver::OnResolved(void* arg, grpc_error_handle error) {
307
307
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
308
- GRPC_ERROR_REF(error); // ref owned by lambda
308
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
309
309
  r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
310
310
  DEBUG_LOCATION);
311
311
  }
@@ -313,7 +313,7 @@ void AresDnsResolver::OnResolved(void* arg, grpc_error_handle error) {
313
313
  void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
314
314
  GPR_ASSERT(resolving_);
315
315
  resolving_ = false;
316
- gpr_free(pending_request_);
316
+ delete pending_request_;
317
317
  pending_request_ = nullptr;
318
318
  if (shutdown_initiated_) {
319
319
  Unref(DEBUG_LOCATION, "OnResolvedLocked() shutdown");
@@ -445,7 +445,13 @@ void AresDnsResolver::StartResolvingLocked() {
445
445
 
446
446
  class AresDnsResolverFactory : public ResolverFactory {
447
447
  public:
448
- bool IsValidUri(const URI& /*uri*/) const override { return true; }
448
+ bool IsValidUri(const URI& uri) const override {
449
+ if (absl::StripPrefix(uri.path(), "/").empty()) {
450
+ gpr_log(GPR_ERROR, "no server name supplied in dns URI");
451
+ return false;
452
+ }
453
+ return true;
454
+ }
449
455
 
450
456
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
451
457
  return MakeOrphanable<AresDnsResolver>(std::move(args));
@@ -424,7 +424,7 @@ class GrpcPolledFdWindows {
424
424
  static void OnTcpConnect(void* arg, grpc_error_handle error) {
425
425
  GrpcPolledFdWindows* grpc_polled_fd =
426
426
  static_cast<GrpcPolledFdWindows*>(arg);
427
- GRPC_ERROR_REF(error); // ref owned by lambda
427
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
428
428
  grpc_polled_fd->work_serializer_->Run(
429
429
  [grpc_polled_fd, error]() {
430
430
  grpc_polled_fd->OnTcpConnectLocked(error);
@@ -579,7 +579,7 @@ class GrpcPolledFdWindows {
579
579
 
580
580
  static void OnIocpReadable(void* arg, grpc_error_handle error) {
581
581
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
582
- GRPC_ERROR_REF(error); // ref owned by lambda
582
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
583
583
  polled_fd->work_serializer_->Run(
584
584
  [polled_fd, error]() { polled_fd->OnIocpReadableLocked(error); },
585
585
  DEBUG_LOCATION);
@@ -624,7 +624,7 @@ class GrpcPolledFdWindows {
624
624
 
625
625
  static void OnIocpWriteable(void* arg, grpc_error_handle error) {
626
626
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
627
- GRPC_ERROR_REF(error); // error owned by lambda
627
+ (void)GRPC_ERROR_REF(error); // error owned by lambda
628
628
  polled_fd->work_serializer_->Run(
629
629
  [polled_fd, error]() { polled_fd->OnIocpWriteableLocked(error); },
630
630
  DEBUG_LOCATION);
@@ -47,7 +47,6 @@
47
47
  #include "src/core/lib/iomgr/nameser.h"
48
48
  #include "src/core/lib/iomgr/sockaddr.h"
49
49
  #include "src/core/lib/iomgr/timer.h"
50
- #include "src/core/lib/transport/authority_override.h"
51
50
 
52
51
  using grpc_core::ServerAddress;
53
52
  using grpc_core::ServerAddressList;
@@ -57,29 +56,6 @@ grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
57
56
 
58
57
  grpc_core::TraceFlag grpc_trace_cares_resolver(false, "cares_resolver");
59
58
 
60
- typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;
61
-
62
- struct grpc_ares_request {
63
- /** indicates the DNS server to use, if specified */
64
- struct ares_addr_port_node dns_server_addr;
65
- /** following members are set in grpc_resolve_address_ares_impl */
66
- /** closure to call when the request completes */
67
- grpc_closure* on_done;
68
- /** the pointer to receive the resolved addresses */
69
- std::unique_ptr<grpc_core::ServerAddressList>* addresses_out;
70
- /** the pointer to receive the resolved balancer addresses */
71
- std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses_out;
72
- /** the pointer to receive the service config in JSON */
73
- char** service_config_json_out;
74
- /** the evernt driver used by this request */
75
- grpc_ares_ev_driver* ev_driver;
76
- /** number of ongoing queries */
77
- size_t pending_queries;
78
-
79
- /** the errors explaining query failures, appended to in query callbacks */
80
- grpc_error_handle error;
81
- };
82
-
83
59
  typedef struct fd_node {
84
60
  /** the owner of this fd node */
85
61
  grpc_ares_ev_driver* ev_driver;
@@ -284,7 +260,7 @@ static void on_timeout_locked(grpc_ares_ev_driver* driver,
284
260
 
285
261
  static void on_timeout(void* arg, grpc_error_handle error) {
286
262
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
287
- GRPC_ERROR_REF(error); // ref owned by lambda
263
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
288
264
  driver->work_serializer->Run(
289
265
  [driver, error]() { on_timeout_locked(driver, error); }, DEBUG_LOCATION);
290
266
  }
@@ -296,7 +272,7 @@ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
296
272
 
297
273
  static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
298
274
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
299
- GRPC_ERROR_REF(error);
275
+ (void)GRPC_ERROR_REF(error);
300
276
  driver->work_serializer->Run(
301
277
  [driver, error]() { on_ares_backup_poll_alarm_locked(driver, error); },
302
278
  DEBUG_LOCATION);
@@ -379,7 +355,7 @@ static void on_readable_locked(fd_node* fdn, grpc_error_handle error) {
379
355
 
380
356
  static void on_readable(void* arg, grpc_error_handle error) {
381
357
  fd_node* fdn = static_cast<fd_node*>(arg);
382
- GRPC_ERROR_REF(error); /* ref owned by lambda */
358
+ (void)GRPC_ERROR_REF(error); /* ref owned by lambda */
383
359
  fdn->ev_driver->work_serializer->Run(
384
360
  [fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
385
361
  }
@@ -409,7 +385,7 @@ static void on_writable_locked(fd_node* fdn, grpc_error_handle error) {
409
385
 
410
386
  static void on_writable(void* arg, grpc_error_handle error) {
411
387
  fd_node* fdn = static_cast<fd_node*>(arg);
412
- GRPC_ERROR_REF(error); /* ref owned by lambda */
388
+ (void)GRPC_ERROR_REF(error); /* ref owned by lambda */
413
389
  fdn->ev_driver->work_serializer->Run(
414
390
  [fdn, error]() { on_writable_locked(fdn, error); }, DEBUG_LOCATION);
415
391
  }
@@ -670,8 +646,8 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
670
646
  for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
671
647
  absl::InlinedVector<grpc_arg, 1> args_to_add;
672
648
  if (hr->is_balancer) {
673
- args_to_add.emplace_back(
674
- grpc_core::CreateAuthorityOverrideChannelArg(hr->host));
649
+ args_to_add.emplace_back(grpc_channel_arg_string_create(
650
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), hr->host));
675
651
  }
676
652
  grpc_channel_args* args = grpc_channel_args_copy_and_add(
677
653
  nullptr, args_to_add.data(), args_to_add.size());
@@ -841,13 +817,13 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
841
817
  if (host.empty()) {
842
818
  error = grpc_error_set_str(
843
819
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
844
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
820
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
845
821
  goto error_cleanup;
846
822
  } else if (port.empty()) {
847
823
  if (default_port == nullptr) {
848
824
  error = grpc_error_set_str(
849
825
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
850
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
826
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
851
827
  goto error_cleanup;
852
828
  }
853
829
  port = default_port;
@@ -879,7 +855,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
879
855
  } else {
880
856
  error = grpc_error_set_str(
881
857
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("cannot parse authority"),
882
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
858
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
883
859
  goto error_cleanup;
884
860
  }
885
861
  int status =
@@ -1060,15 +1036,12 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
1060
1036
  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
1061
1037
  char** service_config_json, int query_timeout_ms,
1062
1038
  std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
1063
- grpc_ares_request* r =
1064
- static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
1039
+ grpc_ares_request* r = new grpc_ares_request();
1065
1040
  r->ev_driver = nullptr;
1066
1041
  r->on_done = on_done;
1067
1042
  r->addresses_out = addrs;
1068
1043
  r->balancer_addresses_out = balancer_addrs;
1069
1044
  r->service_config_json_out = service_config_json;
1070
- r->error = GRPC_ERROR_NONE;
1071
- r->pending_queries = 0;
1072
1045
  GRPC_CARES_TRACE_LOG(
1073
1046
  "request:%p c-ares grpc_dns_lookup_ares_locked_impl name=%s, "
1074
1047
  "default_port=%s",
@@ -1164,7 +1137,7 @@ typedef struct grpc_resolve_address_ares_request {
1164
1137
 
1165
1138
  static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
1166
1139
  grpc_error_handle error) {
1167
- gpr_free(r->ares_request);
1140
+ delete r->ares_request;
1168
1141
  grpc_resolved_addresses** resolved_addresses = r->addrs_out;
1169
1142
  if (r->addresses == nullptr || r->addresses->empty()) {
1170
1143
  *resolved_addresses = nullptr;
@@ -1187,7 +1160,7 @@ static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
1187
1160
  static void on_dns_lookup_done(void* arg, grpc_error_handle error) {
1188
1161
  grpc_resolve_address_ares_request* r =
1189
1162
  static_cast<grpc_resolve_address_ares_request*>(arg);
1190
- GRPC_ERROR_REF(error); // ref owned by lambda
1163
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
1191
1164
  r->work_serializer->Run([r, error]() { on_dns_lookup_done_locked(r, error); },
1192
1165
  DEBUG_LOCATION);
1193
1166
  }
@@ -42,7 +42,27 @@ extern grpc_core::TraceFlag grpc_trace_cares_resolver;
42
42
  } \
43
43
  } while (0)
44
44
 
45
- typedef struct grpc_ares_request grpc_ares_request;
45
+ typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;
46
+
47
+ struct grpc_ares_request {
48
+ /** indicates the DNS server to use, if specified */
49
+ struct ares_addr_port_node dns_server_addr;
50
+ /** following members are set in grpc_resolve_address_ares_impl */
51
+ /** closure to call when the request completes */
52
+ grpc_closure* on_done = nullptr;
53
+ /** the pointer to receive the resolved addresses */
54
+ std::unique_ptr<grpc_core::ServerAddressList>* addresses_out;
55
+ /** the pointer to receive the resolved balancer addresses */
56
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses_out;
57
+ /** the pointer to receive the service config in JSON */
58
+ char** service_config_json_out = nullptr;
59
+ /** the evernt driver used by this request */
60
+ grpc_ares_ev_driver* ev_driver = nullptr;
61
+ /** number of ongoing queries */
62
+ size_t pending_queries = 0;
63
+ /** the errors explaining query failures, appended to in query callbacks */
64
+ grpc_error_handle error = GRPC_ERROR_NONE;
65
+ };
46
66
 
47
67
  /* Asynchronously resolve \a name. Use \a default_port if a port isn't
48
68
  designated in \a name, otherwise use the port in \a name. grpc_ares_init()