grpc 1.47.0 → 1.48.0.pre1

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

Potentially problematic release.


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

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -0,0 +1,291 @@
1
+ //
2
+ // Copyright 2022 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/xds/xds_lb_policy_registry.h"
20
+
21
+ #include <stddef.h>
22
+
23
+ #include <string>
24
+ #include <type_traits>
25
+ #include <utility>
26
+ #include <vector>
27
+
28
+ #include "absl/memory/memory.h"
29
+ #include "absl/status/status.h"
30
+ #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/str_format.h"
32
+ #include "envoy/config/core/v3/extension.upb.h"
33
+ #include "envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h"
34
+ #include "envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h"
35
+ #include "google/protobuf/any.upb.h"
36
+ #include "google/protobuf/struct.upb.h"
37
+ #include "google/protobuf/struct.upbdefs.h"
38
+ #include "google/protobuf/wrappers.upb.h"
39
+ #include "upb/json_encode.h"
40
+ #include "upb/upb.h"
41
+ #include "upb/upb.hpp"
42
+ #include "xds/type/v3/typed_struct.upb.h"
43
+
44
+ #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
45
+ #include "src/core/ext/xds/upb_utils.h"
46
+ #include "src/core/ext/xds/xds_common_types.h"
47
+ #include "src/core/lib/iomgr/error.h"
48
+
49
+ namespace grpc_core {
50
+
51
+ namespace {
52
+
53
+ class RingHashLbPolicyConfigFactory
54
+ : public XdsLbPolicyRegistry::ConfigFactory {
55
+ public:
56
+ absl::StatusOr<Json::Object> ConvertXdsLbPolicyConfig(
57
+ const XdsEncodingContext& context, absl::string_view configuration,
58
+ int /* recursion_depth */) override {
59
+ const auto* resource =
60
+ envoy_extensions_load_balancing_policies_ring_hash_v3_RingHash_parse(
61
+ configuration.data(), configuration.size(), context.arena);
62
+ if (resource == nullptr) {
63
+ return absl::InvalidArgumentError(
64
+ "Can't decode RingHash loadbalancing policy");
65
+ }
66
+ if (envoy_extensions_load_balancing_policies_ring_hash_v3_RingHash_hash_function(
67
+ resource) !=
68
+ envoy_extensions_load_balancing_policies_ring_hash_v3_RingHash_XX_HASH) {
69
+ return absl::InvalidArgumentError(
70
+ "Invalid hash function provided for RingHash loadbalancing policy. "
71
+ "Only XX_HASH is supported.");
72
+ }
73
+ Json::Object json;
74
+ const auto* min_ring_size =
75
+ envoy_extensions_load_balancing_policies_ring_hash_v3_RingHash_minimum_ring_size(
76
+ resource);
77
+ if (min_ring_size != nullptr) {
78
+ json.emplace("minRingSize",
79
+ google_protobuf_UInt64Value_value(min_ring_size));
80
+ }
81
+ const auto* max_ring_size =
82
+ envoy_extensions_load_balancing_policies_ring_hash_v3_RingHash_maximum_ring_size(
83
+ resource);
84
+ if (max_ring_size != nullptr) {
85
+ json.emplace("maxRingSize",
86
+ google_protobuf_UInt64Value_value(max_ring_size));
87
+ }
88
+ return Json::Object{{"ring_hash_experimental", std::move(json)}};
89
+ }
90
+
91
+ absl::string_view type() override { return Type(); }
92
+
93
+ static absl::string_view Type() {
94
+ return "envoy.extensions.load_balancing_policies.ring_hash.v3.RingHash";
95
+ }
96
+ };
97
+
98
+ class RoundRobinLbPolicyConfigFactory
99
+ : public XdsLbPolicyRegistry::ConfigFactory {
100
+ public:
101
+ absl::StatusOr<Json::Object> ConvertXdsLbPolicyConfig(
102
+ const XdsEncodingContext& /* context */,
103
+ absl::string_view /* configuration */,
104
+ int /* recursion_depth */) override {
105
+ return Json::Object{{"round_robin", Json::Object()}};
106
+ }
107
+
108
+ absl::string_view type() override { return Type(); }
109
+
110
+ static absl::string_view Type() {
111
+ return "envoy.extensions.load_balancing_policies.round_robin.v3.RoundRobin";
112
+ }
113
+ };
114
+
115
+ class WrrLocalityLbPolicyConfigFactory
116
+ : public XdsLbPolicyRegistry::ConfigFactory {
117
+ public:
118
+ absl::StatusOr<Json::Object> ConvertXdsLbPolicyConfig(
119
+ const XdsEncodingContext& context, absl::string_view configuration,
120
+ int recursion_depth) override {
121
+ const auto* resource =
122
+ envoy_extensions_load_balancing_policies_wrr_locality_v3_WrrLocality_parse(
123
+ configuration.data(), configuration.size(), context.arena);
124
+ if (resource == nullptr) {
125
+ return absl::InvalidArgumentError(
126
+ "Can't decode WrrLocality loadbalancing policy");
127
+ }
128
+ const auto* endpoint_picking_policy =
129
+ envoy_extensions_load_balancing_policies_wrr_locality_v3_WrrLocality_endpoint_picking_policy(
130
+ resource);
131
+ if (endpoint_picking_policy == nullptr) {
132
+ return absl::InvalidArgumentError(
133
+ "WrrLocality: endpoint_picking_policy not found");
134
+ }
135
+ auto child_policy = XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig(
136
+ context, endpoint_picking_policy, recursion_depth + 1);
137
+ if (!child_policy.ok()) {
138
+ return absl::InvalidArgumentError(
139
+ absl::StrCat("Error parsing WrrLocality load balancing policy: ",
140
+ child_policy.status().message()));
141
+ }
142
+ return Json::Object{
143
+ {"xds_wrr_locality_experimental",
144
+ Json::Object{{"child_policy", *std::move(child_policy)}}}};
145
+ }
146
+
147
+ absl::string_view type() override { return Type(); }
148
+
149
+ static absl::string_view Type() {
150
+ return "envoy.extensions.load_balancing_policies.wrr_locality.v3."
151
+ "WrrLocality";
152
+ }
153
+ };
154
+
155
+ absl::StatusOr<Json> ParseStructToJson(const XdsEncodingContext& context,
156
+ const google_protobuf_Struct* resource) {
157
+ upb::Status status;
158
+ const auto* msg_def = google_protobuf_Struct_getmsgdef(context.symtab);
159
+ size_t json_size = upb_JsonEncode(resource, msg_def, context.symtab, 0,
160
+ nullptr, 0, status.ptr());
161
+ if (json_size == static_cast<size_t>(-1)) {
162
+ return absl::InvalidArgumentError(
163
+ absl::StrCat("Error parsing google::Protobuf::Struct: ",
164
+ upb_Status_ErrorMessage(status.ptr())));
165
+ }
166
+ void* buf = upb_Arena_Malloc(context.arena, json_size + 1);
167
+ upb_JsonEncode(resource, msg_def, context.symtab, 0,
168
+ reinterpret_cast<char*>(buf), json_size + 1, status.ptr());
169
+ grpc_error_handle error = GRPC_ERROR_NONE;
170
+ auto json = Json::Parse(reinterpret_cast<char*>(buf), &error);
171
+ if (!GRPC_ERROR_IS_NONE(error)) {
172
+ // This should not happen
173
+ auto ret_status = absl::InternalError(
174
+ absl::StrCat("Error parsing JSON form of google::Protobuf::Struct "
175
+ "produced by upb library: ",
176
+ grpc_error_std_string(error)));
177
+ GRPC_ERROR_UNREF(error);
178
+ return ret_status;
179
+ }
180
+ return json;
181
+ }
182
+
183
+ } // namespace
184
+
185
+ //
186
+ // XdsLbPolicyRegistry
187
+ //
188
+
189
+ absl::StatusOr<Json::Array> XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig(
190
+ const XdsEncodingContext& context,
191
+ const envoy_config_cluster_v3_LoadBalancingPolicy* lb_policy,
192
+ int recursion_depth) {
193
+ constexpr int kMaxRecursionDepth = 16;
194
+ if (recursion_depth >= kMaxRecursionDepth) {
195
+ return absl::InvalidArgumentError(
196
+ absl::StrFormat("LoadBalancingPolicy configuration has a recursion "
197
+ "depth of more than %d.",
198
+ kMaxRecursionDepth));
199
+ }
200
+ size_t size = 0;
201
+ const auto* policies =
202
+ envoy_config_cluster_v3_LoadBalancingPolicy_policies(lb_policy, &size);
203
+ for (size_t i = 0; i < size; ++i) {
204
+ absl::StatusOr<Json::Object> policy;
205
+ const auto* typed_extension_config =
206
+ envoy_config_cluster_v3_LoadBalancingPolicy_Policy_typed_extension_config(
207
+ policies[i]);
208
+ if (typed_extension_config == nullptr) {
209
+ return absl::InvalidArgumentError(
210
+ "Error parsing LoadBalancingPolicy::Policy - Missing "
211
+ "typed_extension_config field");
212
+ }
213
+ const auto* typed_config =
214
+ envoy_config_core_v3_TypedExtensionConfig_typed_config(
215
+ typed_extension_config);
216
+ if (typed_config == nullptr) {
217
+ return absl::InvalidArgumentError(
218
+ "Error parsing LoadBalancingPolicy::Policy - Missing "
219
+ "TypedExtensionConfig::typed_config field");
220
+ }
221
+ auto type = ExtractExtensionTypeName(context, typed_config);
222
+ if (!type.ok()) {
223
+ return absl::InvalidArgumentError(absl::StrCat(
224
+ "Error parsing "
225
+ "LoadBalancingPolicy::Policy::TypedExtensionConfig::typed_config: ",
226
+ type.status().message()));
227
+ }
228
+ absl::string_view value =
229
+ UpbStringToAbsl(google_protobuf_Any_value(typed_config));
230
+ auto config_factory_it = Get()->policy_config_factories_.find(type->type);
231
+ if (config_factory_it != Get()->policy_config_factories_.end()) {
232
+ policy = config_factory_it->second->ConvertXdsLbPolicyConfig(
233
+ context, value, recursion_depth);
234
+ if (!policy.ok()) {
235
+ return absl::InvalidArgumentError(
236
+ absl::StrCat("Error parsing "
237
+ "LoadBalancingPolicy::Policy::TypedExtensionConfig::"
238
+ "typed_config to JSON: ",
239
+ policy.status().message()));
240
+ }
241
+ } else if (type->typed_struct != nullptr) {
242
+ // Custom lb policy config
243
+ std::string custom_type = std::string(type->type);
244
+ if (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
245
+ custom_type.c_str(), nullptr)) {
246
+ // Skip unsupported custom lb policy.
247
+ continue;
248
+ }
249
+ // Convert typed struct to json.
250
+ auto value = xds_type_v3_TypedStruct_value(type->typed_struct);
251
+ if (value == nullptr) {
252
+ policy = Json::Object{{std::move(custom_type), Json() /* null */}};
253
+ } else {
254
+ auto parsed_value = ParseStructToJson(context, value);
255
+ if (!parsed_value.ok()) {
256
+ return absl::InvalidArgumentError(absl::StrCat(
257
+ "Error parsing LoadBalancingPolicy: Custom Policy: ", custom_type,
258
+ ": ", parsed_value.status().message()));
259
+ }
260
+ policy =
261
+ Json::Object{{std::move(custom_type), *(std::move(parsed_value))}};
262
+ }
263
+ } else {
264
+ // Unsupported type. Skipping entry.
265
+ continue;
266
+ }
267
+ return Json::Array{std::move(policy.value())};
268
+ }
269
+ return absl::InvalidArgumentError(
270
+ "No supported load balancing policy config found.");
271
+ }
272
+
273
+ XdsLbPolicyRegistry::XdsLbPolicyRegistry() {
274
+ policy_config_factories_.emplace(
275
+ RingHashLbPolicyConfigFactory::Type(),
276
+ absl::make_unique<RingHashLbPolicyConfigFactory>());
277
+ policy_config_factories_.emplace(
278
+ RoundRobinLbPolicyConfigFactory::Type(),
279
+ absl::make_unique<RoundRobinLbPolicyConfigFactory>());
280
+ policy_config_factories_.emplace(
281
+ WrrLocalityLbPolicyConfigFactory::Type(),
282
+ absl::make_unique<WrrLocalityLbPolicyConfigFactory>());
283
+ }
284
+
285
+ XdsLbPolicyRegistry* XdsLbPolicyRegistry::Get() {
286
+ // This is thread-safe since C++11
287
+ static XdsLbPolicyRegistry* instance = new XdsLbPolicyRegistry();
288
+ return instance;
289
+ }
290
+
291
+ } // namespace grpc_core
@@ -0,0 +1,72 @@
1
+ //
2
+ // Copyright 2022 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_LB_POLICY_REGISTRY_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_LB_POLICY_REGISTRY_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <map>
23
+ #include <memory>
24
+
25
+ #include "absl/status/statusor.h"
26
+ #include "absl/strings/string_view.h"
27
+ #include "envoy/config/cluster/v3/cluster.upb.h"
28
+
29
+ #include "src/core/ext/xds/upb_utils.h"
30
+ #include "src/core/lib/json/json.h"
31
+
32
+ namespace grpc_core {
33
+
34
+ // A registry that maintans a set of converters that are able to map xDS
35
+ // loadbalancing policy configurations to gRPC's JSON format.
36
+ class XdsLbPolicyRegistry {
37
+ public:
38
+ class ConfigFactory {
39
+ public:
40
+ virtual ~ConfigFactory() {}
41
+ virtual absl::StatusOr<Json::Object> ConvertXdsLbPolicyConfig(
42
+ const XdsEncodingContext& context, absl::string_view configuration,
43
+ int recursion_depth) = 0;
44
+
45
+ virtual absl::string_view type() = 0;
46
+ };
47
+
48
+ // Converts an xDS cluster load balancing policy message to gRPC's JSON
49
+ // format. An error is returned if none of the lb policies in the list are
50
+ // supported, or if a supported lb policy configuration conversion fails. \a
51
+ // recursion_depth indicates the current depth of the tree if lb_policy
52
+ // configuration recursively holds other lb policies.
53
+ static absl::StatusOr<Json::Array> ConvertXdsLbPolicyConfig(
54
+ const XdsEncodingContext& context,
55
+ const envoy_config_cluster_v3_LoadBalancingPolicy* lb_policy,
56
+ int recursion_depth = 0);
57
+
58
+ private:
59
+ XdsLbPolicyRegistry();
60
+
61
+ static XdsLbPolicyRegistry* Get();
62
+
63
+ // A map of config factories that goes from the type of the lb policy config
64
+ // to the config factory.
65
+ std::map<absl::string_view /* Owned by ConfigFactory */,
66
+ std::unique_ptr<ConfigFactory>>
67
+ policy_config_factories_;
68
+ };
69
+
70
+ } // namespace grpc_core
71
+
72
+ #endif // GRPC_CORE_EXT_XDS_XDS_LB_POLICY_REGISTRY_H
@@ -18,10 +18,17 @@
18
18
 
