grpc 1.50.0.pre1 → 1.52.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1009) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +206 -49
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/event_engine.h +27 -6
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +31 -2
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -13
  14. data/include/grpc/grpc_posix.h +1 -1
  15. data/include/grpc/impl/codegen/atm.h +3 -71
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  18. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  19. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  21. data/include/grpc/impl/codegen/compression_types.h +3 -82
  22. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  23. data/include/grpc/impl/codegen/fork.h +4 -25
  24. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  25. data/include/grpc/impl/codegen/grpc_types.h +3 -791
  26. data/include/grpc/impl/codegen/log.h +3 -86
  27. data/include/grpc/impl/codegen/port_platform.h +3 -758
  28. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  29. data/include/grpc/impl/codegen/slice.h +3 -106
  30. data/include/grpc/impl/codegen/status.h +4 -131
  31. data/include/grpc/impl/codegen/sync.h +3 -42
  32. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  33. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  34. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  35. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  36. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  37. data/include/grpc/impl/compression_types.h +109 -0
  38. data/include/grpc/impl/connectivity_state.h +47 -0
  39. data/include/grpc/impl/grpc_types.h +824 -0
  40. data/include/grpc/impl/propagation_bits.h +54 -0
  41. data/include/grpc/impl/slice_type.h +112 -0
  42. data/include/grpc/load_reporting.h +1 -1
  43. data/include/grpc/module.modulemap +5 -1
  44. data/include/grpc/slice.h +1 -1
  45. data/include/grpc/status.h +131 -1
  46. data/include/grpc/support/atm.h +70 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  48. data/include/grpc/support/atm_gcc_sync.h +58 -1
  49. data/include/grpc/support/atm_windows.h +105 -1
  50. data/include/grpc/support/log.h +87 -1
  51. data/include/grpc/support/log_windows.h +1 -1
  52. data/include/grpc/support/port_platform.h +767 -1
  53. data/include/grpc/support/string_util.h +1 -1
  54. data/include/grpc/support/sync.h +35 -2
  55. data/include/grpc/support/sync_abseil.h +11 -1
  56. data/include/grpc/support/sync_custom.h +13 -1
  57. data/include/grpc/support/sync_generic.h +24 -1
  58. data/include/grpc/support/sync_posix.h +27 -1
  59. data/include/grpc/support/sync_windows.h +15 -1
  60. data/include/grpc/support/time.h +25 -2
  61. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  62. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
  63. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -1
  64. data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
  65. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +24 -24
  67. data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
  69. data/src/core/ext/filters/client_channel/client_channel.cc +157 -168
  70. data/src/core/ext/filters/client_channel/client_channel.h +10 -10
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
  75. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  76. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  77. data/src/core/ext/filters/client_channel/config_selector.h +16 -20
  78. data/src/core/ext/filters/client_channel/connector.h +1 -1
  79. data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
  80. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  81. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
  82. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
  83. data/src/core/ext/filters/client_channel/http_proxy.cc +39 -40
  84. data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
  85. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  87. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
  88. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
  89. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +59 -130
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +131 -154
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
  100. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +8 -9
  101. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  102. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +212 -223
  103. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  104. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +11 -22
  105. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -101
  106. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +20 -21
  107. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
  108. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +119 -106
  109. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +12 -12
  110. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
  111. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -56
  112. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +60 -64
  113. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  115. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +22 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +62 -94
  117. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +70 -146
  118. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
  119. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
  120. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  121. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
  122. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
  123. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +26 -35
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +82 -82
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +117 -118
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +51 -52
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  131. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
  132. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -5
  133. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  134. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  135. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -27
  136. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -34
  137. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
  138. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  139. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +122 -119
  140. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
  141. data/src/core/ext/filters/client_channel/retry_filter.cc +81 -103
  142. data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -235
  143. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  144. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  145. data/src/core/ext/filters/client_channel/retry_throttle.h +26 -25
  146. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +3 -3
  147. data/src/core/ext/filters/client_channel/subchannel.cc +158 -178
  148. data/src/core/ext/filters/client_channel/subchannel.h +17 -40
  149. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
  150. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  151. data/src/core/ext/filters/deadline/deadline_filter.cc +34 -17
  152. data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
  153. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
  154. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  155. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  156. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  157. data/src/core/ext/filters/http/client/http_client_filter.cc +36 -37
  158. data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
  159. data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
  160. data/src/core/ext/filters/http/client_authority_filter.h +18 -18
  161. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
  162. data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
  163. data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
  164. data/src/core/ext/filters/http/server/http_server_filter.cc +44 -43
  165. data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
  166. data/src/core/ext/filters/message_size/message_size_filter.cc +92 -123
  167. data/src/core/ext/filters/message_size/message_size_filter.h +23 -16
  168. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  169. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  170. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  171. data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
  172. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +7 -9
  173. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
  174. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  175. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  176. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  177. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  178. data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
  179. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +69 -63
  180. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
  181. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +81 -97
  182. data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
  183. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  184. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
  185. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
  186. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
  187. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +273 -283
  188. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
  189. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  190. data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
  191. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  192. data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
  193. data/src/core/ext/transport/chttp2/transport/flow_control.cc +112 -44
  194. data/src/core/ext/transport/chttp2/transport/flow_control.h +60 -34
  195. data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
  196. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -32
  197. data/src/core/ext/transport/chttp2/transport/frame_data.h +23 -23
  198. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +36 -36
  199. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
  200. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +25 -24
  201. data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
  202. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +28 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
  204. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +34 -36
  205. data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
  206. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -21
  207. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
  208. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +133 -181
  209. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +40 -59
  210. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  211. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +93 -143
  212. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
  213. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +26 -26
  214. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
  215. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  216. data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
  217. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  218. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  219. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  220. data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
  221. data/src/core/ext/transport/chttp2/transport/internal.h +193 -170
  222. data/src/core/ext/transport/chttp2/transport/parsing.cc +147 -80
  223. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  224. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  225. data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
  226. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  227. data/src/core/ext/transport/chttp2/transport/varint.h +35 -32
  228. data/src/core/ext/transport/chttp2/transport/writing.cc +60 -56
  229. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  230. data/src/core/ext/transport/inproc/inproc_transport.cc +122 -140
  231. data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
  232. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  236. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  237. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  238. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  239. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
  240. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
  241. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  242. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  243. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  244. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  245. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  246. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  247. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  248. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  249. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  250. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  251. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  252. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  253. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  254. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  255. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
  256. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  257. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  258. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  259. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  260. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  261. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  262. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  263. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  264. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  265. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  266. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  267. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  268. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  269. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  270. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  271. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  272. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  273. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  274. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  275. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  276. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  277. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  278. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  279. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  280. data/src/core/ext/xds/xds_api.cc +20 -95
  281. data/src/core/ext/xds/xds_api.h +5 -8
  282. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  283. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  284. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  285. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  286. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  287. data/src/core/ext/xds/xds_channel_args.h +1 -1
  288. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  289. data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
  290. data/src/core/ext/xds/xds_client.cc +134 -94
  291. data/src/core/ext/xds/xds_client.h +13 -5
  292. data/src/core/ext/xds/xds_client_grpc.cc +31 -24
  293. data/src/core/ext/xds/xds_client_grpc.h +1 -1
  294. data/src/core/ext/xds/xds_client_stats.cc +17 -17
  295. data/src/core/ext/xds/xds_client_stats.h +18 -18
  296. data/src/core/ext/xds/xds_cluster.cc +359 -203
  297. data/src/core/ext/xds/xds_cluster.h +52 -35
  298. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +54 -71
  299. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +45 -21
  300. data/src/core/ext/xds/xds_common_types.cc +209 -141
  301. data/src/core/ext/xds/xds_common_types.h +19 -13
  302. data/src/core/ext/xds/xds_endpoint.cc +221 -130
  303. data/src/core/ext/xds/xds_endpoint.h +4 -7
  304. data/src/core/ext/xds/xds_health_status.cc +80 -0
  305. data/src/core/ext/xds/xds_health_status.h +82 -0
  306. data/src/core/ext/xds/xds_http_fault_filter.cc +57 -43
  307. data/src/core/ext/xds/xds_http_fault_filter.h +14 -22
  308. data/src/core/ext/xds/xds_http_filters.cc +65 -73
  309. data/src/core/ext/xds/xds_http_filters.h +68 -20
  310. data/src/core/ext/xds/xds_http_rbac_filter.cc +153 -207
  311. data/src/core/ext/xds/xds_http_rbac_filter.h +13 -16
  312. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  313. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  314. data/src/core/ext/xds/xds_lb_policy_registry.cc +120 -171
  315. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  316. data/src/core/ext/xds/xds_listener.cc +447 -419
  317. data/src/core/ext/xds/xds_listener.h +45 -47
  318. data/src/core/ext/xds/xds_resource_type.h +3 -11
  319. data/src/core/ext/xds/xds_resource_type_impl.h +10 -13
  320. data/src/core/ext/xds/xds_route_config.cc +514 -528
  321. data/src/core/ext/xds/xds_route_config.h +39 -28
  322. data/src/core/ext/xds/xds_routing.cc +2 -1
  323. data/src/core/ext/xds/xds_routing.h +2 -0
  324. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
  325. data/src/core/ext/xds/xds_transport_grpc.cc +6 -7
  326. data/src/core/ext/xds/xds_transport_grpc.h +1 -1
  327. data/src/core/lib/address_utils/parse_address.cc +30 -29
  328. data/src/core/lib/address_utils/parse_address.h +32 -32
  329. data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
  330. data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
  331. data/src/core/lib/avl/avl.h +4 -4
  332. data/src/core/lib/backoff/backoff.cc +17 -17
  333. data/src/core/lib/backoff/backoff.h +18 -18
  334. data/src/core/lib/channel/call_tracer.h +10 -1
  335. data/src/core/lib/channel/channel_args.cc +19 -20
  336. data/src/core/lib/channel/channel_args.h +59 -43
  337. data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
  338. data/src/core/lib/channel/channel_stack.cc +62 -58
  339. data/src/core/lib/channel/channel_stack.h +144 -131
  340. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  341. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  342. data/src/core/lib/channel/channel_stack_builder_impl.cc +43 -25
  343. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  344. data/src/core/lib/channel/channel_trace.cc +21 -22
  345. data/src/core/lib/channel/channel_trace.h +19 -19
  346. data/src/core/lib/channel/channelz.cc +18 -19
  347. data/src/core/lib/channel/channelz.h +26 -26
  348. data/src/core/lib/channel/channelz_registry.cc +17 -17
  349. data/src/core/lib/channel/channelz_registry.h +18 -18
  350. data/src/core/lib/channel/connected_channel.cc +732 -63
  351. data/src/core/lib/channel/connected_channel.h +18 -22
  352. data/src/core/lib/channel/context.h +18 -18
  353. data/src/core/lib/channel/promise_based_filter.cc +1137 -150
  354. data/src/core/lib/channel/promise_based_filter.h +374 -88
  355. data/src/core/lib/channel/status_util.cc +35 -17
  356. data/src/core/lib/channel/status_util.h +26 -19
  357. data/src/core/lib/compression/compression.cc +19 -19
  358. data/src/core/lib/compression/compression_internal.cc +41 -48
  359. data/src/core/lib/compression/compression_internal.h +22 -22
  360. data/src/core/lib/compression/message_compress.cc +26 -26
  361. data/src/core/lib/compression/message_compress.h +25 -25
  362. data/src/core/lib/config/core_configuration.h +1 -1
  363. data/src/core/lib/debug/event_log.cc +88 -0
  364. data/src/core/lib/debug/event_log.h +81 -0
  365. data/src/core/lib/debug/histogram_view.cc +69 -0
  366. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  367. data/src/core/lib/debug/stats.cc +39 -136
  368. data/src/core/lib/debug/stats.h +46 -52
  369. data/src/core/lib/debug/stats_data.cc +224 -73
  370. data/src/core/lib/debug/stats_data.h +263 -122
  371. data/src/core/lib/debug/trace.cc +18 -18
  372. data/src/core/lib/debug/trace.h +19 -19
  373. data/src/core/lib/event_engine/common_closures.h +71 -0
  374. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  375. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  376. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  377. data/src/core/lib/event_engine/executor/executor.h +1 -1
  378. data/src/core/lib/event_engine/forkable.h +1 -1
  379. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  380. data/src/core/lib/event_engine/poller.h +10 -4
  381. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +614 -0
  382. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  383. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +900 -0
  384. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  385. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  386. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  387. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +11 -14
  388. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  389. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  390. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  391. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  392. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1308 -0
  393. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +684 -0
  394. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +456 -28
  395. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  396. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  397. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
  398. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
  399. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
  400. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  401. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  402. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  403. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  404. data/src/core/lib/event_engine/posix_engine/timer.h +87 -86
  405. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  406. data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
  407. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
  408. data/src/core/lib/event_engine/posix_engine/timer_manager.h +41 -69
  409. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  410. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  411. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  412. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  413. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  414. data/src/core/lib/event_engine/{executor/threaded_executor.h → posix_engine/wakeup_fd_pipe.h} +16 -15
  415. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  416. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  417. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  418. data/src/core/lib/event_engine/slice.cc +7 -6
  419. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  420. data/src/core/lib/event_engine/socket_notifier.h +1 -1
  421. data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
  422. data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
  423. data/src/core/lib/event_engine/thread_pool.cc +125 -43
  424. data/src/core/lib/event_engine/thread_pool.h +49 -26
  425. data/src/core/lib/event_engine/time_util.h +1 -1
  426. data/src/core/lib/event_engine/windows/iocp.cc +13 -12
  427. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  428. data/src/core/lib/event_engine/windows/win_socket.cc +9 -9
  429. data/src/core/lib/event_engine/windows/windows_engine.cc +26 -20
  430. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  431. data/src/core/lib/experiments/config.cc +1 -1
  432. data/src/core/lib/experiments/experiments.cc +13 -13
  433. data/src/core/lib/experiments/experiments.h +8 -6
  434. data/src/core/lib/gpr/alloc.cc +19 -17
  435. data/src/core/lib/gpr/alloc.h +18 -18
  436. data/src/core/lib/gpr/atm.cc +17 -17
  437. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  438. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  439. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  440. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  441. data/src/core/lib/gpr/log.cc +27 -19
  442. data/src/core/lib/gpr/log_android.cc +22 -20
  443. data/src/core/lib/gpr/log_linux.cc +24 -24
  444. data/src/core/lib/gpr/log_posix.cc +20 -19
  445. data/src/core/lib/gpr/log_windows.cc +25 -24
  446. data/src/core/lib/gpr/spinlock.h +18 -18
  447. data/src/core/lib/gpr/string.cc +25 -24
  448. data/src/core/lib/gpr/string.h +58 -58
  449. data/src/core/lib/gpr/string_posix.cc +24 -24
  450. data/src/core/lib/gpr/string_util_windows.cc +22 -22
  451. data/src/core/lib/gpr/string_windows.cc +24 -24
  452. data/src/core/lib/gpr/sync.cc +25 -25
  453. data/src/core/lib/gpr/sync_abseil.cc +22 -20
  454. data/src/core/lib/gpr/sync_posix.cc +23 -21
  455. data/src/core/lib/gpr/sync_windows.cc +29 -27
  456. data/src/core/lib/gpr/time.cc +23 -21
  457. data/src/core/lib/gpr/time_posix.cc +35 -30
  458. data/src/core/lib/gpr/time_precise.cc +22 -22
  459. data/src/core/lib/gpr/time_precise.h +18 -19
  460. data/src/core/lib/gpr/time_windows.cc +25 -22
  461. data/src/core/lib/gpr/tmpfile.h +22 -22
  462. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  463. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  464. data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
  465. data/src/core/lib/gpr/useful.h +40 -27
  466. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  467. data/src/core/lib/gprpp/atomic_utils.h +18 -18
  468. data/src/core/lib/gprpp/bitset.h +24 -0
  469. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  470. data/src/core/lib/gprpp/crash.h +34 -0
  471. data/src/core/lib/gprpp/debug_location.h +18 -18
  472. data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
  473. data/src/core/lib/gprpp/env.h +20 -20
  474. data/src/core/lib/gprpp/env_linux.cc +21 -21
  475. data/src/core/lib/gprpp/env_posix.cc +18 -18
  476. data/src/core/lib/gprpp/env_windows.cc +18 -18
  477. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  478. data/src/core/lib/gprpp/examine_stack.h +18 -18
  479. data/src/core/lib/gprpp/fork.cc +21 -22
  480. data/src/core/lib/gprpp/fork.h +22 -22
  481. data/src/core/lib/gprpp/global_config.h +18 -18
  482. data/src/core/lib/gprpp/global_config_custom.h +18 -18
  483. data/src/core/lib/gprpp/global_config_env.cc +17 -17
  484. data/src/core/lib/gprpp/global_config_env.h +23 -23
  485. data/src/core/lib/gprpp/global_config_generic.h +18 -18
  486. data/src/core/lib/gprpp/host_port.cc +26 -26
  487. data/src/core/lib/gprpp/host_port.h +29 -28
  488. data/src/core/lib/gprpp/load_file.cc +75 -0
  489. data/src/core/lib/gprpp/load_file.h +33 -0
  490. data/src/core/lib/gprpp/manual_constructor.h +18 -17
  491. data/src/core/lib/gprpp/memory.h +18 -18
  492. data/src/core/lib/gprpp/mpscq.cc +17 -17
  493. data/src/core/lib/gprpp/mpscq.h +18 -18
  494. data/src/core/lib/gprpp/no_destruct.h +1 -0
  495. data/src/core/lib/gprpp/orphanable.h +18 -18
  496. data/src/core/lib/gprpp/per_cpu.h +46 -0
  497. data/src/core/lib/gprpp/ref_counted.h +18 -18
  498. data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
  499. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  500. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  501. data/src/core/lib/gprpp/status_helper.cc +4 -3
  502. data/src/core/lib/gprpp/status_helper.h +1 -3
  503. data/src/core/lib/gprpp/strerror.cc +41 -0
  504. data/src/core/lib/gprpp/strerror.h +29 -0
  505. data/src/core/lib/gprpp/sync.h +20 -20
  506. data/src/core/lib/gprpp/table.h +1 -0
  507. data/src/core/lib/gprpp/thd.h +19 -19
  508. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  509. data/src/core/lib/gprpp/thd_windows.cc +26 -26
  510. data/src/core/lib/gprpp/time.cc +16 -11
  511. data/src/core/lib/gprpp/time.h +13 -3
  512. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  513. data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
  514. data/src/core/lib/gprpp/time_util.h +1 -1
  515. data/src/core/lib/gprpp/unique_type_name.h +18 -18
  516. data/src/core/lib/gprpp/validation_errors.h +18 -1
  517. data/src/core/lib/handshaker/proxy_mapper.h +18 -18
  518. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  519. data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
  520. data/src/core/lib/http/format_request.cc +18 -18
  521. data/src/core/lib/http/format_request.h +18 -18
  522. data/src/core/lib/http/httpcli.cc +57 -61
  523. data/src/core/lib/http/httpcli.h +26 -26
  524. data/src/core/lib/http/httpcli_security_connector.cc +22 -25
  525. data/src/core/lib/http/parser.cc +76 -87
  526. data/src/core/lib/http/parser.h +32 -32
  527. data/src/core/lib/iomgr/block_annotate.h +21 -21
  528. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  529. data/src/core/lib/iomgr/buffer_list.h +120 -98
  530. data/src/core/lib/iomgr/call_combiner.cc +29 -27
  531. data/src/core/lib/iomgr/call_combiner.h +21 -22
  532. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  533. data/src/core/lib/iomgr/cfstream_handle.h +22 -22
  534. data/src/core/lib/iomgr/closure.h +90 -45
  535. data/src/core/lib/iomgr/combiner.cc +20 -19
  536. data/src/core/lib/iomgr/combiner.h +18 -18
  537. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  538. data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
  539. data/src/core/lib/iomgr/endpoint.cc +17 -17
  540. data/src/core/lib/iomgr/endpoint.h +46 -46
  541. data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
  542. data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
  543. data/src/core/lib/iomgr/endpoint_pair.h +18 -18
  544. data/src/core/lib/iomgr/endpoint_pair_posix.cc +20 -19
  545. data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
  546. data/src/core/lib/iomgr/error.cc +49 -61
  547. data/src/core/lib/iomgr/error.h +42 -173
  548. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  549. data/src/core/lib/iomgr/error_cfstream.h +19 -19
  550. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  551. data/src/core/lib/iomgr/ev_apple.h +17 -17
  552. data/src/core/lib/iomgr/ev_epoll1_linux.cc +208 -195
  553. data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
  554. data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
  555. data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
  556. data/src/core/lib/iomgr/ev_posix.cc +36 -28
  557. data/src/core/lib/iomgr/ev_posix.h +85 -81
  558. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  559. data/src/core/lib/iomgr/exec_ctx.cc +34 -34
  560. data/src/core/lib/iomgr/exec_ctx.h +141 -141
  561. data/src/core/lib/iomgr/executor.cc +21 -21
  562. data/src/core/lib/iomgr/executor.h +24 -24
  563. data/src/core/lib/iomgr/fork_posix.cc +24 -22
  564. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  565. data/src/core/lib/iomgr/gethostname.h +18 -18
  566. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  567. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  568. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  569. data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
  570. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  571. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  572. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  573. data/src/core/lib/iomgr/internal_errqueue.h +80 -80
  574. data/src/core/lib/iomgr/iocp_windows.cc +22 -21
  575. data/src/core/lib/iomgr/iocp_windows.h +18 -18
  576. data/src/core/lib/iomgr/iomgr.cc +19 -18
  577. data/src/core/lib/iomgr/iomgr.h +32 -32
  578. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  579. data/src/core/lib/iomgr/iomgr_internal.h +25 -25
  580. data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
  581. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +20 -19
  582. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  583. data/src/core/lib/iomgr/load_file.cc +24 -27
  584. data/src/core/lib/iomgr/load_file.h +20 -20
  585. data/src/core/lib/iomgr/lockfree_event.cc +114 -114
  586. data/src/core/lib/iomgr/lockfree_event.h +19 -19
  587. data/src/core/lib/iomgr/nameser.h +84 -84
  588. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  589. data/src/core/lib/iomgr/polling_entity.h +27 -27
  590. data/src/core/lib/iomgr/pollset.cc +17 -17
  591. data/src/core/lib/iomgr/pollset.h +51 -51
  592. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  593. data/src/core/lib/iomgr/pollset_set.h +22 -22
  594. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  595. data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
  596. data/src/core/lib/iomgr/pollset_windows.cc +30 -29
  597. data/src/core/lib/iomgr/pollset_windows.h +22 -22
  598. data/src/core/lib/iomgr/port.h +29 -29
  599. data/src/core/lib/iomgr/python_util.h +20 -20
  600. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  601. data/src/core/lib/iomgr/resolve_address.h +21 -22
  602. data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
  603. data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
  604. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  605. data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
  606. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  607. data/src/core/lib/iomgr/resolved_address.h +1 -1
  608. data/src/core/lib/iomgr/sockaddr.h +21 -21
  609. data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
  610. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  611. data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
  612. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  613. data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
  614. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  615. data/src/core/lib/iomgr/socket_mutator.h +37 -37
  616. data/src/core/lib/iomgr/socket_utils.h +24 -24
  617. data/src/core/lib/iomgr/socket_utils_common_posix.cc +68 -66
  618. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  619. data/src/core/lib/iomgr/socket_utils_posix.cc +22 -20
  620. data/src/core/lib/iomgr/socket_utils_posix.h +78 -78
  621. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  622. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  623. data/src/core/lib/iomgr/socket_windows.h +56 -56
  624. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  625. data/src/core/lib/{slice/slice_buffer_api.cc → iomgr/systemd_utils.h} +12 -14
  626. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  627. data/src/core/lib/iomgr/tcp_client.h +26 -26
  628. data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -28
  629. data/src/core/lib/iomgr/tcp_client_posix.cc +70 -73
  630. data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
  631. data/src/core/lib/iomgr/tcp_client_windows.cc +36 -39
  632. data/src/core/lib/iomgr/tcp_posix.cc +223 -237
  633. data/src/core/lib/iomgr/tcp_posix.h +27 -27
  634. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  635. data/src/core/lib/iomgr/tcp_server.h +68 -62
  636. data/src/core/lib/iomgr/tcp_server_posix.cc +124 -94
  637. data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
  638. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
  639. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  640. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  641. data/src/core/lib/iomgr/tcp_server_windows.cc +97 -104
  642. data/src/core/lib/iomgr/tcp_windows.cc +109 -93
  643. data/src/core/lib/iomgr/tcp_windows.h +29 -29
  644. data/src/core/lib/iomgr/timer.cc +17 -17
  645. data/src/core/lib/iomgr/timer.h +65 -65
  646. data/src/core/lib/iomgr/timer_generic.cc +115 -122
  647. data/src/core/lib/iomgr/timer_generic.h +19 -19
  648. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  649. data/src/core/lib/iomgr/timer_heap.h +19 -19
  650. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  651. data/src/core/lib/iomgr/timer_manager.h +25 -25
  652. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  653. data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
  654. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  655. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
  656. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  657. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  658. data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
  659. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  660. data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
  661. data/src/core/lib/json/json_channel_args.h +42 -0
  662. data/src/core/lib/json/json_object_loader.cc +17 -2
  663. data/src/core/lib/json/json_object_loader.h +37 -1
  664. data/src/core/lib/json/json_reader.cc +28 -28
  665. data/src/core/lib/json/json_util.cc +5 -5
  666. data/src/core/lib/json/json_util.h +4 -4
  667. data/src/core/lib/json/json_writer.cc +56 -56
  668. data/src/core/lib/load_balancing/lb_policy.cc +18 -18
  669. data/src/core/lib/load_balancing/lb_policy.h +7 -4
  670. data/src/core/lib/load_balancing/subchannel_interface.h +1 -8
  671. data/src/core/lib/matchers/matchers.cc +6 -5
  672. data/src/core/lib/matchers/matchers.h +1 -1
  673. data/src/core/lib/promise/activity.cc +16 -2
  674. data/src/core/lib/promise/activity.h +58 -27
  675. data/src/core/lib/promise/arena_promise.h +82 -52
  676. data/src/core/lib/promise/context.h +14 -6
  677. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  678. data/src/core/lib/promise/detail/promise_factory.h +59 -10
  679. data/src/core/lib/promise/detail/status.h +28 -0
  680. data/src/core/lib/promise/detail/switch.h +1455 -0
  681. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +20 -12
  682. data/src/core/lib/promise/for_each.h +155 -0
  683. data/src/core/lib/promise/latch.h +13 -19
  684. data/src/core/lib/promise/loop.h +7 -5
  685. data/src/core/lib/promise/map.h +1 -0
  686. data/src/core/lib/promise/map_pipe.h +88 -0
  687. data/src/core/lib/promise/pipe.cc +19 -0
  688. data/src/core/lib/promise/pipe.h +505 -0
  689. data/src/core/lib/promise/poll.h +19 -0
  690. data/src/core/lib/promise/seq.h +4 -5
  691. data/src/core/lib/promise/sleep.cc +5 -4
  692. data/src/core/lib/promise/sleep.h +1 -2
  693. data/src/core/lib/promise/try_concurrently.h +342 -0
  694. data/src/core/lib/promise/try_seq.h +11 -13
  695. data/src/core/lib/resolver/resolver.cc +17 -17
  696. data/src/core/lib/resolver/server_address.cc +18 -17
  697. data/src/core/lib/resolver/server_address.h +19 -21
  698. data/src/core/lib/resource_quota/api.cc +0 -1
  699. data/src/core/lib/resource_quota/api.h +1 -1
  700. data/src/core/lib/resource_quota/arena.cc +36 -17
  701. data/src/core/lib/resource_quota/arena.h +107 -18
  702. data/src/core/lib/resource_quota/memory_quota.cc +140 -43
  703. data/src/core/lib/resource_quota/memory_quota.h +85 -23
  704. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  705. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  706. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  707. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  708. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  709. data/src/core/lib/security/authorization/matchers.cc +25 -22
  710. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  711. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  712. data/src/core/lib/security/context/security_context.cc +22 -23
  713. data/src/core/lib/security/context/security_context.h +40 -30
  714. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  715. data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
  716. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  717. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
  718. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  719. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  720. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  721. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  722. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  723. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
  724. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  725. data/src/core/lib/security/credentials/call_creds_util.h +1 -1
  726. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  727. data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
  728. data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
  729. data/src/core/lib/security/credentials/credentials.cc +19 -18
  730. data/src/core/lib/security/credentials/credentials.h +34 -33
  731. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  732. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  733. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  734. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  735. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  736. data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
  737. data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
  738. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  739. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +75 -73
  740. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
  741. data/src/core/lib/security/credentials/iam/iam_credentials.cc +18 -17
  742. data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
  743. data/src/core/lib/security/credentials/jwt/json_token.cc +24 -25
  744. data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
  745. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +18 -18
  746. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
  747. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +75 -75
  748. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
  749. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  750. data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
  751. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +52 -59
  752. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
  753. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
  754. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +22 -22
  755. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  756. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
  757. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
  758. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  759. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +30 -43
  760. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  761. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  762. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  763. data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
  764. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  765. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  766. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +32 -38
  767. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
  768. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +32 -41
  769. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
  770. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  771. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -8
  772. data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
  773. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  774. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +19 -22
  775. data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
  776. data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
  777. data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
  778. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  779. data/src/core/lib/security/security_connector/security_connector.h +32 -33
  780. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +34 -39
  781. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
  782. data/src/core/lib/security/security_connector/ssl_utils.cc +37 -39
  783. data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
  784. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  785. data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
  786. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +42 -48
  787. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
  788. data/src/core/lib/security/transport/auth_filters.h +18 -18
  789. data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
  790. data/src/core/lib/security/transport/secure_endpoint.cc +54 -56
  791. data/src/core/lib/security/transport/secure_endpoint.h +22 -22
  792. data/src/core/lib/security/transport/security_handshaker.cc +70 -70
  793. data/src/core/lib/security/transport/security_handshaker.h +19 -19
  794. data/src/core/lib/security/transport/server_auth_filter.cc +43 -44
  795. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  796. data/src/core/lib/security/transport/tsi_error.h +18 -18
  797. data/src/core/lib/security/util/json_util.cc +21 -22
  798. data/src/core/lib/security/util/json_util.h +18 -18
  799. data/src/core/lib/service_config/service_config.h +2 -2
  800. data/src/core/lib/service_config/service_config_call_data.h +7 -1
  801. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  802. data/src/core/lib/service_config/service_config_impl.h +14 -17
  803. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  804. data/src/core/lib/service_config/service_config_parser.h +14 -10
  805. data/src/core/lib/slice/b64.cc +26 -26
  806. data/src/core/lib/slice/b64.h +29 -29
  807. data/src/core/lib/slice/percent_encoding.cc +17 -17
  808. data/src/core/lib/slice/percent_encoding.h +24 -24
  809. data/src/core/lib/slice/slice.cc +44 -38
  810. data/src/core/lib/slice/slice.h +57 -11
  811. data/src/core/lib/slice/slice_buffer.cc +63 -59
  812. data/src/core/lib/slice/slice_buffer.h +27 -2
  813. data/src/core/lib/slice/slice_internal.h +31 -39
  814. data/src/core/lib/slice/slice_refcount.h +34 -19
  815. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  816. data/src/core/lib/slice/slice_string_helpers.h +19 -19
  817. data/src/core/lib/surface/api_trace.cc +17 -17
  818. data/src/core/lib/surface/api_trace.h +22 -22
  819. data/src/core/lib/surface/byte_buffer.cc +22 -23
  820. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  821. data/src/core/lib/surface/call.cc +1521 -335
  822. data/src/core/lib/surface/call.h +86 -39
  823. data/src/core/lib/surface/call_details.cc +20 -21
  824. data/src/core/lib/surface/call_log_batch.cc +18 -18
  825. data/src/core/lib/surface/call_test_only.h +30 -30
  826. data/src/core/lib/surface/call_trace.cc +113 -0
  827. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
  828. data/src/core/lib/surface/channel.cc +62 -67
  829. data/src/core/lib/surface/channel.h +40 -32
  830. data/src/core/lib/surface/channel_init.cc +17 -17
  831. data/src/core/lib/surface/channel_init.h +18 -18
  832. data/src/core/lib/surface/channel_ping.cc +19 -19
  833. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  834. data/src/core/lib/surface/channel_stack_type.h +20 -18
  835. data/src/core/lib/surface/completion_queue.cc +173 -191
  836. data/src/core/lib/surface/completion_queue.h +32 -32
  837. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  838. data/src/core/lib/surface/completion_queue_factory.h +20 -20
  839. data/src/core/lib/surface/event_string.cc +17 -17
  840. data/src/core/lib/surface/event_string.h +20 -20
  841. data/src/core/lib/surface/init.cc +29 -58
  842. data/src/core/lib/surface/init.h +18 -18
  843. data/src/core/lib/surface/init_internally.cc +1 -0
  844. data/src/core/lib/surface/init_internally.h +9 -0
  845. data/src/core/lib/surface/lame_client.cc +28 -26
  846. data/src/core/lib/surface/lame_client.h +19 -19
  847. data/src/core/lib/surface/metadata_array.cc +17 -18
  848. data/src/core/lib/surface/server.cc +61 -83
  849. data/src/core/lib/surface/server.h +5 -7
  850. data/src/core/lib/surface/validate_metadata.cc +28 -29
  851. data/src/core/lib/surface/validate_metadata.h +18 -18
  852. data/src/core/lib/surface/version.cc +21 -21
  853. data/src/core/lib/transport/bdp_estimator.cc +17 -17
  854. data/src/core/lib/transport/bdp_estimator.h +18 -19
  855. data/src/core/lib/transport/connectivity_state.cc +19 -19
  856. data/src/core/lib/transport/connectivity_state.h +19 -19
  857. data/src/core/lib/transport/error_utils.cc +51 -45
  858. data/src/core/lib/transport/error_utils.h +21 -21
  859. data/src/core/lib/transport/handshaker.cc +49 -46
  860. data/src/core/lib/transport/handshaker.h +43 -38
  861. data/src/core/lib/transport/handshaker_factory.h +44 -18
  862. data/src/core/lib/transport/handshaker_registry.cc +25 -19
  863. data/src/core/lib/transport/handshaker_registry.h +21 -22
  864. data/src/core/lib/transport/http2_errors.h +20 -20
  865. data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
  866. data/src/core/lib/transport/http_connect_handshaker.h +18 -18
  867. data/src/core/lib/transport/metadata_batch.cc +4 -1
  868. data/src/core/lib/transport/metadata_batch.h +46 -20
  869. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  870. data/src/core/lib/transport/parsed_metadata.h +1 -0
  871. data/src/core/lib/transport/pid_controller.cc +20 -20
  872. data/src/core/lib/transport/pid_controller.h +24 -24
  873. data/src/core/lib/transport/status_conversion.cc +22 -22
  874. data/src/core/lib/transport/status_conversion.h +20 -20
  875. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  876. data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
  877. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  878. data/src/core/lib/transport/timeout_encoding.h +18 -18
  879. data/src/core/lib/transport/transport.cc +88 -41
  880. data/src/core/lib/transport/transport.h +193 -195
  881. data/src/core/lib/transport/transport_impl.h +42 -42
  882. data/src/core/lib/transport/transport_op_string.cc +26 -25
  883. data/src/core/plugin_registry/grpc_plugin_registry.cc +25 -27
  884. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +7 -14
  885. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  886. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  887. data/src/core/tsi/alts/crypt/gsec.h +334 -334
  888. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  889. data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
  890. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  891. data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
  892. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  893. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
  894. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  895. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
  896. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  897. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  898. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  899. data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
  900. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -77
  901. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
  902. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  903. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
  904. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +37 -36
  905. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
  906. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
  907. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  908. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
  909. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  910. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
  911. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  912. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
  913. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  914. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
  915. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
  916. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  917. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
  918. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  919. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
  920. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
  921. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
  922. data/src/core/tsi/fake_transport_security.cc +80 -79
  923. data/src/core/tsi/fake_transport_security.h +30 -30
  924. data/src/core/tsi/local_transport_security.cc +34 -33
  925. data/src/core/tsi/local_transport_security.h +31 -31
  926. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +8 -3
  927. data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
  928. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  929. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  930. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
  931. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  932. data/src/core/tsi/ssl_transport_security.cc +139 -323
  933. data/src/core/tsi/ssl_transport_security.h +201 -200
  934. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  935. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  936. data/src/core/tsi/ssl_types.h +25 -25
  937. data/src/core/tsi/transport_security.cc +26 -26
  938. data/src/core/tsi/transport_security.h +45 -45
  939. data/src/core/tsi/transport_security_grpc.cc +20 -20
  940. data/src/core/tsi/transport_security_grpc.h +39 -39
  941. data/src/core/tsi/transport_security_interface.h +330 -330
  942. data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  943. data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  944. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  945. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  946. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  947. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  948. data/src/ruby/ext/grpc/extconf.rb +47 -2
  949. data/src/ruby/ext/grpc/rb_call.c +1 -0
  950. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  951. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  952. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  953. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  954. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  955. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
  956. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  957. data/src/ruby/lib/grpc/version.rb +1 -1
  958. data/src/ruby/spec/channel_spec.rb +0 -43
  959. data/src/ruby/spec/client_server_spec.rb +20 -8
  960. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  961. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  962. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  963. data/third_party/re2/re2/bitstate.cc +3 -3
  964. data/third_party/re2/re2/dfa.cc +13 -13
  965. data/third_party/re2/re2/nfa.cc +4 -4
  966. data/third_party/re2/re2/onepass.cc +2 -2
  967. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  968. data/third_party/re2/re2/prefilter_tree.h +3 -2
  969. data/third_party/re2/re2/prog.cc +11 -2
  970. data/third_party/re2/re2/prog.h +17 -5
  971. data/third_party/re2/re2/re2.cc +6 -11
  972. data/third_party/re2/re2/re2.h +1 -1
  973. data/third_party/re2/re2/regexp.cc +1 -2
  974. data/third_party/re2/re2/stringpiece.h +10 -7
  975. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  976. data/third_party/re2/re2/unicode_groups.cc +319 -151
  977. data/third_party/re2/re2/walker-inl.h +3 -2
  978. data/third_party/re2/util/mutex.h +4 -4
  979. data/third_party/zlib/compress.c +3 -3
  980. data/third_party/zlib/crc32.c +21 -12
  981. data/third_party/zlib/deflate.c +112 -106
  982. data/third_party/zlib/deflate.h +2 -2
  983. data/third_party/zlib/gzlib.c +1 -1
  984. data/third_party/zlib/gzread.c +3 -5
  985. data/third_party/zlib/gzwrite.c +1 -1
  986. data/third_party/zlib/infback.c +10 -7
  987. data/third_party/zlib/inflate.c +5 -2
  988. data/third_party/zlib/inftrees.c +2 -2
  989. data/third_party/zlib/inftrees.h +1 -1
  990. data/third_party/zlib/trees.c +61 -62
  991. data/third_party/zlib/uncompr.c +2 -2
  992. data/third_party/zlib/zconf.h +16 -3
  993. data/third_party/zlib/zlib.h +10 -10
  994. data/third_party/zlib/zutil.c +9 -7
  995. data/third_party/zlib/zutil.h +1 -0
  996. metadata +146 -40
  997. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  998. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  999. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  1000. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  1001. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  1002. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  1003. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
  1004. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1005. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1006. data/src/core/lib/gpr/tls.h +0 -156
  1007. data/src/core/lib/promise/call_push_pull.h +0 -148
  1008. data/src/core/lib/slice/slice_api.cc +0 -39
  1009. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -22,12 +22,12 @@
