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,13 +21,14 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/container/inlined_vector.h"
25
+
24
26
  #include "src/core/ext/filters/client_channel/lb_policy.h"
25
27
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
26
28
  #include "src/core/ext/filters/client_channel/resolver.h"
27
29
  #include "src/core/lib/channel/channel_args.h"
28
30
  #include "src/core/lib/channel/channel_stack.h"
29
31
  #include "src/core/lib/debug/trace.h"
30
- #include "src/core/lib/gprpp/inlined_vector.h"
31
32
  #include "src/core/lib/gprpp/orphanable.h"
32
33
  #include "src/core/lib/iomgr/call_combiner.h"
33
34
  #include "src/core/lib/iomgr/closure.h"
@@ -80,7 +81,7 @@ class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
80
81
  void ResetBackoffLocked() override;
81
82
 
82
83
  private:
83
- using TraceStringVector = InlinedVector<char*, 3>;
84
+ using TraceStringVector = absl::InlinedVector<const char*, 3>;
84
85
 
85
86
  class ResolverResultHandler;
86
87
  class ResolvingControlHelper;
@@ -98,7 +99,7 @@ class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
98
99
  void MaybeAddTraceMessagesForAddressChangesLocked(
99
100
  bool resolution_contains_addresses, TraceStringVector* trace_strings);
100
101
  void ConcatenateAndAddChannelTraceLocked(
101
- TraceStringVector* trace_strings) const;
102
+ const TraceStringVector& trace_strings) const;
102
103
  void OnResolverResultChangedLocked(Resolver::Result result);
103
104
 
104
105
  // Passed in from caller at construction time.
@@ -37,15 +37,12 @@ ServerAddress::ServerAddress(const void* address, size_t address_len,
37
37
  address_.len = static_cast<socklen_t>(address_len);
38
38
  }
39
39
 
40
- bool ServerAddress::operator==(const ServerAddress& other) const {
41
- return address_.len == other.address_.len &&
42
- memcmp(address_.addr, other.address_.addr, address_.len) == 0 &&
43
- grpc_channel_args_compare(args_, other.args_) == 0;
44
- }
45
-
46
- bool ServerAddress::IsBalancer() const {
47
- return grpc_channel_arg_get_bool(
48
- grpc_channel_args_find(args_, GRPC_ARG_ADDRESS_IS_BALANCER), false);
40
+ int ServerAddress::Cmp(const ServerAddress& other) const {
41
+ if (address_.len > other.address_.len) return 1;
42
+ if (address_.len < other.address_.len) return -1;
43
+ int retval = memcmp(address_.addr, other.address_.addr, address_.len);
44
+ if (retval != 0) return retval;
45
+ return grpc_channel_args_compare(args_, other.args_);
49
46
  }
50
47
 
51
48
  } // namespace grpc_core
@@ -21,17 +21,11 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/container/inlined_vector.h"
25
+
24
26
  #include "src/core/lib/channel/channel_args.h"
25
- #include "src/core/lib/gprpp/inlined_vector.h"
26
27
  #include "src/core/lib/iomgr/resolve_address.h"
27
28
 