19
19
  #include "src/core/ext/xds/xds_listener.h"
20
20
 
21
+ #include <stdint.h>
22
+
23
+ #include <set>
24
+ #include <type_traits>
25
+ #include <utility>
26
+
27
+ #include "absl/memory/memory.h"
28
+ #include "absl/status/status.h"
21
29
  #include "absl/strings/str_cat.h"
22
30
  #include "absl/strings/str_format.h"
23
31
  #include "absl/strings/str_join.h"
24
- #include "absl/strings/str_split.h"
25
32
  #include "envoy/config/core/v3/address.upb.h"
26
33
  #include "envoy/config/core/v3/base.upb.h"
27
34
  #include "envoy/config/core/v3/config_source.upb.h"
@@ -30,18 +37,29 @@
30
37
  #include "envoy/config/listener/v3/listener.upb.h"
31
38
  #include "envoy/config/listener/v3/listener.upbdefs.h"
32
39
  #include "envoy/config/listener/v3/listener_components.upb.h"
40
+ #include "envoy/config/route/v3/route.upb.h"
33
41
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
34
42
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
43
+ #include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
44
+ #include "google/protobuf/any.upb.h"
45
+ #include "google/protobuf/duration.upb.h"
35
46
  #include "google/protobuf/wrappers.upb.h"