22
22
 
23
23
  #include <utility>
24
24
 
25
- #include "absl/memory/memory.h"
26
25
  #include "absl/status/status.h"
27
26
  #include "absl/status/statusor.h"
28
27
  #include "absl/strings/str_cat.h"
29
28
  #include "absl/strings/str_join.h"
30
29
  #include "absl/strings/strip.h"
30
+ #include "absl/types/variant.h"
31
31
  #include "envoy/config/cluster/v3/circuit_breaker.upb.h"
32
32
  #include "envoy/config/cluster/v3/cluster.upb.h"
33
33
  #include "envoy/config/cluster/v3/cluster.upbdefs.h"
@@ -35,6 +35,7 @@
35
35
  #include "envoy/config/core/v3/address.upb.h"
36
36
  #include "envoy/config/core/v3/base.upb.h"
37
37
  #include "envoy/config/core/v3/config_source.upb.h"
38
+ #include "envoy/config/core/v3/health_check.upb.h"
38
39
  #include "envoy/config/endpoint/v3/endpoint.upb.h"
39
40
  #include "envoy/config/endpoint/v3/endpoint_components.upb.h"
40
41
  #include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
@@ -48,52 +49,88 @@
48
49
  #include <grpc/support/log.h>
49
50
 
50
51
  #include "src/core/ext/xds/upb_utils.h"