28
- // Channel arg key for a bool indicating whether an address is a grpclb
29
- // load balancer (as opposed to a backend).
30
- #define GRPC_ARG_ADDRESS_IS_BALANCER "grpc.address_is_balancer"
31
-
32
- // Channel arg key for a string indicating an address's balancer name.
33
- #define GRPC_ARG_ADDRESS_BALANCER_NAME "grpc.address_balancer_name"
34
-
35
29
  namespace grpc_core {
36
30
 
37
31
  //
@@ -73,13 +67,13 @@ class ServerAddress {
73
67
  return *this;
74
68
  }
75
69
 
76
- bool operator==(const ServerAddress& other) const;
70
+ bool operator==(const ServerAddress& other) const { return Cmp(other) == 0; }
71
+
72
+ int Cmp(const ServerAddress& other) const;
77
73
 
78
74
  const grpc_resolved_address& address() const { return address_; }
79
75
  const grpc_channel_args* args() const { return args_; }
80
76
 
81
- bool IsBalancer() const;
82
-
83
77
  private:
84
78
  grpc_resolved_address address_;
85
79
  grpc_channel_args* args_;
@@ -89,7 +83,7 @@ class ServerAddress {
89
83
  // ServerAddressList
90
84
  //
91
85
 
92
- typedef InlinedVector<ServerAddress, 1> ServerAddressList;
86
+ typedef absl::InlinedVector<ServerAddress, 1> ServerAddressList;
93
87
 
94
88
  } // namespace grpc_core
95
89
 
@@ -18,30 +18,20 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/service_config.h"
20
20
 
21
- #include <string.h>
21
+ #include <string>
22
+
23
+ #include "absl/strings/str_cat.h"
22
24
 
23
- #include <grpc/impl/codegen/grpc_types.h>
24
- #include <grpc/support/alloc.h>
25
25
  #include <grpc/support/log.h>
26
- #include <grpc/support/string_util.h>
27
26
 
28
- #include "src/core/lib/gpr/string.h"
27
+ #include "src/core/ext/filters/client_channel/service_config_parser.h"
29
28
  #include "src/core/lib/json/json.h"
30
- #include "src/core/lib/slice/slice_hash_table.h"
31
29
  #include "src/core/lib/slice/slice_internal.h"
32
- #include "src/core/lib/slice/slice_string_helpers.h"
33
30
 
34
31
  namespace grpc_core {
35
32
 
36
- namespace {
37
- typedef InlinedVector<std::unique_ptr<ServiceConfig::Parser>,
38
- ServiceConfig::kNumPreallocatedParsers>
39
- ServiceConfigParserList;
40
- ServiceConfigParserList* g_registered_parsers;
41
- } // namespace
42
-
43
- RefCountedPtr<ServiceConfig> ServiceConfig::Create(StringView json_string,
44
- grpc_error** error) {
33
+ RefCountedPtr<ServiceConfig> ServiceConfig::Create(
34
+ absl::string_view json_string, grpc_error** error) {
45
35
  GPR_DEBUG_ASSERT(error != nullptr);
46
36
  Json json = Json::Parse(json_string, error);
47
37
  if (*error != GRPC_ERROR_NONE) return nullptr;
@@ -59,57 +49,40 @@ ServiceConfig::ServiceConfig(std::string json_string, Json json,
59
49
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON value is not an object");
60
50
  return;
61
51
  }
62
- grpc_error* error_list[2];
63
- int error_count = 0;
64
- grpc_error* global_error = ParseGlobalParams();
52
+ std::vector<grpc_error*> error_list;
53
+ grpc_error* global_error = GRPC_ERROR_NONE;
54
+ parsed_global_configs_ =
55
+ ServiceConfigParser::ParseGlobalParameters(json_, &global_error);
56
+ if (global_error != GRPC_ERROR_NONE) error_list.push_back(global_error);
65
57
  grpc_error* local_error = ParsePerMethodParams();
66
- if (global_error != GRPC_ERROR_NONE) {
67
- error_list[error_count++] = global_error;
68
- }
69
- if (local_error != GRPC_ERROR_NONE) {
70
- error_list[error_count++] = local_error;
71
- }
72
- if (error_count > 0) {
73
- *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
74
- "Service config parsing error", error_list, error_count);
75
- GRPC_ERROR_UNREF(global_error);
76
- GRPC_ERROR_UNREF(local_error);
58
+ if (local_error != GRPC_ERROR_NONE) error_list.push_back(local_error);
59
+ if (!error_list.empty()) {
60
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR("Service config parsing error",
61
+ &error_list);
77
62
  }
78
63
  }
79
64
 
80
- grpc_error* ServiceConfig::ParseGlobalParams() {
81
- std::vector<grpc_error*> error_list;
82
- for (size_t i = 0; i < g_registered_parsers->size(); i++) {
83
- grpc_error* parser_error = GRPC_ERROR_NONE;
84
- auto parsed_obj =
85
- (*g_registered_parsers)[i]->ParseGlobalParams(json_, &parser_error);
86
- if (parser_error != GRPC_ERROR_NONE) {
87
- error_list.push_back(parser_error);
88
- }
89
- parsed_global_configs_.push_back(std::move(parsed_obj));
65
+ ServiceConfig::~ServiceConfig() {
66
+ for (auto& p : parsed_method_configs_map_) {
67
+ grpc_slice_unref_internal(p.first);
90
68
  }
91
- return GRPC_ERROR_CREATE_FROM_VECTOR("Global Params", &error_list);
92
69
  }
93
70
 
94
- grpc_error* ServiceConfig::ParseJsonMethodConfigToServiceConfigVectorTable(
95
- const Json& json,
96
- InlinedVector<SliceHashTable<const ParsedConfigVector*>::Entry, 10>*
97
- entries) {
98
- auto objs_vector = absl::make_unique<ParsedConfigVector>();
99
- InlinedVector<grpc_error*, 4> error_list;
100
- for (size_t i = 0; i < g_registered_parsers->size(); i++) {
101
- grpc_error* parser_error = GRPC_ERROR_NONE;
102
- auto parsed_obj =
103
- (*g_registered_parsers)[i]->ParsePerMethodParams(json, &parser_error);
104
- if (parser_error != GRPC_ERROR_NONE) {
105
- error_list.push_back(parser_error);
106
- }
107
- objs_vector->push_back(std::move(parsed_obj));
108
- }
109
- parsed_method_config_vectors_storage_.push_back(std::move(objs_vector));
71
+ grpc_error* ServiceConfig::ParseJsonMethodConfig(const Json& json) {
72
+ std::vector<grpc_error*> error_list;
73
+ // Parse method config with each registered parser.
74
+ auto parsed_configs =
75
+ absl::make_unique<ServiceConfigParser::ParsedConfigVector>();
76
+ grpc_error* parser_error = GRPC_ERROR_NONE;
77
+ *parsed_configs =
78
+ ServiceConfigParser::ParsePerMethodParameters(json, &parser_error);
79
+ if (parser_error != GRPC_ERROR_NONE) {
80
+ error_list.push_back(parser_error);
81
+ }
82
+ parsed_method_config_vectors_storage_.push_back(std::move(parsed_configs));
110
83
  const auto* vector_ptr = parsed_method_config_vectors_storage_.back().get();
111
- // Construct list of paths.
112
- InlinedVector<UniquePtr<char>, 10> paths;
84
+ // Add an entry for each path.
85
+ bool found_name = false;
113
86
  auto it = json.object_value().find("name");
114
87
  if (it != json.object_value().end()) {
115
88
  if (it->second.type() != Json::Type::ARRAY) {
@@ -120,29 +93,42 @@ grpc_error* ServiceConfig::ParseJsonMethodConfigToServiceConfigVectorTable(
120
93
  const Json::Array& name_array = it->second.array_value();
121
94
  for (const Json& name : name_array) {
122
95
  grpc_error* parse_error = GRPC_ERROR_NONE;
123
- UniquePtr<char> path = ParseJsonMethodName(name, &parse_error);
124
- if (path == nullptr) {
96
+ std::string path = ParseJsonMethodName(name, &parse_error);
97
+ if (parse_error != GRPC_ERROR_NONE) {
125
98
  error_list.push_back(parse_error);
126
99
  } else {
127
- GPR_DEBUG_ASSERT(parse_error == GRPC_ERROR_NONE);
128
- paths.push_back(std::move(path));
100
+ found_name = true;
101
+ if (path.empty()) {
102
+ if (default_method_config_vector_ != nullptr) {
103
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
104
+ "field:name error:multiple default method configs"));
105
+ }
106
+ default_method_config_vector_ = vector_ptr;
107
+ } else {
108
+ grpc_slice key = grpc_slice_from_copied_string(path.c_str());
109
+ // If the key is not already present in the map, this will
110
+ // store a ref to the key in the map.
111
+ auto& value = parsed_method_configs_map_[key];
112
+ if (value != nullptr) {
113
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
114
+ "field:name error:multiple method configs with same name"));
115
+ // The map entry already existed, so we need to unref the
116
+ // key we just created.
117
+ grpc_slice_unref_internal(key);
118
+ } else {
119
+ value = vector_ptr;
120
+ }
121
+ }
129
122
  }
130
123
  }
131
124
  }
132
- if (paths.size() == 0) {
133
- error_list.push_back(
134
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No names specified"));
135
- }
136
- // Add entry for each path.
137
- for (size_t i = 0; i < paths.size(); ++i) {
138
- entries->push_back(
139
- {grpc_slice_from_copied_string(paths[i].get()), vector_ptr});
125
+ if (!found_name) {
126
+ parsed_method_config_vectors_storage_.pop_back();
140
127
  }
141
128
  return GRPC_ERROR_CREATE_FROM_VECTOR("methodConfig", &error_list);
142
129
  }
143
130
 
144
131
  grpc_error* ServiceConfig::ParsePerMethodParams() {
145
- InlinedVector<SliceHashTable<const ParsedConfigVector*>::Entry, 10> entries;
146
132
  std::vector<grpc_error*> error_list;
147
133
  auto it = json_.object_value().find("methodConfig");
148
134
  if (it != json_.object_value().end()) {
@@ -156,106 +142,80 @@ grpc_error* ServiceConfig::ParsePerMethodParams() {
156
142
  "field:methodConfig error:not of type Object"));
157
143
  continue;
158
144
  }
159
- grpc_error* error = ParseJsonMethodConfigToServiceConfigVectorTable(
160
- method_config, &entries);
145
+ grpc_error* error = ParseJsonMethodConfig(method_config);
161
146
  if (error != GRPC_ERROR_NONE) {
162
147
  error_list.push_back(error);
163
148
  }
164
149
  }
165
150
  }
166
- if (!entries.empty()) {
167
- parsed_method_configs_table_ =
168
- SliceHashTable<const ParsedConfigVector*>::Create(
169
- entries.size(), entries.data(), nullptr);
170
- }
171
151
  return GRPC_ERROR_CREATE_FROM_VECTOR("Method Params", &error_list);
172
152
  }
173
153
 
174
- UniquePtr<char> ServiceConfig::ParseJsonMethodName(const Json& json,
175
- grpc_error** error) {
154
+ std::string ServiceConfig::ParseJsonMethodName(const Json& json,
155
+ grpc_error** error) {
176
156
  if (json.type() != Json::Type::OBJECT) {
177
157
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
178
158
  "field:name error:type is not object");
179
- return nullptr;
159
+ return "";
180
160
  }
181
161
  // Find service name.
162
+ const std::string* service_name = nullptr;
182
163
  auto it = json.object_value().find("service");
183
- if (it == json.object_value().end()) {
184
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
185
- "field:name error: field:service error:not found");
186
- return nullptr; // Required field.
187
- }
188
- if (it->second.type() != Json::Type::STRING) {
189
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
190
- "field:name error: field:service error:not of type string");
191
- return nullptr;
192
- }
193
- if (it->second.string_value().empty()) {
194
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
195
- "field:name error: field:service error:empty value");
196
- return nullptr;
164
+ if (it != json.object_value().end() &&
165
+ it->second.type() != Json::Type::JSON_NULL) {
166
+ if (it->second.type() != Json::Type::STRING) {
167
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
168
+ "field:name error: field:service error:not of type string");
169
+ return "";
170
+ }
171
+ if (!it->second.string_value().empty()) {
172
+ service_name = &it->second.string_value();
173
+ }
197
174
  }
198
- const char* service_name = it->second.string_value().c_str();
199
- const char* method_name = nullptr;
175
+ const std::string* method_name = nullptr;
200
176
  // Find method name.
201
177
  it = json.object_value().find("method");
202
- if (it != json.object_value().end()) {
178
+ if (it != json.object_value().end() &&
179
+ it->second.type() != Json::Type::JSON_NULL) {
203
180
  if (it->second.type() != Json::Type::STRING) {
204
181
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
205
182
  "field:name error: field:method error:not of type string");
206
- return nullptr;
183
+ return "";
207
184
  }
208
- if (it->second.string_value().empty()) {
185
+ if (!it->second.string_value().empty()) {
186
+ method_name = &it->second.string_value();
187
+ }
188
+ }
189
+ // If neither service nor method are specified, it's the default.
190
+ // Method name may not be specified without service name.
191
+ if (service_name == nullptr) {
192
+ if (method_name != nullptr) {
209
193
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
210
- "field:name error: field:method error:empty value");
211
- return nullptr;
194
+ "field:name error:method name populated without service name");
212
195
  }
213
- method_name = it->second.string_value().c_str();
196
+ return "";
214
197
  }
215
- char* path;
216
- gpr_asprintf(&path, "/%s/%s", service_name,
217
- method_name == nullptr ? "" : method_name);
218
- return grpc_core::UniquePtr<char>(path);
198
+ // Construct path.
199
+ return absl::StrCat("/", *service_name, "/",
200
+ method_name == nullptr ? "" : *method_name);
219
201
  }