36
47
  #include "upb/text_encode.h"
37
48
  #include "upb/upb.h"
38
- #include "upb/upb.hpp"
49
+
50
+ #include <grpc/support/log.h>
39
51
 
40
52
  #include "src/core/ext/xds/xds_common_types.h"
53
+ #include "src/core/ext/xds/xds_resource_type.h"
41
54
  #include "src/core/lib/address_utils/parse_address.h"
42
55
  #include "src/core/lib/address_utils/sockaddr_utils.h"
56
+ #include "src/core/lib/debug/trace.h"
43
57
  #include "src/core/lib/gprpp/host_port.h"
58
+ #include "src/core/lib/gprpp/status_helper.h"
59
+ #include "src/core/lib/iomgr/error.h"
44
60
  #include "src/core/lib/iomgr/sockaddr.h"
61
+ #include "src/core/lib/json/json.h"
62
+ #include "src/core/lib/transport/error_utils.h"
45
63
 
46
64
  namespace grpc_core {
47
65
 
@@ -64,7 +82,7 @@ bool XdsListenerResource::DownstreamTlsContext::Empty() const {
64
82
  //
65
83
 
66
84
  std::string XdsListenerResource::HttpConnectionManager::ToString() const {
67
- absl::InlinedVector<std::string, 4> contents;
85
+ std::vector<std::string> contents;
68
86
  contents.push_back(absl::StrFormat(
69
87
  "route_config_name=%s",
70
88
  !route_config_name.empty() ? route_config_name.c_str() : "<inlined>"));
@@ -140,7 +158,7 @@ struct FilterChain {
140
158
  };
141
159
 
142
160
  std::string FilterChain::FilterChainMatch::ToString() const {
143
- absl::InlinedVector<std::string, 8> contents;
161
+ std::vector<std::string> contents;
144
162
  if (destination_port != 0) {
145
163
  contents.push_back(absl::StrCat("destination_port=", destination_port));
146
164
  }
@@ -229,7 +247,7 @@ std::string XdsListenerResource::FilterChainMap::ToString() const {
229
247
  //
230
248
 
231
249
  std::string XdsListenerResource::ToString() const {
232
- absl::InlinedVector<std::string, 4> contents;
250
+ std::vector<std::string> contents;
233
251
  if (type == ListenerType::kTcpListener) {
234
252
  contents.push_back(absl::StrCat("address=", address));
235
253
  contents.push_back(
@@ -332,30 +350,30 @@ grpc_error_handle HttpConnectionManagerParse(
332
350
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(
333
351
  absl::StrCat("no filter config specified for filter name ", name));
334
352
  }
335
- absl::string_view filter_type;
336
- grpc_error_handle error =
337
- ExtractExtensionTypeName(context, any, &filter_type);
338
- if (error != GRPC_ERROR_NONE) return error;
353
+ auto filter_type = ExtractExtensionTypeName(context, any);
354
+ if (!filter_type.ok()) {
355
+ return absl_status_to_grpc_error(filter_type.status());
356
+ }
339
357
  const XdsHttpFilterImpl* filter_impl =
340
- XdsHttpFilterRegistry::GetFilterForType(filter_type);
358
+ XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
341
359
  if (filter_impl == nullptr) {
342
360
  if (is_optional) continue;
343
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
344
- absl::StrCat("no filter registered for config type ", filter_type));
361
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
362
+ "no filter registered for config type ", filter_type->type));
345
363
  }
346
364
  if ((is_client && !filter_impl->IsSupportedOnClients()) ||
347
365
  (!is_client && !filter_impl->IsSupportedOnServers())) {
348
366
  if (is_optional) continue;
349
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
350
- absl::StrFormat("Filter %s is not supported on %s", filter_type,
351
- is_client ? "clients" : "servers"));
367
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
368
+ "Filter %s is not supported on %s", filter_type->type,
369
+ is_client ? "clients" : "servers"));
352
370
  }
353
371
  absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
354
372
  filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
355
373
  context.arena);
356
374
  if (!filter_config.ok()) {
357
375
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
358
- "filter config for type ", filter_type,
376
+ "filter config for type ", filter_type->type,
359
377
  " failed to parse: ", StatusToString(filter_config.status())));