52
+ #include "src/core/ext/xds/xds_client.h"
51
53
  #include "src/core/ext/xds/xds_common_types.h"
54
+ #include "src/core/ext/xds/xds_lb_policy_registry.h"
52
55
  #include "src/core/ext/xds/xds_resource_type.h"
56
+ #include "src/core/lib/config/core_configuration.h"
53
57
  #include "src/core/lib/debug/trace.h"
58
+ #include "src/core/lib/gpr/string.h"
59
+ #include "src/core/lib/gprpp/env.h"
54
60
  #include "src/core/lib/gprpp/host_port.h"
61
+ #include "src/core/lib/gprpp/match.h"
62
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
55
63
  #include "src/core/lib/gprpp/time.h"
64
+ #include "src/core/lib/gprpp/validation_errors.h"
65
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
66
+ #include "src/core/lib/matchers/matchers.h"
56
67
 
57
68
  namespace grpc_core {
58
69
 
70
+ // TODO(roth): Remove once custom LB policy support is no longer experimental.
71
+ bool XdsCustomLbPolicyEnabled() {
72
+ auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG");
73
+ if (!value.has_value()) return false;
74
+ bool parsed_value;
75
+ bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
76
+ return parse_succeeded && parsed_value;
77
+ }
78
+
79
+ // TODO(eostroukhov): Remove once this feature is no longer experimental.
80
+ bool XdsHostOverrideEnabled() {
81
+ auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_ENABLE_HOST_OVERRIDE");
82
+ if (!value.has_value()) return false;
83
+ bool parsed_value;
84
+ bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
85
+ return parse_succeeded && parsed_value;
86
+ }
87
+
59
88
  //
60
89
  // XdsClusterResource
61
90
  //
62
91
 
63
92
  std::string XdsClusterResource::ToString() const {
64
93
  std::vector<std::string> contents;
65
- switch (cluster_type) {
66
- case EDS:
67
- contents.push_back("cluster_type=EDS");
68
- if (!eds_service_name.empty()) {
69
- contents.push_back(absl::StrCat("eds_service_name=", eds_service_name));
70
- }
71
- break;
72
- case LOGICAL_DNS:
73
- contents.push_back("cluster_type=LOGICAL_DNS");
74
- contents.push_back(absl::StrCat("dns_hostname=", dns_hostname));
75
- break;
76
- case AGGREGATE:
77
- contents.push_back("cluster_type=AGGREGATE");
78
- contents.push_back(
79
- absl::StrCat("prioritized_cluster_names=[",
80
- absl::StrJoin(prioritized_cluster_names, ", "), "]"));
81
- }
82
- if (!common_tls_context.Empty()) {
83
- contents.push_back(
84
- absl::StrCat("common_tls_context=", common_tls_context.ToString()));
85
- }
94
+ Match(
95
+ type,
96
+ [&](const Eds& eds) {
97
+ contents.push_back("type=EDS");
98
+ if (!eds.eds_service_name.empty()) {
99
+ contents.push_back(
100
+ absl::StrCat("eds_service_name=", eds.eds_service_name));
101
+ }
102
+ },
103
+ [&](const LogicalDns& logical_dns) {
104
+ contents.push_back("type=LOGICAL_DNS");
105
+ contents.push_back(absl::StrCat("dns_hostname=", logical_dns.hostname));
106
+ },
107
+ [&](const Aggregate& aggregate) {
108
+ contents.push_back("type=AGGREGATE");
109
+ contents.push_back(absl::StrCat(
110
+ "prioritized_cluster_names=[",
111
+ absl::StrJoin(aggregate.prioritized_cluster_names, ", "), "]"));
112
+ });
113
+ contents.push_back(
114
+ absl::StrCat("lb_policy_config=", Json{lb_policy_config}.Dump()));
86
115
  if (lrs_load_reporting_server.has_value()) {
87
116
  contents.push_back(absl::StrCat("lrs_load_reporting_server_name=",
88
117
  lrs_load_reporting_server->server_uri()));
89
118
  }
90
- contents.push_back(absl::StrCat("lb_policy=", lb_policy));
91
- if (lb_policy == "RING_HASH") {
92
- contents.push_back(absl::StrCat("min_ring_size=", min_ring_size));
93
- contents.push_back(absl::StrCat("max_ring_size=", max_ring_size));
119
+ if (!common_tls_context.Empty()) {
120
+ contents.push_back(
121
+ absl::StrCat("common_tls_context=", common_tls_context.ToString()));
94
122
  }
95
123
  contents.push_back(
96
124
  absl::StrCat("max_concurrent_requests=", max_concurrent_requests));
125
+ if (!host_override_statuses.empty()) {
126
+ std::vector<const char*> statuses;
127
+ statuses.reserve(host_override_statuses.size());
128
+ for (const auto& status : host_override_statuses) {
129
+ statuses.push_back(status.ToString());
130
+ }
131
+ contents.push_back(absl::StrCat("override_host_statuses={",
132
+ absl::StrJoin(statuses, ", "), "}"));
133
+ }
97
134
  return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
98
135
  }
99
136
 
@@ -103,260 +140,341 @@ std::string XdsClusterResource::ToString() const {
103
140
 
104
141
  namespace {
105
142
 
106
- absl::StatusOr<CommonTlsContext> UpstreamTlsContextParse(
143
+ CommonTlsContext UpstreamTlsContextParse(
107
144
  const XdsResourceType::DecodeContext& context,
108
- const envoy_config_core_v3_TransportSocket* transport_socket) {
109
- auto* typed_config =
145
+ const envoy_config_core_v3_TransportSocket* transport_socket,
146
+ ValidationErrors* errors) {
147
+ ValidationErrors::ScopedField field(errors, ".typed_config");
148
+ const auto* typed_config =
110
149
  envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
111
- if (typed_config == nullptr) {
112
- return absl::InvalidArgumentError("transport_socket.typed_config not set");
113
- }
114
- absl::string_view type_url = absl::StripPrefix(
115
- UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
116
- "type.googleapis.com/");
117
- if (type_url !=
150
+ auto extension = ExtractXdsExtension(context, typed_config, errors);
151
+ if (!extension.has_value()) return {};
152
+ if (extension->type !=
118
153
  "envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext") {
119
- return absl::InvalidArgumentError(
120
- absl::StrCat("Unrecognized transport socket type: ", type_url));
154
+ ValidationErrors::ScopedField field(errors, ".type_url");
155
+ errors->AddError("unsupported transport socket type");
156
+ return {};
157
+ }
158
+ absl::string_view* serialized_upstream_tls_context =
159
+ absl::get_if<absl::string_view>(&extension->value);
160
+ if (serialized_upstream_tls_context == nullptr) {
161
+ errors->AddError("can't decode UpstreamTlsContext");
162
+ return {};
121
163
  }
122
- const upb_StringView encoded_upstream_tls_context =
123
- google_protobuf_Any_value(typed_config);
124
- auto* upstream_tls_context =
164
+ const auto* upstream_tls_context =
125
165
  envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
126
- encoded_upstream_tls_context.data, encoded_upstream_tls_context.size,
127
- context.arena);
166
+ serialized_upstream_tls_context->data(),
167
+ serialized_upstream_tls_context->size(), context.arena);
128
168
  if (upstream_tls_context == nullptr) {
129
- return absl::InvalidArgumentError("Can't decode upstream tls context.");
169
+ errors->AddError("can't decode UpstreamTlsContext");
170
+ return {};
130
171
  }
131
- auto* common_tls_context_proto =
172
+ ValidationErrors::ScopedField field3(errors, ".common_tls_context");
173
+ const auto* common_tls_context_proto =
132
174
  envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
133
175
  upstream_tls_context);
134
176
  CommonTlsContext common_tls_context;
135
177
  if (common_tls_context_proto != nullptr) {
136
- auto common_context =
137
- CommonTlsContext::Parse(context, common_tls_context_proto);
138
- if (!common_context.ok()) {
139
- return absl::InvalidArgumentError(
140
- absl::StrCat("Error parsing UpstreamTlsContext: ",
141
- common_context.status().message()));
142
- }
143
- common_tls_context = std::move(*common_context);
178
+ common_tls_context =
179
+ CommonTlsContext::Parse(context, common_tls_context_proto, errors);
144
180
  }
145
181
  if (common_tls_context.certificate_validation_context
146
182
  .ca_certificate_provider_instance.instance_name.empty()) {
147
- return absl::InvalidArgumentError(
148
- "UpstreamTlsContext: TLS configuration provided but no "
149
- "ca_certificate_provider_instance found.");
183
+ errors->AddError("no CA certificate provider instance configured");
150
184
  }
151
185
  return common_tls_context;
152
186
  }
153
187
 
154
- absl::Status CdsLogicalDnsParse(const envoy_config_cluster_v3_Cluster* cluster,
155
- XdsClusterResource* cds_update) {
188
+ XdsClusterResource::Eds EdsConfigParse(
189
+ const envoy_config_cluster_v3_Cluster* cluster, ValidationErrors* errors) {
190
+ XdsClusterResource::Eds eds;
191
+ ValidationErrors::ScopedField field(errors, ".eds_cluster_config");
192
+ const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
193
+ envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
194
+ if (eds_cluster_config == nullptr) {
195
+ errors->AddError("field not present");
196
+ } else {
197
+ ValidationErrors::ScopedField field(errors, ".eds_config");
198
+ const envoy_config_core_v3_ConfigSource* eds_config =
199
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
200
+ eds_cluster_config);
201
+ if (eds_config == nullptr) {
202
+ errors->AddError("field not present");
203
+ } else {
204
+ if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config) &&
205
+ !envoy_config_core_v3_ConfigSource_has_self(eds_config)) {
206
+ errors->AddError("ConfigSource is not ads or self");
207
+ }
208
+ // Record EDS service_name (if any).
209
+ upb_StringView service_name =
210
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
211
+ eds_cluster_config);
212
+ if (service_name.size != 0) {
213
+ eds.eds_service_name = UpbStringToStdString(service_name);
214
+ }
215
+ }
216
+ }
217
+ return eds;
218
+ }
219
+
220
+ XdsClusterResource::LogicalDns LogicalDnsParse(
221
+ const envoy_config_cluster_v3_Cluster* cluster, ValidationErrors* errors) {
222
+ XdsClusterResource::LogicalDns logical_dns;
223
+ ValidationErrors::ScopedField field(errors, ".load_assignment");
156
224
  const auto* load_assignment =
157
225
  envoy_config_cluster_v3_Cluster_load_assignment(cluster);
158
226
  if (load_assignment == nullptr) {
159
- return absl::InvalidArgumentError(
160
- "load_assignment not present for LOGICAL_DNS cluster");
227
+ errors->AddError("field not present for LOGICAL_DNS cluster");
228
+ return logical_dns;
161
229
  }
230
+ ValidationErrors::ScopedField field2(errors, ".endpoints");
162
231
  size_t num_localities;
163
232
  const auto* const* localities =
164
233
  envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(load_assignment,
165
234
  &num_localities);
166
235
  if (num_localities != 1) {
167
- return absl::InvalidArgumentError(
168
- absl::StrCat("load_assignment for LOGICAL_DNS cluster must have "
169
- "exactly one locality, found ",
170
- num_localities));
236
+ errors->AddError(absl::StrCat(
237
+ "must contain exactly one locality for LOGICAL_DNS cluster, found ",
238
+ num_localities));
239
+ return logical_dns;
171
240
  }
241
+ ValidationErrors::ScopedField field3(errors, "[0].lb_endpoints");
172
242
  size_t num_endpoints;
173
243
  const auto* const* endpoints =
174
244
  envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(localities[0],
175
245
  &num_endpoints);
176
246
  if (num_endpoints != 1) {
177
- return absl::InvalidArgumentError(
178
- absl::StrCat("locality for LOGICAL_DNS cluster must have "
179
- "exactly one endpoint, found ",
180
- num_endpoints));
247
+ errors->AddError(absl::StrCat(
248
+ "must contain exactly one endpoint for LOGICAL_DNS cluster, found ",
249
+ num_endpoints));
250
+ return logical_dns;
181
251
  }
252
+ ValidationErrors::ScopedField field4(errors, "[0].endpoint");
182
253
  const auto* endpoint =
183
254
  envoy_config_endpoint_v3_LbEndpoint_endpoint(endpoints[0]);
184
255
  if (endpoint == nullptr) {
185
- return absl::InvalidArgumentError("LbEndpoint endpoint field not set");
256
+ errors->AddError("field not present");
257
+ return logical_dns;
186
258
  }
259
+ ValidationErrors::ScopedField field5(errors, ".address");
187
260
  const auto* address = envoy_config_endpoint_v3_Endpoint_address(endpoint);
188
261
  if (address == nullptr) {
189
- return absl::InvalidArgumentError("Endpoint address field not set");
262
+ errors->AddError("field not present");
263
+ return logical_dns;
190
264
  }
265
+ ValidationErrors::ScopedField field6(errors, ".socket_address");
191
266
  const auto* socket_address =
192
267
  envoy_config_core_v3_Address_socket_address(address);
193
268
  if (socket_address == nullptr) {
194
- return absl::InvalidArgumentError("Address socket_address field not set");
269
+ errors->AddError("field not present");
270
+ return logical_dns;
195
271
  }
196
272
  if (envoy_config_core_v3_SocketAddress_resolver_name(socket_address).size !=
197
273
  0) {
198
- return absl::InvalidArgumentError(
274
+ ValidationErrors::ScopedField field(errors, ".resolver_name");
275
+ errors->AddError(
199
276
  "LOGICAL_DNS clusters must NOT have a custom resolver name set");
200
277
  }
201
278
  absl::string_view address_str = UpbStringToAbsl(
202
279
  envoy_config_core_v3_SocketAddress_address(socket_address));
203
280
  if (address_str.empty()) {
204
- return absl::InvalidArgumentError("SocketAddress address field not set");
281
+ ValidationErrors::ScopedField field(errors, ".address");
282
+ errors->AddError("field not present");
205
283
  }
206
284
  if (!envoy_config_core_v3_SocketAddress_has_port_value(socket_address)) {
207
- return absl::InvalidArgumentError("SocketAddress port_value field not set");
285
+ ValidationErrors::ScopedField field(errors, ".port_value");
286
+ errors->AddError("field not present");
208
287
  }
209
- cds_update->dns_hostname = JoinHostPort(
288
+ logical_dns.hostname = JoinHostPort(
210
289
  address_str,
211
290
  envoy_config_core_v3_SocketAddress_port_value(socket_address));
212
- return absl::OkStatus();
291
+ return logical_dns;
213
292
  }
214
293
 
215
- absl::StatusOr<XdsClusterResource> CdsResourceParse(
294
+ XdsClusterResource::Aggregate AggregateClusterParse(
216
295
  const XdsResourceType::DecodeContext& context,
217
- const envoy_config_cluster_v3_Cluster* cluster, bool /*is_v2*/) {
218
- XdsClusterResource cds_update;
219
- std::vector<std::string> errors;
220
- // Check the cluster_discovery_type.
221
- if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
222
- !envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
223
- errors.emplace_back("DiscoveryType not found.");
224
- } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
225
- envoy_config_cluster_v3_Cluster_EDS) {
226
- cds_update.cluster_type = XdsClusterResource::ClusterType::EDS;
227
- // Check the EDS config source.
228
- const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
229
- envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
230
- const envoy_config_core_v3_ConfigSource* eds_config =
231
- envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
232
- eds_cluster_config);
233
- if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config) &&
234
- !envoy_config_core_v3_ConfigSource_has_self(eds_config)) {
235
- errors.emplace_back("EDS ConfigSource is not ADS or SELF.");
236
- }
237
- // Record EDS service_name (if any).
238
- upb_StringView service_name =
239
- envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
240
- eds_cluster_config);
241
- if (service_name.size != 0) {
242
- cds_update.eds_service_name = UpbStringToStdString(service_name);
243
- }
244
- } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
245
- envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
246
- cds_update.cluster_type = XdsClusterResource::ClusterType::LOGICAL_DNS;
247
- absl::Status status = CdsLogicalDnsParse(cluster, &cds_update);
248
- if (!status.ok()) errors.emplace_back(status.message());
249
- } else {
250
- const auto* custom_cluster_type =
251
- envoy_config_cluster_v3_Cluster_cluster_type(cluster);
252
- if (custom_cluster_type == nullptr) {
253
- errors.push_back("DiscoveryType is not valid.");
254
- } else {
255
- const auto* typed_config =
256
- envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
257
- custom_cluster_type);
258
- if (typed_config == nullptr) {
259
- errors.push_back("cluster_type.typed_config not set");
260
- } else {
261
- absl::string_view type_url = absl::StripPrefix(
262
- UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
263
- "type.googleapis.com/");
264
- if (type_url !=
265
- "envoy.extensions.clusters.aggregate.v3.ClusterConfig") {
266
- errors.push_back(
267
- absl::StrCat("unknown cluster_type extension: ", type_url));
268
- } else {
269
- cds_update.cluster_type = XdsClusterResource::ClusterType::AGGREGATE;
270
- // Retrieve aggregate clusters.
271
- const upb_StringView aggregate_cluster_config_upb_stringview =
272
- google_protobuf_Any_value(typed_config);
273
- const auto* aggregate_cluster_config =
274
- envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
275
- aggregate_cluster_config_upb_stringview.data,
276
- aggregate_cluster_config_upb_stringview.size, context.arena);
277
- if (aggregate_cluster_config == nullptr) {
278
- errors.emplace_back("Can't parse aggregate cluster.");
279
- } else {
280
- size_t size;
281
- const upb_StringView* clusters =
282
- envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
283
- aggregate_cluster_config, &size);
284
- for (size_t i = 0; i < size; ++i) {
285
- const upb_StringView cluster = clusters[i];
286
- cds_update.prioritized_cluster_names.emplace_back(
287
- UpbStringToStdString(cluster));
288
- }
289
- }
290
- }
296
+ absl::string_view serialized_config, ValidationErrors* errors) {
297
+ XdsClusterResource::Aggregate aggregate;
298
+ const auto* aggregate_cluster_config =
299
+ envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
300
+ serialized_config.data(), serialized_config.size(), context.arena);
301
+ if (aggregate_cluster_config == nullptr) {
302
+ errors->AddError("can't parse aggregate cluster config");
303
+ return aggregate;
304
+ }
305
+ size_t size;
306
+ const upb_StringView* clusters =
307
+ envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
308
+ aggregate_cluster_config, &size);
309
+ for (size_t i = 0; i < size; ++i) {
310
+ aggregate.prioritized_cluster_names.emplace_back(
311
+ UpbStringToStdString(clusters[i]));
312
+ }
313
+ return aggregate;
314
+ }
315
+
316
+ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
317
+ const envoy_config_cluster_v3_Cluster* cluster,
318
+ XdsClusterResource* cds_update,
319
+ ValidationErrors* errors) {
320
+ // First, check the new load_balancing_policy field.
321
+ if (XdsCustomLbPolicyEnabled()) {
322
+ const auto* load_balancing_policy =
323
+ envoy_config_cluster_v3_Cluster_load_balancing_policy(cluster);
324
+ if (load_balancing_policy != nullptr) {
325
+ const auto& registry =
326
+ static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
327
+ .lb_policy_registry();
328
+ ValidationErrors::ScopedField field(errors, ".load_balancing_policy");
329
+ const size_t original_error_count = errors->size();
330
+ cds_update->lb_policy_config = registry.ConvertXdsLbPolicyConfig(
331
+ context, load_balancing_policy, errors);
332
+ // If there were no conversion errors, validate that the converted config
333
+ // parses with the gRPC LB policy registry.
334
+ if (original_error_count == errors->size()) {
335
+ auto config =
336
+ CoreConfiguration::Get()
337
+ .lb_policy_registry()
338
+ .ParseLoadBalancingConfig(cds_update->lb_policy_config);
339
+ if (!config.ok()) errors->AddError(config.status().message());
291
340
  }
341
+ return;
292
342
  }
293
343
  }
294
- // Check the LB policy.
344
+ // Didn't find load_balancing_policy field, so fall back to the old
345
+ // lb_policy enum field.
295
346
  if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
296
347
  envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
297
- cds_update.lb_policy = "ROUND_ROBIN";
348
+ cds_update->lb_policy_config = {
349
+ Json::Object{
350
+ {"xds_wrr_locality_experimental",
351
+ Json::Object{
352
+ {"childPolicy",
353
+ Json::Array{
354
+ Json::Object{
355
+ {"round_robin", Json::Object()},
356
+ },
357
+ }},
358
+ }},
359
+ },
360
+ };
298
361
  } else if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