220
202
 
221
- const ServiceConfig::ParsedConfigVector*
222
- ServiceConfig::GetMethodParsedConfigVector(const grpc_slice& path) {
223
- if (parsed_method_configs_table_.get() == nullptr) {
224
- return nullptr;
225
- }
226
- const auto* value = parsed_method_configs_table_->Get(path);
203
+ const ServiceConfigParser::ParsedConfigVector*
204
+ ServiceConfig::GetMethodParsedConfigVector(const grpc_slice& path) const {
205
+ // Try looking up the full path in the map.
206
+ auto it = parsed_method_configs_map_.find(path);
207
+ if (it != parsed_method_configs_map_.end()) return it->second;
227
208
  // If we didn't find a match for the path, try looking for a wildcard
228
209
  // entry (i.e., change "/service/method" to "/service/").
229
- if (value == nullptr) {
230
- char* path_str = grpc_slice_to_c_string(path);
231
- const char* sep = strrchr(path_str, '/') + 1;
232
- const size_t len = (size_t)(sep - path_str);
233
- char* buf = (char*)gpr_malloc(len + 1); // trailing NUL
234
- memcpy(buf, path_str, len);
235
- buf[len] = '\0';
236
- grpc_slice wildcard_path = grpc_slice_from_copied_string(buf);
237
- gpr_free(buf);
238
- value = parsed_method_configs_table_->Get(wildcard_path);
239
- grpc_slice_unref_internal(wildcard_path);
240
- gpr_free(path_str);
241
- if (value == nullptr) return nullptr;
242
- }
243
- return *value;
244
- }
245
-
246
- size_t ServiceConfig::RegisterParser(std::unique_ptr<Parser> parser) {
247
- g_registered_parsers->push_back(std::move(parser));
248
- return g_registered_parsers->size() - 1;
249
- }
250
-
251
- void ServiceConfig::Init() {
252
- GPR_ASSERT(g_registered_parsers == nullptr);
253
- g_registered_parsers = new ServiceConfigParserList();
254
- }
255
-
256
- void ServiceConfig::Shutdown() {
257
- delete g_registered_parsers;
258
- g_registered_parsers = nullptr;
210
+ UniquePtr<char> path_str(grpc_slice_to_c_string(path));
211
+ char* sep = strrchr(path_str.get(), '/') + 1;
212
+ if (sep == nullptr) return nullptr; // Shouldn't ever happen.
213
+ *sep = '\0';
214
+ grpc_slice wildcard_path = grpc_slice_from_static_string(path_str.get());
215
+ it = parsed_method_configs_map_.find(wildcard_path);
216
+ if (it != parsed_method_configs_map_.end()) return it->second;
217
+ // Try default method config, if set.
218
+ return default_method_config_vector_;
259
219
  }
260
220
 
261
221
  } // namespace grpc_core
