grpc 1.28.0 → 1.30.0

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 (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <set>
23
23
 
24
+ #include "absl/strings/string_view.h"
24
25
  #include "absl/types/optional.h"
25
26
 
26
27
  #include "src/core/ext/filters/client_channel/service_config.h"
@@ -32,8 +33,7 @@
32
33
  #include "src/core/lib/gprpp/orphanable.h"
33
34
  #include "src/core/lib/gprpp/ref_counted.h"
34
35
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
- #include "src/core/lib/gprpp/string_view.h"
36
- #include "src/core/lib/iomgr/combiner.h"
36
+ #include "src/core/lib/iomgr/work_serializer.h"
37
37
 
38
38
  namespace grpc_core {
39
39
 
@@ -50,6 +50,8 @@ class XdsClient : public InternallyRefCounted {
50
50
  RefCountedPtr<ServiceConfig> service_config) = 0;
51
51
 
52
52
  virtual void OnError(grpc_error* error) = 0;
53
+
54
+ virtual void OnResourceDoesNotExist() = 0;
53
55
  };
54
56
 
55
57
  // Cluster data watcher interface. Implemented by callers.
@@ -60,6 +62,8 @@ class XdsClient : public InternallyRefCounted {
60
62
  virtual void OnClusterChanged(XdsApi::CdsUpdate cluster_data) = 0;
61
63
 
62
64
  virtual void OnError(grpc_error* error) = 0;
65
+
66
+ virtual void OnResourceDoesNotExist() = 0;
63
67
  };
64
68
 
65
69
  // Endpoint data watcher interface. Implemented by callers.
@@ -70,12 +74,14 @@ class XdsClient : public InternallyRefCounted {
70
74
  virtual void OnEndpointChanged(XdsApi::EdsUpdate update) = 0;
71
75
 
72
76
  virtual void OnError(grpc_error* error) = 0;
77
+
78
+ virtual void OnResourceDoesNotExist() = 0;
73
79
  };
74
80
 
75
81
  // If *error is not GRPC_ERROR_NONE after construction, then there was
76
82
  // an error initializing the client.
77
- XdsClient(Combiner* combiner, grpc_pollset_set* interested_parties,
78
- StringView server_name,
83
+ XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
84
+ grpc_pollset_set* interested_parties, absl::string_view server_name,
79
85
  std::unique_ptr<ServiceConfigWatcherInterface> watcher,
80
86
  const grpc_channel_args& channel_args, grpc_error** error);
81
87
  ~XdsClient();
@@ -89,9 +95,9 @@ class XdsClient : public InternallyRefCounted {
89
95
  // pointer must not be used for any other purpose.)
90
96
  // If the caller is going to start a new watch after cancelling the
91
97
  // old one, it should set delay_unsubscription to true.
92
- void WatchClusterData(StringView cluster_name,
98
+ void WatchClusterData(absl::string_view cluster_name,
93
99
  std::unique_ptr<ClusterWatcherInterface> watcher);
94
- void CancelClusterDataWatch(StringView cluster_name,
100
+ void CancelClusterDataWatch(absl::string_view cluster_name,
95
101
  ClusterWatcherInterface* watcher,
96
102
  bool delay_unsubscription = false);
97
103
 
@@ -102,29 +108,30 @@ class XdsClient : public InternallyRefCounted {
102
108
  // pointer must not be used for any other purpose.)
103
109
  // If the caller is going to start a new watch after cancelling the
104
110
  // old one, it should set delay_unsubscription to true.
105
- void WatchEndpointData(StringView eds_service_name,
111
+ void WatchEndpointData(absl::string_view eds_service_name,
106
112
  std::unique_ptr<EndpointWatcherInterface> watcher);
107
- void CancelEndpointDataWatch(StringView eds_service_name,
113
+ void CancelEndpointDataWatch(absl::string_view eds_service_name,
108
114
  EndpointWatcherInterface* watcher,
109
115
  bool delay_unsubscription = false);
110
116
 
111
117
  // Adds and removes drop stats for cluster_name and eds_service_name.
112
118
  RefCountedPtr<XdsClusterDropStats> AddClusterDropStats(
113
- StringView lrs_server, StringView cluster_name,
114
- StringView eds_service_name);
115
- void RemoveClusterDropStats(StringView /*lrs_server*/,
116
- StringView cluster_name,
117
- StringView eds_service_name,
119
+ absl::string_view lrs_server, absl::string_view cluster_name,
120
+ absl::string_view eds_service_name);
121
+ void RemoveClusterDropStats(absl::string_view /*lrs_server*/,
122
+ absl::string_view cluster_name,
123
+ absl::string_view eds_service_name,
118
124
  XdsClusterDropStats* cluster_drop_stats);
119
125
 
120
126
  // Adds and removes locality stats for cluster_name and eds_service_name
121
127
  // for the specified locality.
122
128
  RefCountedPtr<XdsClusterLocalityStats> AddClusterLocalityStats(
123
- StringView lrs_server, StringView cluster_name,
124
- StringView eds_service_name, RefCountedPtr<XdsLocalityName> locality);
129
+ absl::string_view lrs_server, absl::string_view cluster_name,
130
+ absl::string_view eds_service_name,
131
+ RefCountedPtr<XdsLocalityName> locality);
125
132
  void RemoveClusterLocalityStats(
126
- StringView /*lrs_server*/, StringView cluster_name,
127
- StringView eds_service_name,
133
+ absl::string_view /*lrs_server*/, absl::string_view cluster_name,
134
+ absl::string_view eds_service_name,
128
135
  const RefCountedPtr<XdsLocalityName>& locality,
129
136
  XdsClusterLocalityStats* cluster_locality_stats);
130
137
 
@@ -135,6 +142,8 @@ class XdsClient : public InternallyRefCounted {
135
142
  grpc_arg MakeChannelArg() const;
136
143
  static RefCountedPtr<XdsClient> GetFromChannelArgs(
137
144
  const grpc_channel_args& args);
145
+ static grpc_channel_args* RemoveFromChannelArgs(
146
+ const grpc_channel_args& args);
138
147
 
139
148
  private:
140
149
  // Contains a channel to the xds server and all the data related to the
@@ -225,12 +234,22 @@ class XdsClient : public InternallyRefCounted {
225
234
  // Sends an error notification to all watchers.
226
235
  void NotifyOnError(grpc_error* error);
227
236
 
228
- grpc_error* CreateServiceConfig(
229
- const std::string& cluster_name,
230
- RefCountedPtr<ServiceConfig>* service_config) const;
237
+ // Returns the weighted_clusters action name to use from
238
+ // weighted_cluster_index_map_ for a WeightedClusters route action.
239
+ std::string WeightedClustersActionName(
240
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
241
+ weighted_clusters);
242
+
243
+ // Updates weighted_cluster_index_map_ that will
244
+ // determine the names of the WeightedCluster actions for the current update.
245
+ void UpdateWeightedClusterIndexMap(const XdsApi::RdsUpdate& rds_update);
246
+
247
+ // Create the service config generated by the RdsUpdate.
248
+ grpc_error* CreateServiceConfig(const XdsApi::RdsUpdate& rds_update,
249
+ RefCountedPtr<ServiceConfig>* service_config);
231
250
 
232
251
  XdsApi::ClusterLoadReportMap BuildLoadReportSnapshot(
233
- const std::set<std::string>& clusters);
252
+ bool send_all_clusters, const std::set<std::string>& clusters);
234
253
 
235
254
  // Channel arg vtable functions.
236
255
  static void* ChannelArgCopy(void* p);
@@ -241,7 +260,7 @@ class XdsClient : public InternallyRefCounted {
241
260
 
242
261
  const grpc_millis request_timeout_;
243
262
 
244
- Combiner* combiner_;
263
+ std::shared_ptr<WorkSerializer> work_serializer_;
245
264
  grpc_pollset_set* interested_parties_;
246
265
 
247
266
  std::unique_ptr<XdsBootstrap> bootstrap_;
@@ -266,6 +285,22 @@ class XdsClient : public InternallyRefCounted {
266
285
  LoadReportState>
267
286
  load_report_map_;
268
287
 
288
+ // 2-level map to store WeightedCluster action names.
289
+ // Top level map is keyed by cluster names without weight like a_b_c; bottom
290
+ // level map is keyed by cluster names + weights like a10_b50_c40.
291
+ struct ClusterNamesInfo {
292
+ uint64_t next_index = 0;
293
+ std::map<std::string /*cluster names + weights*/,
294
+ uint64_t /*policy index number*/>
295
+ cluster_weights_map;
296
+ };
297
+ using WeightedClusterIndexMap =
298
+ std::map<std::string /*cluster names*/, ClusterNamesInfo>;
299
+
300
+ // Cache of action names for WeightedCluster targets in the current
301
+ // service config.
302
+ WeightedClusterIndexMap weighted_cluster_index_map_;
303
+
269
304
  bool shutting_down_ = false;
270
305
  };
271
306
 
@@ -34,9 +34,9 @@ namespace grpc_core {
34
34
  //
35
35
 
36
36
  XdsClusterDropStats::XdsClusterDropStats(RefCountedPtr<XdsClient> xds_client,
37
- StringView lrs_server_name,
38
- StringView cluster_name,
39
- StringView eds_service_name)
37
+ absl::string_view lrs_server_name,
38
+ absl::string_view cluster_name,
39
+ absl::string_view eds_service_name)
40
40
  : xds_client_(std::move(xds_client)),
41
41
  lrs_server_name_(lrs_server_name),
42
42
  cluster_name_(cluster_name),
@@ -64,8 +64,8 @@ void XdsClusterDropStats::AddCallDropped(const std::string& category) {
64
64
  //
65
65
 
66
66
  XdsClusterLocalityStats::XdsClusterLocalityStats(
67
- RefCountedPtr<XdsClient> xds_client, StringView lrs_server_name,
68
- StringView cluster_name, StringView eds_service_name,
67
+ RefCountedPtr<XdsClient> xds_client, absl::string_view lrs_server_name,
68
+ absl::string_view cluster_name, absl::string_view eds_service_name,
69
69
  RefCountedPtr<XdsLocalityName> name)
70
70
  : xds_client_(std::move(xds_client)),
71
71
  lrs_server_name_(lrs_server_name),
@@ -89,13 +89,12 @@ uint64_t GetAndResetCounter(Atomic* from) {
89
89
 
90
90
  XdsClusterLocalityStats::Snapshot
91
91
  XdsClusterLocalityStats::GetSnapshotAndReset() {
92
- Snapshot snapshot = {
93
- GetAndResetCounter(&total_successful_requests_),
94
- // Don't reset total_requests_in_progress because it's not
95
- // related to a single reporting interval.
96
- total_requests_in_progress_.Load(MemoryOrder::RELAXED),
97
- GetAndResetCounter(&total_error_requests_),
98
- GetAndResetCounter(&total_issued_requests_)};
92
+ Snapshot snapshot = {GetAndResetCounter(&total_successful_requests_),
93
+ // Don't reset total_requests_in_progress because it's
94
+ // not related to a single reporting interval.
95
+ total_requests_in_progress_.Load(MemoryOrder::RELAXED),
96
+ GetAndResetCounter(&total_error_requests_),
97
+ GetAndResetCounter(&total_issued_requests_)};
99
98
  MutexLock lock(&backend_metrics_mu_);
100
99
  snapshot.backend_metrics = std::move(backend_metrics_);
101
100
  return snapshot;
@@ -21,11 +21,13 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <map>
25
+
26
+ #include "absl/strings/string_view.h"
27
+
24
28
  #include <grpc/support/string_util.h>
25
29
 
26
30
  #include "src/core/lib/gprpp/atomic.h"
27
- #include "src/core/lib/gprpp/inlined_vector.h"
28
- #include "src/core/lib/gprpp/map.h"
29
31
  #include "src/core/lib/gprpp/memory.h"
30
32
  #include "src/core/lib/gprpp/ref_counted.h"
31
33
  #include "src/core/lib/gprpp/sync.h"
@@ -42,11 +44,7 @@ class XdsLocalityName : public RefCounted {
42
44
  struct Less {
43
45
  bool operator()(const XdsLocalityName* lhs,
44
46
  const XdsLocalityName* rhs) const {
45
- int cmp_result = lhs->region_.compare(rhs->region_);
46
- if (cmp_result != 0) return cmp_result < 0;
47
- cmp_result = lhs->zone_.compare(rhs->zone_);
48
- if (cmp_result != 0) return cmp_result < 0;
49
- return lhs->sub_zone_.compare(rhs->sub_zone_) < 0;
47
+ return lhs->Compare(*rhs) < 0;
50
48
  }
51
49
 
52
50
  bool operator()(const RefCountedPtr<XdsLocalityName>& lhs,
@@ -65,6 +63,18 @@ class XdsLocalityName : public RefCounted {
65
63
  sub_zone_ == other.sub_zone_;
66
64
  }
67
65
 
66
+ bool operator!=(const XdsLocalityName& other) const {
67
+ return !(*this == other);
68
+ }
69
+
70
+ int Compare(const XdsLocalityName& other) const {
71
+ int cmp_result = region_.compare(other.region_);
72
+ if (cmp_result != 0) return cmp_result;
73
+ cmp_result = zone_.compare(other.zone_);
74
+ if (cmp_result != 0) return cmp_result;
75
+ return sub_zone_.compare(other.sub_zone_);
76
+ }
77
+
68
78
  const std::string& region() const { return region_; }
69
79
  const std::string& zone() const { return zone_; }
70
80
  const std::string& sub_zone() const { return sub_zone_; }
@@ -92,8 +102,9 @@ class XdsClusterDropStats : public RefCounted {
92
102
  using DroppedRequestsMap = std::map<std::string /* category */, uint64_t>;
93
103
 
94
104
  XdsClusterDropStats(RefCountedPtr<XdsClient> xds_client,
95
- StringView lrs_server_name, StringView cluster_name,
96
- StringView eds_service_name);
105
+ absl::string_view lrs_server_name,
106
+ absl::string_view cluster_name,
107
+ absl::string_view eds_service_name);
97
108
  ~XdsClusterDropStats();
98
109
 
99
110
  // Returns a snapshot of this instance and resets all the counters.
@@ -103,9 +114,9 @@ class XdsClusterDropStats : public RefCounted {
103
114
 
104
115
  private:
105
116
  RefCountedPtr<XdsClient> xds_client_;
106
- StringView lrs_server_name_;
107
- StringView cluster_name_;
108
- StringView eds_service_name_;
117
+ absl::string_view lrs_server_name_;
118
+ absl::string_view cluster_name_;
119
+ absl::string_view eds_service_name_;
109
120
  // Protects dropped_requests_. A mutex is necessary because the length of
110
121
  // dropped_requests_ can be accessed by both the picker (from data plane
111
122
  // mutex) and the load reporting thread (from the control plane combiner).
@@ -163,8 +174,9 @@ class XdsClusterLocalityStats : public RefCounted {
163
174
  };
164
175
 
165
176
  XdsClusterLocalityStats(RefCountedPtr<XdsClient> xds_client,
166
- StringView lrs_server_name, StringView cluster_name,
167
- StringView eds_service_name,
177
+ absl::string_view lrs_server_name,
178
+ absl::string_view cluster_name,
179
+ absl::string_view eds_service_name,
168
180
  RefCountedPtr<XdsLocalityName> name);
169
181
  ~XdsClusterLocalityStats();
170
182
 
@@ -176,9 +188,9 @@ class XdsClusterLocalityStats : public RefCounted {
176
188
 
177
189
  private:
178
190
  RefCountedPtr<XdsClient> xds_client_;
179
- StringView lrs_server_name_;
180
- StringView cluster_name_;
181
- StringView eds_service_name_;
191
+ absl::string_view lrs_server_name_;
192
+ absl::string_view cluster_name_;
193
+ absl::string_view eds_service_name_;
182
194
  RefCountedPtr<XdsLocalityName> name_;
183
195
 
184
196
  Atomic<uint64_t> total_successful_requests_{0};
@@ -188,8 +200,8 @@ class XdsClusterLocalityStats : public RefCounted {
188
200
 
189
201
  // Protects backend_metrics_. A mutex is necessary because the length of
190
202
  // backend_metrics_ can be accessed by both the callback intercepting the
191
- // call's recv_trailing_metadata (not from the control plane combiner) and
192
- // the load reporting thread (from the control plane combiner).
203
+ // call's recv_trailing_metadata (not from the control plane work serializer)
204
+ // and the load reporting thread (from the control plane work serializer).
193
205
  Mutex backend_metrics_mu_;
194
206
  std::map<std::string, BackendMetric> backend_metrics_;
195
207
  };
@@ -17,11 +17,19 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <stdint.h>
21
+ #include <string.h>
22
+
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ #include "absl/strings/str_format.h"
27
+ #include "absl/strings/str_join.h"
28
+
20
29
  #include <grpc/support/alloc.h>
21
30
  #include <grpc/support/log.h>
22
31
  #include <grpc/support/string_util.h>
23
- #include <stdint.h>
24
- #include <string.h>
32
+
25
33
  #include "src/core/ext/filters/http/client/http_client_filter.h"
26
34
  #include "src/core/lib/gpr/string.h"
27
35
  #include "src/core/lib/gprpp/manual_constructor.h"
@@ -31,6 +39,7 @@
31
39
  #include "src/core/lib/slice/slice_internal.h"
32
40
  #include "src/core/lib/slice/slice_string_helpers.h"
33
41
  #include "src/core/lib/transport/static_metadata.h"
42
+ #include "src/core/lib/transport/status_conversion.h"
34
43
  #include "src/core/lib/transport/transport_impl.h"
35
44
 
36
45
  #define EXPECTED_CONTENT_TYPE "application/grpc"
@@ -120,7 +129,8 @@ static grpc_error* client_filter_incoming_metadata(grpc_metadata_batch* b) {
120
129
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
121
130
  "Received http2 :status header with non-200 OK status"),
122
131
  GRPC_ERROR_STR_VALUE, grpc_slice_from_copied_string(val)),
123
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED),
132
+ GRPC_ERROR_INT_GRPC_STATUS,
133
+ grpc_http2_status_to_grpc_status(atoi(val))),
124
134
  GRPC_ERROR_STR_GRPC_MESSAGE, grpc_slice_from_copied_string(msg));
125
135
  gpr_free(val);
126
136
  gpr_free(msg);
@@ -518,51 +528,36 @@ static size_t max_payload_size_from_args(const grpc_channel_args* args) {
518
528
 
519
529
  static grpc_core::ManagedMemorySlice user_agent_from_args(
520
530
  const grpc_channel_args* args, const char* transport_name) {
521
- gpr_strvec v;
522
- size_t i;
523
- int is_first = 1;
524
- char* tmp;
531
+ std::vector<std::string> user_agent_fields;
525
532
 
526
- gpr_strvec_init(&v);
527
-
528
- for (i = 0; args && i < args->num_args; i++) {
533
+ for (size_t i = 0; args && i < args->num_args; i++) {
529
534
  if (0 == strcmp(args->args[i].key, GRPC_ARG_PRIMARY_USER_AGENT_STRING)) {
530
535
  if (args->args[i].type != GRPC_ARG_STRING) {
531
536
  gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
532
537
  GRPC_ARG_PRIMARY_USER_AGENT_STRING);
533
538
  } else {
534
- if (!is_first) gpr_strvec_add(&v, gpr_strdup(" "));
535
- is_first = 0;
536
- gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string));
539
+ user_agent_fields.push_back(args->args[i].value.string);
537
540
  }
538
541
  }
539
542
  }
540
543
 
541
- gpr_asprintf(&tmp, "%sgrpc-c/%s (%s; %s; %s)", is_first ? "" : " ",
542
- grpc_version_string(), GPR_PLATFORM_STRING, transport_name,
543
- grpc_g_stands_for());
544
- is_first = 0;
545
- gpr_strvec_add(&v, tmp);
544
+ user_agent_fields.push_back(
545
+ absl::StrFormat("grpc-c/%s (%s; %s)", grpc_version_string(),
546
+ GPR_PLATFORM_STRING, transport_name));
546
547
 
547
- for (i = 0; args && i < args->num_args; i++) {
548
+ for (size_t i = 0; args && i < args->num_args; i++) {
548
549
  if (0 == strcmp(args->args[i].key, GRPC_ARG_SECONDARY_USER_AGENT_STRING)) {
549
550
  if (args->args[i].type != GRPC_ARG_STRING) {
550
551
  gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
551
552
  GRPC_ARG_SECONDARY_USER_AGENT_STRING);
552
553
  } else {
553
- if (!is_first) gpr_strvec_add(&v, gpr_strdup(" "));
554
- is_first = 0;
555
- gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string));
554
+ user_agent_fields.push_back(args->args[i].value.string);
556
555
  }
557
556
  }
558
557
  }
559
558
 
560
- tmp = gpr_strvec_flatten(&v, nullptr);
561
- gpr_strvec_destroy(&v);
562
- grpc_core::ManagedMemorySlice result(tmp);
563
- gpr_free(tmp);
564
-
565
- return result;
559
+ std::string user_agent_string = absl::StrJoin(user_agent_fields, " ");
560
+ return grpc_core::ManagedMemorySlice(user_agent_string.c_str());
566
561
  }
567
562
 
568
563
  /* Constructor for channel_data */
@@ -53,13 +53,13 @@ void client_authority_start_transport_stream_op_batch(
53
53
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
54
54
  call_data* calld = static_cast<call_data*>(elem->call_data);
55
55
  // Handle send_initial_metadata.
56
- auto* initial_metadata =
57
- batch->payload->send_initial_metadata.send_initial_metadata;
58
56
  // If the initial metadata doesn't already contain :authority, add it.
59
57
  if (batch->send_initial_metadata &&
60
- initial_metadata->idx.named.authority == nullptr) {
58
+ batch->payload->send_initial_metadata.send_initial_metadata->idx.named
59
+ .authority == nullptr) {
61
60
  grpc_error* error = grpc_metadata_batch_add_head(
62
- initial_metadata, &calld->authority_storage,
61
+ batch->payload->send_initial_metadata.send_initial_metadata,
62
+ &calld->authority_storage,
63
63
  GRPC_MDELEM_REF(chand->default_authority_mdelem), GRPC_BATCH_AUTHORITY);
64
64
  if (error != GRPC_ERROR_NONE) {
65
65
  grpc_transport_stream_op_batch_finish_with_failure(batch, error,
@@ -22,26 +22,31 @@
22
22
 
23
23
  #include "src/core/ext/filters/http/client/http_client_filter.h"
24
24
  #include "src/core/ext/filters/http/message_compress/message_compress_filter.h"
25
+ #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
25
26
  #include "src/core/ext/filters/http/server/http_server_filter.h"
26
27
  #include "src/core/lib/channel/channel_stack_builder.h"
27
28
  #include "src/core/lib/surface/call.h"
28
29
  #include "src/core/lib/surface/channel_init.h"
29
30
  #include "src/core/lib/transport/transport_impl.h"
30
31
 
31
- typedef struct {
32
+ struct optional_filter {
32
33
  const grpc_channel_filter* filter;
33
34
  const char* control_channel_arg;
34
- } optional_filter;
35
+ };
35
36
 
36
37
  static optional_filter compress_filter = {
37
38
  &grpc_message_compress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION};
38
39
 
40
+ static optional_filter decompress_filter = {
41
+ &grpc_message_decompress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
42
+
39
43
  static bool is_building_http_like_transport(
40
44
  grpc_channel_stack_builder* builder) {
41
45
  grpc_transport* t = grpc_channel_stack_builder_get_transport(builder);
42
46
  return t != nullptr && strstr(t->vtable->name, "http");
43
47
  }
44
48
 
49
+ template <bool enable_in_minimal_stack>
45
50
  static bool maybe_add_optional_filter(grpc_channel_stack_builder* builder,
46
51
  void* arg) {
47
52
  if (!is_building_http_like_transport(builder)) return true;
@@ -50,7 +55,8 @@ static bool maybe_add_optional_filter(grpc_channel_stack_builder* builder,
50
55
  grpc_channel_stack_builder_get_channel_arguments(builder);
51
56
  bool enable = grpc_channel_arg_get_bool(
52
57
  grpc_channel_args_find(channel_args, filtarg->control_channel_arg),
53
- !grpc_channel_args_want_minimal_stack(channel_args));
58
+ enable_in_minimal_stack ||
59
+ !grpc_channel_args_want_minimal_stack(channel_args));
54
60
  return enable ? grpc_channel_stack_builder_prepend_filter(
55
61
  builder, filtarg->filter, nullptr, nullptr)
56
62
  : true;
@@ -66,15 +72,24 @@ static bool maybe_add_required_filter(grpc_channel_stack_builder* builder,
66
72
  }
67
73
 
68
74
  void grpc_http_filters_init(void) {
69
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
70
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
71
- maybe_add_optional_filter, &compress_filter);
72
- grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL,
73
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
74
- maybe_add_optional_filter, &compress_filter);
75
- grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL,
76
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
77
- maybe_add_optional_filter, &compress_filter);
75
+ grpc_channel_init_register_stage(
76
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
77
+ maybe_add_optional_filter<false>, &compress_filter);
78
+ grpc_channel_init_register_stage(
79
+ GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
80
+ maybe_add_optional_filter<false>, &compress_filter);
81
+ grpc_channel_init_register_stage(
82
+ GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
83
+ maybe_add_optional_filter<false>, &compress_filter);
84
+ grpc_channel_init_register_stage(
85
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
86
+ maybe_add_optional_filter<true>, &decompress_filter);
87
+ grpc_channel_init_register_stage(
88
+ GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
89
+ maybe_add_optional_filter<true>, &decompress_filter);
90
+ grpc_channel_init_register_stage(
91
+ GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
92
+ maybe_add_optional_filter<true>, &decompress_filter);
78
93
  grpc_channel_init_register_stage(
79
94
  GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
80
95
  maybe_add_required_filter, (void*)&grpc_http_client_filter);