299
362
  envoy_config_cluster_v3_Cluster_RING_HASH) {
300
- cds_update.lb_policy = "RING_HASH";
301
363
  // Record ring hash lb config
302
364
  auto* ring_hash_config =
303
365
  envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
366
+ uint64_t min_ring_size = 1024;
367
+ uint64_t max_ring_size = 8388608;
304
368
  if (ring_hash_config != nullptr) {
305
- const google_protobuf_UInt64Value* max_ring_size =
369
+ ValidationErrors::ScopedField field(errors, ".ring_hash_lb_config");
370
+ const google_protobuf_UInt64Value* uint64_value =
306
371
  envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
307
372
  ring_hash_config);
308
- if (max_ring_size != nullptr) {
309
- cds_update.max_ring_size =
310
- google_protobuf_UInt64Value_value(max_ring_size);
311
- if (cds_update.max_ring_size > 8388608 ||
312
- cds_update.max_ring_size == 0) {
313
- errors.emplace_back(
314
- "max_ring_size is not in the range of 1 to 8388608.");
373
+ if (uint64_value != nullptr) {
374
+ ValidationErrors::ScopedField field(errors, ".maximum_ring_size");
375
+ max_ring_size = google_protobuf_UInt64Value_value(uint64_value);
376
+ if (max_ring_size > 8388608 || max_ring_size == 0) {
377
+ errors->AddError("must be in the range of 1 to 8388608");
315
378
  }
316
379
  }
317
- const google_protobuf_UInt64Value* min_ring_size =
380
+ uint64_value =
318
381
  envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
319
382
  ring_hash_config);
320
- if (min_ring_size != nullptr) {
321
- cds_update.min_ring_size =
322
- google_protobuf_UInt64Value_value(min_ring_size);
323
- if (cds_update.min_ring_size > 8388608 ||
324
- cds_update.min_ring_size == 0) {
325
- errors.emplace_back(
326
- "min_ring_size is not in the range of 1 to 8388608.");
383
+ if (uint64_value != nullptr) {
384
+ ValidationErrors::ScopedField field(errors, ".minimum_ring_size");
385
+ min_ring_size = google_protobuf_UInt64Value_value(uint64_value);
386
+ if (min_ring_size > 8388608 || min_ring_size == 0) {
387
+ errors->AddError("must be in the range of 1 to 8388608");
327
388
  }
328
- if (cds_update.min_ring_size > cds_update.max_ring_size) {
329
- errors.emplace_back(
330
- "min_ring_size cannot be greater than max_ring_size.");
389
+ if (min_ring_size > max_ring_size) {
390
+ errors->AddError("cannot be greater than maximum_ring_size");
331
391
  }
332
392
  }
333
393
  if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
334
394
  ring_hash_config) !=
335
395
  envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
336
- errors.emplace_back("ring hash lb config has invalid hash function.");
396
+ ValidationErrors::ScopedField field(errors, ".hash_function");
397
+ errors->AddError("invalid hash function");
337
398
  }
338
399
  }
400
+ cds_update->lb_policy_config = {
401
+ Json::Object{
402
+ {"ring_hash_experimental",
403
+ Json::Object{
404
+ {"minRingSize", min_ring_size},
405
+ {"maxRingSize", max_ring_size},
406
+ }},
407
+ },
408
+ };
339
409
  } else {
340
- errors.emplace_back("LB policy is not supported.");
410
+ ValidationErrors::ScopedField field(errors, ".lb_policy");
411
+ errors->AddError("LB policy is not supported");
341
412
  }
413
+ }
414
+
415
+ absl::StatusOr<XdsClusterResource> CdsResourceParse(
416
+ const XdsResourceType::DecodeContext& context,
417
+ const envoy_config_cluster_v3_Cluster* cluster) {
418
+ XdsClusterResource cds_update;
419
+ ValidationErrors errors;
420
+ // Check the cluster discovery type.
421
+ if (envoy_config_cluster_v3_Cluster_type(cluster) ==
422
+ envoy_config_cluster_v3_Cluster_EDS) {
423
+ cds_update.type = EdsConfigParse(cluster, &errors);
424
+ } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
425
+ envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
426
+ cds_update.type = LogicalDnsParse(cluster, &errors);
427
+ } else if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
428
+ ValidationErrors::ScopedField field(&errors, ".cluster_type");
429
+ const auto* custom_cluster_type =
430
+ envoy_config_cluster_v3_Cluster_cluster_type(cluster);
431
+ GPR_ASSERT(custom_cluster_type != nullptr);
432
+ ValidationErrors::ScopedField field2(&errors, ".typed_config");
433
+ const auto* typed_config =
434
+ envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
435
+ custom_cluster_type);
436
+ if (typed_config == nullptr) {
437
+ errors.AddError("field not present");
438
+ } else {
439
+ absl::string_view type_url = absl::StripPrefix(
440
+ UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
441
+ "type.googleapis.com/");
442
+ if (type_url != "envoy.extensions.clusters.aggregate.v3.ClusterConfig") {
443
+ ValidationErrors::ScopedField field(&errors, ".type_url");
444
+ errors.AddError(
445
+ absl::StrCat("unknown cluster_type extension: ", type_url));
446
+ } else {
447
+ // Retrieve aggregate clusters.
448
+ ValidationErrors::ScopedField field(
449
+ &errors,
450
+ ".value[envoy.extensions.clusters.aggregate.v3.ClusterConfig]");
451
+ absl::string_view serialized_config =
452
+ UpbStringToAbsl(google_protobuf_Any_value(typed_config));
453
+ cds_update.type =
454
+ AggregateClusterParse(context, serialized_config, &errors);
455
+ }
456
+ }
457
+ } else {
458
+ ValidationErrors::ScopedField field(&errors, ".type");
459
+ errors.AddError("unknown discovery type");
460
+ }
461
+ // Check the LB policy.
462
+ ParseLbPolicyConfig(context, cluster, &cds_update, &errors);
463
+ // transport_socket
342
464
  auto* transport_socket =