360
378
  }
361
379
  http_connection_manager->http_filters.emplace_back(
@@ -414,7 +432,7 @@ grpc_error_handle HttpConnectionManagerParse(
414
432
  XdsRouteConfigResource rds_update;
415
433
  grpc_error_handle error =
416
434
  XdsRouteConfigResource::Parse(context, route_config, &rds_update);
417
- if (error != GRPC_ERROR_NONE) return error;
435
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
418
436
  http_connection_manager->rds_update = std::move(rds_update);
419
437
  return GRPC_ERROR_NONE;
420
438
  }
@@ -498,7 +516,7 @@ grpc_error_handle DownstreamTlsContextParse(
498
516
  grpc_error_handle error =
499
517
  CommonTlsContext::Parse(context, common_tls_context,
500
518
  &downstream_tls_context->common_tls_context);
501
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
519
+ if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
502
520
  }
503
521
  auto* require_client_certificate =
504
522
  envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
@@ -551,7 +569,7 @@ grpc_error_handle CidrRangeParse(
551
569
  envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
552
570
  grpc_error_handle error =
553
571
  grpc_string_to_sockaddr(&cidr_range->address, address_prefix.c_str(), 0);
554
- if (error != GRPC_ERROR_NONE) return error;
572
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
555
573
  cidr_range->prefix_len = 0;
556
574
  auto* prefix_len_proto =
557
575
  envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
@@ -585,7 +603,7 @@ grpc_error_handle FilterChainMatchParse(
585
603
  for (size_t i = 0; i < size; i++) {
586
604
  XdsListenerResource::FilterChainMap::CidrRange cidr_range;
587
605
  grpc_error_handle error = CidrRangeParse(prefix_ranges[i], &cidr_range);
588
- if (error != GRPC_ERROR_NONE) return error;
606
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
589
607
  filter_chain_match->prefix_ranges.push_back(cidr_range);
590
608
  }
591
609
  filter_chain_match->source_type =
@@ -600,7 +618,7 @@ grpc_error_handle FilterChainMatchParse(
600
618
  XdsListenerResource::FilterChainMap::CidrRange cidr_range;
601
619
  grpc_error_handle error =
602
620
  CidrRangeParse(source_prefix_ranges[i], &cidr_range);
603
- if (error != GRPC_ERROR_NONE) return error;
621
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
604
622
  filter_chain_match->source_prefix_ranges.push_back(cidr_range);
605
623
  }
606
624
  auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
@@ -639,7 +657,7 @@ grpc_error_handle FilterChainParse(
639
657
  if (filter_chain_match != nullptr) {
640
658
  grpc_error_handle error = FilterChainMatchParse(
641
659
  filter_chain_match, &filter_chain->filter_chain_match);
642
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
660
+ if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
643
661
  }
644
662
  filter_chain->filter_chain_data =
645
663
  std::make_shared<XdsListenerResource::FilterChainData>();
@@ -681,7 +699,7 @@ grpc_error_handle FilterChainParse(
681
699
  grpc_error_handle error = HttpConnectionManagerParse(
682
700
  false /* is_client */, context, http_connection_manager, is_v2,
683
701
  &filter_chain->filter_chain_data->http_connection_manager);
684
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
702
+ if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
685
703
  }
686
704
  }
687
705
  }
@@ -692,7 +710,7 @@ grpc_error_handle FilterChainParse(
692
710
  grpc_error_handle error = DownstreamTlsContextParse(
693
711
  context, transport_socket,
694
712
  &filter_chain->filter_chain_data->downstream_tls_context);
695
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
713
+ if (!GRPC_ERROR_IS_NONE(error)) errors.push_back(error);
696
714
  }
697
715
  return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing FilterChain", &errors);
698
716
  }
@@ -761,7 +779,7 @@ grpc_error_handle AddFilterChainDataForSourcePorts(
761
779
  for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
762
780
  grpc_error_handle error =
763
781
  AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
764
- if (error != GRPC_ERROR_NONE) return error;
782
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
765
783
  }
766
784
  }