@@ -19,15 +19,19 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <unordered_map>
23
+
24
+ #include "absl/container/inlined_vector.h"
25
+
22
26
  #include <grpc/impl/codegen/grpc_types.h>
23
27
  #include <grpc/support/string_util.h>
24
28
 
25
- #include "src/core/lib/gprpp/inlined_vector.h"
29
+ #include "src/core/ext/filters/client_channel/service_config_parser.h"
26
30
  #include "src/core/lib/gprpp/ref_counted.h"
27
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
32
  #include "src/core/lib/iomgr/error.h"
29
33
  #include "src/core/lib/json/json.h"
30
- #include "src/core/lib/slice/slice_hash_table.h"
34
+ #include "src/core/lib/slice/slice_internal.h"
31
35
 
32
36
  // The main purpose of the code here is to parse the service config in
33
37
  // JSON form, which will look like this:
@@ -55,87 +59,24 @@
55
59
 
56
60
  namespace grpc_core {
57
61
 
62
+ // TODO(roth): Consider stripping this down further to the completely minimal
63
+ // interface requied to be exposed as part of the resolver API.
58
64
  class ServiceConfig : public RefCounted<ServiceConfig> {
59
65
  public:
60
- /// This is the base class that all service config parsers MUST use to store
61
- /// parsed service config data.
62
- class ParsedConfig {
63
- public:
64
- virtual ~ParsedConfig() = default;
65
- };
66
-
67
- /// This is the base class that all service config parsers should derive from.
68
- class Parser {
69
- public:
70
- virtual ~Parser() = default;
71
-
72
- virtual std::unique_ptr<ParsedConfig> ParseGlobalParams(
73
- const Json& /* json */, grpc_error** error) {
74
- // Avoid unused parameter warning on debug-only parameter
75
- (void)error;
76
- GPR_DEBUG_ASSERT(error != nullptr);
77
- return nullptr;
78
- }
79
-
80
- virtual std::unique_ptr<ParsedConfig> ParsePerMethodParams(
81
- const Json& /* json */, grpc_error** error) {
82
- // Avoid unused parameter warning on debug-only parameter
83
- (void)error;
84
- GPR_DEBUG_ASSERT(error != nullptr);
85
- return nullptr;
86
- }
87
- };
88
-
89
- static constexpr int kNumPreallocatedParsers = 4;
90
- typedef InlinedVector<std::unique_ptr<ParsedConfig>, kNumPreallocatedParsers>
91
- ParsedConfigVector;
92
-
93
- /// When a service config is applied to a call in the client_channel_filter,
94
- /// we create an instance of this object and store it in the call_data for
95
- /// client_channel. A pointer to this object is also stored in the
96
- /// call_context, so that future filters can easily access method and global
97
- /// parameters for the call.
98
- class CallData {
99
- public:
100
- CallData() = default;
101
- CallData(RefCountedPtr<ServiceConfig> svc_cfg, const grpc_slice& path)
102
- : service_config_(std::move(svc_cfg)) {
103
- if (service_config_ != nullptr) {
104
- method_params_vector_ =
105
- service_config_->GetMethodParsedConfigVector(path);
106
- }
107
- }
108
-
109
- ServiceConfig* service_config() { return service_config_.get(); }
110
-
111
- ParsedConfig* GetMethodParsedConfig(size_t index) const {
112
- return method_params_vector_ != nullptr
113
- ? (*method_params_vector_)[index].get()
114
- : nullptr;
115
- }
116
-
117
- ParsedConfig* GetGlobalParsedConfig(size_t index) const {
118
- return service_config_->GetGlobalParsedConfig(index);
119
- }
120
-
121
- private:
122
- RefCountedPtr<ServiceConfig> service_config_;
123
- const ParsedConfigVector* method_params_vector_ = nullptr;
124
- };
125
-
126
66
  /// Creates a new service config from parsing \a json_string.
127
67
  /// Returns null on parse error.
128
- static RefCountedPtr<ServiceConfig> Create(StringView json_string,
68
+ static RefCountedPtr<ServiceConfig> Create(absl::string_view json_string,
129
69
  grpc_error** error);
130
70
 
131
71
  ServiceConfig(std::string json_string, Json json, grpc_error** error);
72
+ ~ServiceConfig();
132
73
 
133
74
  const std::string& json_string() const { return json_string_; }
134
75
 
135
76
  /// Retrieves the global parsed config at index \a index. The
136
77
  /// lifetime of the returned object is tied to the lifetime of the
137
78
  /// ServiceConfig object.
138
- ParsedConfig* GetGlobalParsedConfig(size_t index) {
79
+ ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(size_t index) {
139
80
  GPR_DEBUG_ASSERT(index < parsed_global_configs_.size());
140
81
  return parsed_global_configs_[index].get();
141
82
  }
@@ -143,48 +84,37 @@ class ServiceConfig : public RefCounted {
143
84
  /// Retrieves the vector of parsed configs for the method identified
144
85
  /// by \a path. The lifetime of the returned vector and contained objects
145
86
  /// is tied to the lifetime of the ServiceConfig object.
146
- const ParsedConfigVector* GetMethodParsedConfigVector(const grpc_slice& path);
147
-
148
- /// Globally register a service config parser. On successful registration, it
149
- /// returns the index at which the parser was registered. On failure, -1 is
150
- /// returned. Each new service config update will go through all the
151
- /// registered parser. Each parser is responsible for reading the service
152
- /// config json and returning a parsed config. This parsed config can later be
153
- /// retrieved using the same index that was returned at registration time.
154
- static size_t RegisterParser(std::unique_ptr<Parser> parser);
155
-
156
- static void Init();
157
-
158
- static void Shutdown();
87
+ const ServiceConfigParser::ParsedConfigVector* GetMethodParsedConfigVector(
88
+ const grpc_slice& path) const;
159
89
 
160
90
  private:
161
- // Helper functions to parse the service config
162
- grpc_error* ParseGlobalParams();
91
+ // Helper functions for parsing the method configs.
163
92
  grpc_error* ParsePerMethodParams();
93
+ grpc_error* ParseJsonMethodConfig(const Json& json);
164
94
 
165
- // Returns a path string for the JSON name object specified by \a json.
166
- // Returns null on error, and stores error in \a error.
167
- static UniquePtr<char> ParseJsonMethodName(const Json& json,
168
- grpc_error** error);
169
-
170
- grpc_error* ParseJsonMethodConfigToServiceConfigVectorTable(
171
- const Json& json,
172
- InlinedVector<SliceHashTable<const ParsedConfigVector*>::Entry, 10>*
173
- entries);
95
+ // Returns a path string for the JSON name object specified by json.
96
+ // Sets *error on error.
97
+ static std::string ParseJsonMethodName(const Json& json, grpc_error** error);
174
98
 
175
99
  std::string json_string_;
176
100
  Json json_;
177
101
 
178
- InlinedVector<std::unique_ptr<ParsedConfig>, kNumPreallocatedParsers>
102
+ absl::InlinedVector<std::unique_ptr<ServiceConfigParser::ParsedConfig>,
103
+ ServiceConfigParser::kNumPreallocatedParsers>
179
104
  parsed_global_configs_;
180
105
  // A map from the method name to the parsed config vector. Note that we are
181
106
  // using a raw pointer and not a unique pointer so that we can use the same
182
107
  // vector for multiple names.
183
- RefCountedPtr<SliceHashTable<const ParsedConfigVector*>>
184
- parsed_method_configs_table_;
108
+ std::unordered_map<grpc_slice, const ServiceConfigParser::ParsedConfigVector*,
109
+ SliceHash>
110
+ parsed_method_configs_map_;
111
+ // Default method config.
112
+ const ServiceConfigParser::ParsedConfigVector* default_method_config_vector_ =
113
+ nullptr;
185
114
  // Storage for all the vectors that are being used in
186
115
  // parsed_method_configs_table_.
187
- InlinedVector<std::unique_ptr<ParsedConfigVector>, 32>
116
+ absl::InlinedVector<std::unique_ptr<ServiceConfigParser::ParsedConfigVector>,
117
+ 32>
188
118
  parsed_method_config_vectors_storage_;
189
119
  };
190
120