343
465
  envoy_config_cluster_v3_Cluster_transport_socket(cluster);
344
466
  if (transport_socket != nullptr) {
345
- auto common_tls_context =
346
- UpstreamTlsContextParse(context, transport_socket);
347
- if (!common_tls_context.ok()) {
348
- errors.emplace_back(absl::StrCat("Error parsing security configuration: ",
349
- common_tls_context.status().message()));
350
- } else {
351
- cds_update.common_tls_context = std::move(*common_tls_context);
352
- }
467
+ ValidationErrors::ScopedField field(&errors, ".transport_socket");
468
+ cds_update.common_tls_context =
469
+ UpstreamTlsContextParse(context, transport_socket, &errors);
353
470
  }
354
471
  // Record LRS server name (if any).
355
472
  const envoy_config_core_v3_ConfigSource* lrs_server =
356
473
  envoy_config_cluster_v3_Cluster_lrs_server(cluster);
357
474
  if (lrs_server != nullptr) {
358
475
  if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
359
- errors.emplace_back("LRS ConfigSource is not self.");
476
+ ValidationErrors::ScopedField field(&errors, ".lrs_server");
477
+ errors.AddError("ConfigSource is not self");
360
478
  }
361
479
  cds_update.lrs_load_reporting_server.emplace(
362
480
  static_cast<const GrpcXdsBootstrap::GrpcXdsServer&>(context.server));