767
785
  return GRPC_ERROR_NONE;
@@ -790,7 +808,7 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
790
808
  }
791
809
  grpc_error_handle error = AddFilterChainDataForSourcePorts(
792
810
  filter_chain, &insert_result.first->second.ports_map);
793
- if (error != GRPC_ERROR_NONE) return error;
811
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
794
812
  }
795
813
  }
796
814
  return GRPC_ERROR_NONE;
@@ -877,7 +895,7 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
877
895
  }
878
896
  grpc_error_handle error = AddFilterChainDataForServerNames(
879
897
  filter_chain, &insert_result.first->second);
880
- if (error != GRPC_ERROR_NONE) return error;
898
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
881
899
  }
882
900
  }
883
901
  return GRPC_ERROR_NONE;
@@ -911,7 +929,7 @@ grpc_error_handle BuildFilterChainMap(
911
929
  if (filter_chain.filter_chain_match.destination_port != 0) continue;
912
930
  grpc_error_handle error = AddFilterChainDataForDestinationIpRange(
913
931
  filter_chain, &internal_filter_chain_map.destination_ip_map);
914
- if (error != GRPC_ERROR_NONE) return error;
932
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
915
933
  }
916
934
  *filter_chain_map =
917
935
  BuildFromInternalFilterChainMap(&internal_filter_chain_map);