@@ -387,30 +505,31 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
387
505
  }
388
506
  }
389
507
  }
390
- // As long as outlier detection field is present in the cluster update,
391
- // we will end up with a outlier detection in the cluster resource which will
392
- // lead to the creation of outlier detection in discovery mechanism. Values
393
- // for outlier detection will be based on fields received and
394
- // default values.
395
- if (XdsOutlierDetectionEnabled() &&
396
- envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
508
+ // Outlier detection config.
509
+ if (envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
510
+ ValidationErrors::ScopedField field(&errors, ".outlier_detection");
397
511
  OutlierDetectionConfig outlier_detection_update;
398
512
  const envoy_config_cluster_v3_OutlierDetection* outlier_detection =
399
513
  envoy_config_cluster_v3_Cluster_outlier_detection(cluster);
400
514
  const google_protobuf_Duration* duration =
401
515
  envoy_config_cluster_v3_OutlierDetection_interval(outlier_detection);
402
516
  if (duration != nullptr) {
403
- outlier_detection_update.interval = ParseDuration(duration);
517
+ ValidationErrors::ScopedField field(&errors, ".interval");
518
+ outlier_detection_update.interval = ParseDuration(duration, &errors);
404
519
  }
405
520
  duration = envoy_config_cluster_v3_OutlierDetection_base_ejection_time(
406
521
  outlier_detection);
407
522
  if (duration != nullptr) {
408
- outlier_detection_update.base_ejection_time = ParseDuration(duration);
523
+ ValidationErrors::ScopedField field(&errors, ".base_ejection_time");
524
+ outlier_detection_update.base_ejection_time =
525
+ ParseDuration(duration, &errors);
409
526
  }
410
527
  duration = envoy_config_cluster_v3_OutlierDetection_max_ejection_time(
411
528
  outlier_detection);
412
529
  if (duration != nullptr) {
413
- outlier_detection_update.max_ejection_time = ParseDuration(duration);
530
+ ValidationErrors::ScopedField field(&errors, ".max_ejection_time");
531
+ outlier_detection_update.max_ejection_time =
532
+ ParseDuration(duration, &errors);
414
533
  }
415
534
  const google_protobuf_UInt32Value* max_ejection_percent =
416
535
  envoy_config_cluster_v3_OutlierDetection_max_ejection_percent(
@@ -418,6 +537,10 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
418
537
  if (max_ejection_percent != nullptr) {
419
538
  outlier_detection_update.max_ejection_percent =
420
539
  google_protobuf_UInt32Value_value(max_ejection_percent);
540
+ if (outlier_detection_update.max_ejection_percent > 100) {
541
+ ValidationErrors::ScopedField field(&errors, ".max_ejection_percent");
542
+ errors.AddError("value must be <= 100");
543
+ }
421
544
  }
422
545
  const google_protobuf_UInt32Value* enforcing_success_rate =
423
546
  envoy_config_cluster_v3_OutlierDetection_enforcing_success_rate(
@@ -425,6 +548,10 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
425
548
  if (enforcing_success_rate != nullptr) {
426
549
  uint32_t enforcement_percentage =
427
550
  google_protobuf_UInt32Value_value(enforcing_success_rate);
551
+ if (enforcement_percentage > 100) {
552
+ ValidationErrors::ScopedField field(&errors, ".enforcing_success_rate");
553
+ errors.AddError("value must be <= 100");
554
+ }
428
555
  if (enforcement_percentage != 0) {
429
556
  OutlierDetectionConfig::SuccessRateEjection success_rate_ejection;
430
557
  success_rate_ejection.enforcement_percentage = enforcement_percentage;
@@ -458,6 +585,11 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
458
585
  if (enforcing_failure_percentage != nullptr) {
459
586
  uint32_t enforcement_percentage =
460
587
  google_protobuf_UInt32Value_value(enforcing_failure_percentage);
588
+ if (enforcement_percentage > 100) {
589
+ ValidationErrors::ScopedField field(&errors,
590
+ ".enforcing_failure_percentage");
591
+ errors.AddError("value must be <= 100");
592
+ }
461
593
  if (enforcement_percentage != 0) {
462
594
  OutlierDetectionConfig::FailurePercentageEjection
463
595
  failure_percentage_ejection;
@@ -483,6 +615,11 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
483
615
  if (threshold != nullptr) {
484
616
  failure_percentage_ejection.threshold =
485
617
  google_protobuf_UInt32Value_value(threshold);
618
+ if (enforcement_percentage > 100) {
619
+ ValidationErrors::ScopedField field(
620
+ &errors, ".failure_percentage_threshold");
621
+ errors.AddError("value must be <= 100");
622
+ }
486
623
  }
487
624
  outlier_detection_update.failure_percentage_ejection =
488
625
  failure_percentage_ejection;
@@ -490,11 +627,31 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
490
627
  }
491
628
  cds_update.outlier_detection = outlier_detection_update;
492
629
  }
493
- // Return result.
494
- if (!errors.empty()) {
495
- return absl::InvalidArgumentError(absl::StrCat(
496
- "errors parsing CDS resource: [", absl::StrJoin(errors, "; "), "]"));
630
+ // Validate override host status.
631
+ if (XdsHostOverrideEnabled()) {
632
+ const auto* common_lb_config =
633
+ envoy_config_cluster_v3_Cluster_common_lb_config(cluster);
634
+ if (common_lb_config != nullptr) {
635
+ ValidationErrors::ScopedField field(&errors, ".common_lb_config");
636
+ const auto* override_host_status =
637
+ envoy_config_cluster_v3_Cluster_CommonLbConfig_override_host_status(
638
+ common_lb_config);
639
+ if (override_host_status != nullptr) {
640
+ ValidationErrors::ScopedField field(&errors, ".override_host_status");
641
+ size_t size;
642
+ const int32_t* statuses = envoy_config_core_v3_HealthStatusSet_statuses(
643
+ override_host_status, &size);
644
+ for (size_t i = 0; i < size; ++i) {
645
+ auto status = XdsHealthStatus::FromUpb(statuses[i]);
646
+ if (status.has_value()) {
647
+ cds_update.host_override_statuses.insert(*status);
648
+ }
649
+ }
650
+ }
651
+ }
497
652
  }
653
+ // Return result.
654
+ if (!errors.ok()) return errors.status("errors validating Cluster resource");
498
655
  return cds_update;
499
656
  }
500
657
 
@@ -514,7 +671,7 @@ void MaybeLogCluster(const XdsResourceType::DecodeContext& context,
514
671
 
515
672
  XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
516
673
  const XdsResourceType::DecodeContext& context,
517
- absl::string_view serialized_resource, bool is_v2) const {
674
+ absl::string_view serialized_resource) const {
518
675
  DecodeResult result;
519
676
  // Parse serialized proto.
520
677
  auto* resource = envoy_config_cluster_v3_Cluster_parse(
@@ -528,7 +685,7 @@ XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
528
685
  // Validate resource.
529
686
  result.name =
530
687
  UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(resource));
531
- auto cds_resource = CdsResourceParse(context, resource, is_v2);
688
+ auto cds_resource = CdsResourceParse(context, resource);
532
689
  if (!cds_resource.ok()) {
533
690
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
534
691
  gpr_log(GPR_ERROR, "[xds_client %p] invalid Cluster %s: %s",
@@ -541,9 +698,8 @@ XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
541
698
  gpr_log(GPR_INFO, "[xds_client %p] parsed Cluster %s: %s", context.client,
542
699
  result.name->c_str(), cds_resource->ToString().c_str());
543
700
  }
544
- auto resource = absl::make_unique<ResourceDataSubclass>();
545
- resource->resource = std::move(*cds_resource);
546
- result.resource = std::move(resource);
701
+ result.resource =
702
+ std::make_unique<XdsClusterResource>(std::move(*cds_resource));
547
703
  }
548
704
  return result;
549
705
  }