@@ -926,7 +944,7 @@ grpc_error_handle LdsResourceParseServer(
926
944
  grpc_error_handle error =
927
945
  AddressParse(envoy_config_listener_v3_Listener_address(listener),
928
946
  &lds_update->address);
929
- if (error != GRPC_ERROR_NONE) return error;
947
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
930
948
  const auto* use_original_dst =
931
949
  envoy_config_listener_v3_Listener_use_original_dst(listener);
932
950
  if (use_original_dst != nullptr) {
@@ -943,19 +961,19 @@ grpc_error_handle LdsResourceParseServer(
943
961
  for (size_t i = 0; i < size; i++) {
944
962
  FilterChain filter_chain;
945
963
  error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
946
- if (error != GRPC_ERROR_NONE) return error;
964
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
947
965
  parsed_filter_chains.push_back(std::move(filter_chain));
948
966
  }
949
967
  error =
950
968
  BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
951
- if (error != GRPC_ERROR_NONE) return error;
969
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
952
970
  auto* default_filter_chain =
953
971
  envoy_config_listener_v3_Listener_default_filter_chain(listener);
954
972
  if (default_filter_chain != nullptr) {
955
973
  FilterChain filter_chain;
956
974
  error =
957
975
  FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
958
- if (error != GRPC_ERROR_NONE) return error;
976
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
959
977
  if (filter_chain.filter_chain_data != nullptr) {
960
978
  lds_update->default_filter_chain =
961
979
  std::move(*filter_chain.filter_chain_data);
@@ -1027,7 +1045,7 @@ absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
1027
1045
  auto listener_data = absl::make_unique<ResourceDataSubclass>();
1028
1046
  grpc_error_handle error =
1029
1047
  LdsResourceParse(context, resource, is_v2, &listener_data->resource);
1030
- if (error != GRPC_ERROR_NONE) {
1048
+ if (!GRPC_ERROR_IS_NONE(error)) {
1031
1049
  std::string error_str = grpc_error_std_string(error);
1032
1050
  GRPC_ERROR_UNREF(error);
1033
1051
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
@@ -19,8 +19,14 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <stdint.h>
23
+ #include <string.h>
24
+
25
+ #include <algorithm>
22
26
  #include <array>
27
+ #include <cstdint>
23
28
  #include <map>
29
+ #include <memory>
24
30
  #include <string>
25
31
  #include <vector>
26
32
 
@@ -29,12 +35,15 @@
29
35
  #include "absl/types/optional.h"
30
36
  #include "envoy/config/listener/v3/listener.upbdefs.h"
31
37
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
38
+ #include "upb/def.h"
32
39
 
33
- #include "src/core/ext/xds/xds_client.h"
40
+ #include "src/core/ext/xds/upb_utils.h"
34
41
  #include "src/core/ext/xds/xds_common_types.h"
35
42
  #include "src/core/ext/xds/xds_http_filters.h"
36
43
  #include "src/core/ext/xds/xds_resource_type_impl.h"
37
44
  #include "src/core/ext/xds/xds_route_config.h"
45
+ #include "src/core/lib/gprpp/time.h"
46
+ #include "src/core/lib/iomgr/resolved_address.h"
38
47
 
39
48
  namespace grpc_core {
40
49
 
@@ -14,6 +14,8 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_RESOURCE_TYPE_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_RESOURCE_TYPE_H
17
19
  #include <grpc/support/port_platform.h>
18
20
 
19
21
  #include <memory>
@@ -21,12 +23,10 @@
21
23
 
22
24
  #include "absl/status/statusor.h"
23
25
  #include "absl/strings/string_view.h"
26
+ #include "upb/def.h"
24
27
 
25
28
  #include "src/core/ext/xds/upb_utils.h"
26
29
 
27
- #ifndef GRPC_CORE_EXT_XDS_XDS_RESOURCE_TYPE_H
28
- #define GRPC_CORE_EXT_XDS_XDS_RESOURCE_TYPE_H
29
-
30
30
  namespace grpc_core {
31
31
 
32
32
  // Interface for an xDS resource type.