grpc 1.48.0-x86_64-linux → 1.49.0.pre1-x86_64-linux

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

Potentially problematic release.


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

Files changed (721) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +117 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -124
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +98 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +38 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +40 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  659. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  660. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  661. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  662. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  663. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  664. data/src/ruby/lib/grpc/version.rb +1 -1
  665. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  666. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  667. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  668. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  669. data/third_party/upb/upb/arena.c +277 -0
  670. data/third_party/upb/upb/arena.h +225 -0
  671. data/third_party/upb/upb/array.c +114 -0
  672. data/third_party/upb/upb/array.h +83 -0
  673. data/third_party/upb/upb/collections.h +36 -0
  674. data/third_party/upb/upb/decode.c +161 -65
  675. data/third_party/upb/upb/decode.h +1 -0
  676. data/third_party/upb/upb/decode_fast.c +1 -1
  677. data/third_party/upb/upb/def.c +10 -2
  678. data/third_party/upb/upb/def.h +8 -1
  679. data/third_party/upb/upb/def.hpp +7 -4
  680. data/third_party/upb/upb/encode.c +29 -20
  681. data/third_party/upb/upb/encode.h +16 -6
  682. data/third_party/upb/upb/extension_registry.c +93 -0
  683. data/third_party/upb/upb/extension_registry.h +84 -0
  684. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  685. data/third_party/upb/upb/internal/table.h +385 -0
  686. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  687. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  688. data/third_party/upb/upb/json_decode.c +1512 -0
  689. data/third_party/upb/upb/json_decode.h +47 -0
  690. data/third_party/upb/upb/json_encode.c +7 -3
  691. data/third_party/upb/upb/json_encode.h +6 -3
  692. data/third_party/upb/upb/map.c +108 -0
  693. data/third_party/upb/upb/map.h +117 -0
  694. data/third_party/upb/upb/message_value.h +66 -0
  695. data/third_party/upb/upb/mini_table.c +1147 -0
  696. data/third_party/upb/upb/mini_table.h +189 -0
  697. data/third_party/upb/upb/mini_table.hpp +112 -0
  698. data/third_party/upb/upb/msg.c +2 -62
  699. data/third_party/upb/upb/msg.h +2 -45
  700. data/third_party/upb/upb/msg_internal.h +28 -22
  701. data/third_party/upb/upb/port_def.inc +2 -1
  702. data/third_party/upb/upb/port_undef.inc +1 -0
  703. data/third_party/upb/upb/reflection.c +2 -159
  704. data/third_party/upb/upb/reflection.h +2 -112
  705. data/third_party/upb/upb/status.c +86 -0
  706. data/third_party/upb/upb/status.h +66 -0
  707. data/third_party/upb/upb/table.c +2 -2
  708. data/third_party/upb/upb/table_internal.h +3 -352
  709. data/third_party/upb/upb/text_encode.c +3 -2
  710. data/third_party/upb/upb/upb.c +4 -290
  711. data/third_party/upb/upb/upb.h +7 -196
  712. metadata +90 -38
  713. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  714. data/src/core/lib/iomgr/error_internal.h +0 -66
  715. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  716. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  717. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  718. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  719. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  720. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  721. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -18,6 +18,7 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
20
20
 
21
+ #include <inttypes.h>
21
22
  #include <stddef.h>
22
23
 
23
24
  #include <algorithm>
@@ -35,19 +36,16 @@
35
36
  #include "absl/random/random.h"
36
37
  #include "absl/status/status.h"
37
38
  #include "absl/status/statusor.h"
39
+ #include "absl/strings/str_cat.h"
40
+ #include "absl/strings/str_join.h"
38
41
  #include "absl/strings/string_view.h"
39
42
  #include "absl/types/variant.h"
40
43
 
41
44
  #include <grpc/impl/codegen/connectivity_state.h>
42
- #include <grpc/impl/codegen/grpc_types.h>
43
45
  #include <grpc/support/alloc.h>
44
46
  #include <grpc/support/log.h>
45
47
 
46
- #include "src/core/ext/filters/client_channel/lb_policy.h"
47
48
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
48
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
49
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
50
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
51
49
  #include "src/core/lib/address_utils/sockaddr_utils.h"
52
50
  #include "src/core/lib/channel/channel_args.h"
53
51
  #include "src/core/lib/debug/trace.h"
@@ -57,15 +55,19 @@
57
55
  #include "src/core/lib/gprpp/orphanable.h"
58
56
  #include "src/core/lib/gprpp/ref_counted.h"
59
57
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
58
+ #include "src/core/lib/gprpp/work_serializer.h"
60
59
  #include "src/core/lib/iomgr/closure.h"
61
60
  #include "src/core/lib/iomgr/error.h"
62
61
  #include "src/core/lib/iomgr/exec_ctx.h"
63
62
  #include "src/core/lib/iomgr/iomgr_fwd.h"
64
63
  #include "src/core/lib/iomgr/pollset_set.h"
65
64
  #include "src/core/lib/iomgr/timer.h"
66
- #include "src/core/lib/iomgr/work_serializer.h"
67
65
  #include "src/core/lib/json/json.h"
68
66
  #include "src/core/lib/json/json_util.h"
67
+ #include "src/core/lib/load_balancing/lb_policy.h"
68
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
69
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
70
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
69
71
  #include "src/core/lib/resolver/server_address.h"
70
72
  #include "src/core/lib/transport/connectivity_state.h"
71
73
 
@@ -84,7 +86,8 @@ bool XdsOutlierDetectionEnabled() {
84
86
 
85
87
  namespace {
86
88
 
87
- constexpr char kOutlierDetection[] = "outlier_detection_experimental";
89
+ constexpr absl::string_view kOutlierDetection =
90
+ "outlier_detection_experimental";
88
91
 
89
92
  // Config for xDS Cluster Impl LB policy.
90
93
  class OutlierDetectionLbConfig : public LoadBalancingPolicy::Config {
@@ -95,13 +98,11 @@ class OutlierDetectionLbConfig : public LoadBalancingPolicy::Config {
95
98
  : outlier_detection_config_(outlier_detection_config),
96
99
  child_policy_(std::move(child_policy)) {}
97
100
 
98
- const char* name() const override { return kOutlierDetection; }
101
+ absl::string_view name() const override { return kOutlierDetection; }
99
102
 
100
103
  bool CountingEnabled() const {
101
- return (
102
- outlier_detection_config_.interval != Duration::Infinity() &&
103
- (outlier_detection_config_.success_rate_ejection.has_value() ||
104
- outlier_detection_config_.failure_percentage_ejection.has_value()));
104
+ return outlier_detection_config_.success_rate_ejection.has_value() ||
105
+ outlier_detection_config_.failure_percentage_ejection.has_value();
105
106
  }
106
107
 
107
108
  const OutlierDetectionConfig& outlier_detection_config() const {
@@ -122,7 +123,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
122
123
  public:
123
124
  explicit OutlierDetectionLb(Args args);
124
125
 
125
- const char* name() const override { return kOutlierDetection; }
126
+ absl::string_view name() const override { return kOutlierDetection; }
126
127
 
127
128
  void UpdateLocked(UpdateArgs args) override;
128
129
  void ExitIdleLocked() override;
@@ -282,7 +283,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
282
283
  }
283
284
  }
284
285
 
285
- void MaybeUneject(uint64_t base_ejection_time_in_millis,
286
+ bool MaybeUneject(uint64_t base_ejection_time_in_millis,
286
287
  uint64_t max_ejection_time_in_millis) {
287
288
  if (!ejection_time_.has_value()) {
288
289
  if (multiplier_ > 0) {
@@ -297,8 +298,15 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
297
298
  max_ejection_time_in_millis)));
298
299
  if (change_time < ExecCtx::Get()->Now()) {
299
300
  Uneject();
301
+ return true;
300
302
  }
301
303
  }
304
+ return false;
305
+ }
306
+
307
+ void DisableEjection() {
308
+ Uneject();
309
+ multiplier_ = 0;
302
310
  }
303
311
 
304
312
  private:
@@ -347,7 +355,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
347
355
  }
348
356
 
349
357
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
350
- ServerAddress address, const grpc_channel_args& args) override;
358
+ ServerAddress address, const ChannelArgs& args) override;
351
359
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
352
360
  std::unique_ptr<SubchannelPicker> picker) override;
353
361
  void RequestReresolution() override;
@@ -387,7 +395,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
387
395
  void ShutdownLocked() override;
388
396
 
389
397
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
390
- const grpc_channel_args* args);
398
+ const ChannelArgs& args);
391
399
 
392
400
  void MaybeUpdatePickerLocked();
393
401
 
@@ -596,9 +604,17 @@ void OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
596
604
  // Update outlier detection timer.
597
605
  if (!config_->CountingEnabled()) {
598
606
  // No need for timer. Cancel the current timer, if any.
607
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
608
+ gpr_log(GPR_INFO,
609
+ "[outlier_detection_lb %p] counting disabled, cancelling timer",
610
+ this);
611
+ }
599
612
  ejection_timer_.reset();
600
613
  } else if (ejection_timer_ == nullptr) {
601
614
  // No timer running. Start it now.
615
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
616
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] starting timer", this);
617
+ }
602
618
  ejection_timer_ =
603
619
  MakeOrphanable<EjectionTimer>(Ref(), ExecCtx::Get()->Now());
604
620
  for (const auto& p : subchannel_state_map_) {
@@ -610,13 +626,15 @@ void OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
610
626
  // with the same start time.
611
627
  // Note that if the new deadline is in the past, the timer will fire
612
628
  // immediately.
629
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
630
+ gpr_log(GPR_INFO,
631
+ "[outlier_detection_lb %p] interval changed, replacing timer",
632
+ this);
633
+ }
613
634
  ejection_timer_ =
614
635
  MakeOrphanable<EjectionTimer>(Ref(), ejection_timer_->StartTime());
615
636
  }
616
- // Create policy if needed.
617
- if (child_policy_ == nullptr) {
618
- child_policy_ = CreateChildPolicyLocked(args.args);
619
- }
637
+ // Update subchannel state map.
620
638
  if (args.addresses.ok()) {
621
639
  std::set<std::string> current_addresses;
622
640
  for (const ServerAddress& address : *args.addresses) {
@@ -624,6 +642,14 @@ void OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
624
642
  auto& subchannel_state = subchannel_state_map_[address_key];
625
643
  if (subchannel_state == nullptr) {
626
644
  subchannel_state = MakeRefCounted<SubchannelState>();
645
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
646
+ gpr_log(GPR_INFO,
647
+ "[outlier_detection_lb %p] adding map entry for %s (%p)",
648
+ this, address_key.c_str(), subchannel_state.get());
649
+ }
650
+ } else if (!config_->CountingEnabled()) {
651
+ // If counting is not enabled, reset state.
652
+ subchannel_state->DisableEjection();
627
653
  }
628
654
  current_addresses.emplace(address_key);
629
655
  }
@@ -632,18 +658,28 @@ void OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
632
658
  if (current_addresses.find(it->first) == current_addresses.end()) {
633
659
  // remove each map entry for a subchannel address not in the updated
634
660
  // address list.
661
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
662
+ gpr_log(GPR_INFO,
663
+ "[outlier_detection_lb %p] removing map entry for %s (%p)",
664
+ this, it->first.c_str(), it->second.get());
665
+ }
635
666
  it = subchannel_state_map_.erase(it);
636
667
  } else {
637
668
  ++it;
638
669
  }
639
670
  }
640
671
  }
641
- // Construct update args.
672
+ // Create child policy if needed.
673
+ if (child_policy_ == nullptr) {
674
+ child_policy_ = CreateChildPolicyLocked(args.args);
675
+ }
676
+ // Update child policy.
642
677
  UpdateArgs update_args;
643
678
  update_args.addresses = std::move(args.addresses);
679
+ update_args.resolution_note = std::move(args.resolution_note);
644
680
  update_args.config = config_->child_policy();
645
- update_args.args = grpc_channel_args_copy(args.args);
646
681
  // Update the policy.
682
+ update_args.args = std::move(args.args);
647
683
  if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
648
684
  gpr_log(GPR_INFO,
649
685
  "[outlier_detection_lb %p] Updating child policy handler %p", this,
@@ -669,7 +705,7 @@ void OutlierDetectionLb::MaybeUpdatePickerLocked() {
669
705
  }
670
706
 
671
707
  OrphanablePtr<LoadBalancingPolicy> OutlierDetectionLb::CreateChildPolicyLocked(
672
- const grpc_channel_args* args) {
708
+ const ChannelArgs& args) {
673
709
  LoadBalancingPolicy::Args lb_policy_args;
674
710
  lb_policy_args.work_serializer = work_serializer();
675
711
  lb_policy_args.args = args;
@@ -696,7 +732,7 @@ OrphanablePtr<LoadBalancingPolicy> OutlierDetectionLb::CreateChildPolicyLocked(
696
732
  //
697
733
 
698
734
  RefCountedPtr<SubchannelInterface> OutlierDetectionLb::Helper::CreateSubchannel(
699
- ServerAddress address, const grpc_channel_args& args) {
735
+ ServerAddress address, const ChannelArgs& args) {
700
736
  if (outlier_detection_policy_->shutting_down_) return nullptr;
701
737
  std::string key = MakeKeyForAddress(address);
702
738
  RefCountedPtr<SubchannelState> subchannel_state;
@@ -721,8 +757,7 @@ void OutlierDetectionLb::Helper::UpdateState(
721
757
  if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
722
758
  gpr_log(GPR_INFO,
723
759
  "[outlier_detection_lb %p] child connectivity state update: "
724
- "state=%s (%s) "
725
- "picker=%p",
760
+ "state=%s (%s) picker=%p",
726
761
  outlier_detection_policy_.get(), ConnectivityStateName(state),
727
762
  status.ToString().c_str(), picker.get());
728
763
  }
@@ -758,12 +793,14 @@ void OutlierDetectionLb::Helper::AddTraceEvent(TraceSeverity severity,
758
793
  OutlierDetectionLb::EjectionTimer::EjectionTimer(
759
794
  RefCountedPtr<OutlierDetectionLb> parent, Timestamp start_time)
760
795
  : parent_(std::move(parent)), start_time_(start_time) {
796
+ auto interval = parent_->config_->outlier_detection_config().interval;
797
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
798
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] ejection timer will run in %s",
799
+ parent_.get(), interval.ToString().c_str());
800
+ }
761
801
  GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr);
762
802
  Ref().release();
763
- grpc_timer_init(
764
- &timer_,
765
- start_time_ + parent_->config_->outlier_detection_config().interval,
766
- &on_timer_);
803
+ grpc_timer_init(&timer_, start_time_ + interval, &on_timer_);
767
804
  }
768
805
 
769
806
  void OutlierDetectionLb::EjectionTimer::Orphan() {
@@ -784,6 +821,10 @@ void OutlierDetectionLb::EjectionTimer::OnTimer(void* arg,
784
821
 
785
822
  void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
786
823
  if (GRPC_ERROR_IS_NONE(error) && timer_pending_) {
824
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
825
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] ejection timer running",
826
+ parent_.get());
827
+ }
787
828
  std::map<SubchannelState*, double> success_rate_ejection_candidates;
788
829
  std::map<SubchannelState*, double> failure_percentage_ejection_candidates;
789
830
  size_t ejected_host_count = 0;
@@ -821,36 +862,71 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
821
862
  }
822
863
  }
823
864
  }
865
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
866
+ gpr_log(GPR_INFO,
867
+ "[outlier_detection_lb %p] found %" PRIuPTR
868
+ " success rate candidates and %" PRIuPTR
869
+ " failure percentage candidates; ejected_host_count=%" PRIuPTR
870
+ "; success_rate_sum=%.3f",
871
+ parent_.get(), success_rate_ejection_candidates.size(),
872
+ failure_percentage_ejection_candidates.size(), ejected_host_count,
873
+ success_rate_sum);
874
+ }
824
875
  // success rate algorithm
825
876
  if (!success_rate_ejection_candidates.empty() &&
826
877
  success_rate_ejection_candidates.size() >=
827
878
  config.success_rate_ejection->minimum_hosts) {
879
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
880
+ gpr_log(GPR_INFO,
881
+ "[outlier_detection_lb %p] running success rate algorithm",
882
+ parent_.get());
883
+ }
828
884
  // calculate ejection threshold: (mean - stdev *
829
885
  // (success_rate_ejection.stdev_factor / 1000))
830
886
  double mean = success_rate_sum / success_rate_ejection_candidates.size();
831
887
  double variance = 0;
832
- std::for_each(success_rate_ejection_candidates.begin(),
833
- success_rate_ejection_candidates.end(),
834
- [&variance, mean](std::pair<SubchannelState*, double> v) {
835
- variance += std::pow(v.second - mean, 2);
836
- });
888
+ for (const auto& p : success_rate_ejection_candidates) {
889
+ variance += std::pow(p.second - mean, 2);
890
+ }
837
891
  variance /= success_rate_ejection_candidates.size();
838
892
  double stdev = std::sqrt(variance);
839
893
  const double success_rate_stdev_factor =
840
894
  static_cast<double>(config.success_rate_ejection->stdev_factor) /
841
895
  1000;
842
896
  double ejection_threshold = mean - stdev * success_rate_stdev_factor;
897
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
898
+ gpr_log(GPR_INFO,
899
+ "[outlier_detection_lb %p] stdev=%.3f, ejection_threshold=%.3f",
900
+ parent_.get(), stdev, ejection_threshold);
901
+ }
843
902
  for (auto& candidate : success_rate_ejection_candidates) {
903
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
904
+ gpr_log(GPR_INFO,
905
+ "[outlier_detection_lb %p] checking candidate %p: "
906
+ "success_rate=%.3f",
907
+ parent_.get(), candidate.first, candidate.second);
908
+ }
844
909
  if (candidate.second < ejection_threshold) {
845
910
  uint32_t random_key = absl::Uniform(bit_gen_, 1, 100);
846
911
  double current_percent = 100.0 * ejected_host_count /
847
912
  parent_->subchannel_state_map_.size();
913
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
914
+ gpr_log(GPR_INFO,
915
+ "[outlier_detection_lb %p] random_key=%d "
916
+ "ejected_host_count=%" PRIuPTR " current_percent=%.3f",
917
+ parent_.get(), random_key, ejected_host_count,
918
+ current_percent);
919
+ }
848
920
  if (random_key <
849
921
  config.success_rate_ejection->enforcement_percentage &&
850
922
  (ejected_host_count == 0 ||
851
923
  (current_percent < config.max_ejection_percent))) {
852
924
  // Eject and record the timestamp for use when ejecting addresses in
853
925
  // this iteration.
926
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
927
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] ejecting candidate",
928
+ parent_.get());
929
+ }
854
930
  candidate.first->Eject(time_now);
855
931
  ++ejected_host_count;
856
932
  }
@@ -861,7 +937,19 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
861
937
  if (!failure_percentage_ejection_candidates.empty() &&
862
938
  failure_percentage_ejection_candidates.size() >=
863
939
  config.failure_percentage_ejection->minimum_hosts) {
940
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
941
+ gpr_log(
942
+ GPR_INFO,
943
+ "[outlier_detection_lb %p] running failure percentage algorithm",
944
+ parent_.get());
945
+ }
864
946
  for (auto& candidate : failure_percentage_ejection_candidates) {
947
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
948
+ gpr_log(GPR_INFO,
949
+ "[outlier_detection_lb %p] checking candidate %p: "
950
+ "success_rate=%.3f",
951
+ parent_.get(), candidate.first, candidate.second);
952
+ }
865
953
  // Extra check to make sure success rate algorithm didn't already
866
954
  // eject this backend.
867
955
  if (candidate.first->ejection_time().has_value()) continue;
@@ -870,12 +958,23 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
870
958
  uint32_t random_key = absl::Uniform(bit_gen_, 1, 100);
871
959
  double current_percent = 100.0 * ejected_host_count /
872
960
  parent_->subchannel_state_map_.size();
961
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
962
+ gpr_log(GPR_INFO,
963
+ "[outlier_detection_lb %p] random_key=%d "
964
+ "ejected_host_count=%" PRIuPTR " current_percent=%.3f",
965
+ parent_.get(), random_key, ejected_host_count,
966
+ current_percent);
967
+ }
873
968
  if (random_key <
874
969
  config.failure_percentage_ejection->enforcement_percentage &&
875
970
  (ejected_host_count == 0 ||
876
971
  (current_percent < config.max_ejection_percent))) {
877
972
  // Eject and record the timestamp for use when ejecting addresses in
878
973
  // this iteration.
974
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
975
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] ejecting candidate",
976
+ parent_.get());
977
+ }
879
978
  candidate.first->Eject(time_now);
880
979
  ++ejected_host_count;
881
980
  }
@@ -890,8 +989,14 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
890
989
  // address.
891
990
  for (auto& state : parent_->subchannel_state_map_) {
892
991
  auto* subchannel_state = state.second.get();
893
- subchannel_state->MaybeUneject(config.base_ejection_time.millis(),
894
- config.max_ejection_time.millis());
992
+ const bool unejected =
993
+ subchannel_state->MaybeUneject(config.base_ejection_time.millis(),
994
+ config.max_ejection_time.millis());
995
+ if (unejected &&
996
+ GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
997
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] unejected address %s (%p)",
998
+ parent_.get(), state.first.c_str(), subchannel_state);
999
+ }
895
1000
  }
896
1001
  timer_pending_ = false;
897
1002
  parent_->ejection_timer_ =
@@ -912,28 +1017,27 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
912
1017
  return MakeOrphanable<OutlierDetectionLb>(std::move(args));
913
1018
  }
914
1019
 
915
- const char* name() const override { return kOutlierDetection; }
1020
+ absl::string_view name() const override { return kOutlierDetection; }
916
1021
 
917
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
918
- const Json& json, grpc_error_handle* error) const override {
919
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
1022
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
1023
+ ParseLoadBalancingConfig(const Json& json) const override {
920
1024
  if (json.type() == Json::Type::JSON_NULL) {
921
1025
  // This policy was configured in the deprecated loadBalancingPolicy
922
1026
  // field or in the client API.
923
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1027
+ return absl::InvalidArgumentError(
924
1028
  "field:loadBalancingPolicy error:outlier_detection policy requires "
925
1029
  "configuration. Please use loadBalancingConfig field of service "
926
1030
  "config instead.");
927
- return nullptr;
928
1031
  }
1032
+ std::vector<std::string> errors;
929
1033
  std::vector<grpc_error_handle> error_list;
930
1034
  // Outlier detection config
931
1035
  OutlierDetectionConfig outlier_detection_config;
932
1036
  auto it = json.object_value().find("successRateEjection");
933
1037
  if (it != json.object_value().end()) {
934
1038
  if (it->second.type() != Json::Type::OBJECT) {
935
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
936
- "field:successRateEjection error:type must be object"));
1039
+ errors.emplace_back(
1040
+ "field:successRateEjection error:type must be object");
937
1041
  } else {
938
1042
  OutlierDetectionConfig::SuccessRateEjection success_config;
939
1043
  const Json::Object& object = it->second.object_value();
@@ -955,8 +1059,8 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
955
1059
  it = json.object_value().find("failurePercentageEjection");
956
1060
  if (it != json.object_value().end()) {
957
1061
  if (it->second.type() != Json::Type::OBJECT) {
958
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
959
- "field:successRateEjection error:type must be object"));
1062
+ errors.emplace_back(
1063
+ "field:successRateEjection error:type must be object");
960
1064
  } else {
961
1065
  OutlierDetectionConfig::FailurePercentageEjection failure_config;
962
1066
  const Json::Object& object = it->second.object_value();
@@ -976,7 +1080,7 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
976
1080
  }
977
1081
  ParseJsonObjectFieldAsDuration(json.object_value(), "interval",
978
1082
  &outlier_detection_config.interval,
979
- &error_list);
1083
+ &error_list, /*required=*/false);
980
1084
  ParseJsonObjectFieldAsDuration(json.object_value(), "baseEjectionTime",
981
1085
  &outlier_detection_config.base_ejection_time,
982
1086
  &error_list, /*required=*/false);
@@ -993,24 +1097,26 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
993
1097
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
994
1098
  it = json.object_value().find("childPolicy");
995
1099
  if (it == json.object_value().end()) {
996
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
997
- "field:childPolicy error:required field missing"));
1100
+ errors.emplace_back("field:childPolicy error:required field missing");
998
1101
  } else {
999
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1000
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1001
- it->second, &parse_error);
1002
- if (child_policy == nullptr) {
1003
- GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
1004
- std::vector<grpc_error_handle> child_errors;
1005
- child_errors.push_back(parse_error);
1006
- error_list.push_back(
1007
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1102
+ auto child_policy_config =
1103
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second);
1104
+ if (!child_policy_config.ok()) {
1105
+ errors.emplace_back(
1106
+ absl::StrCat("error parsing childPolicy field: ",
1107
+ child_policy_config.status().message()));
1108
+ } else {
1109
+ child_policy = std::move(*child_policy_config);
1008
1110
  }
1009
1111
  }
1010
- if (!error_list.empty()) {
1011
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
1012
- "outlier_detection_experimental LB policy config", &error_list);
1013
- return nullptr;
1112
+ for (auto& error : error_list) {
1113
+ errors.emplace_back(grpc_error_std_string(error));
1114
+ GRPC_ERROR_UNREF(error);
1115
+ }
1116
+ if (!errors.empty()) {
1117
+ return absl::InvalidArgumentError(
1118
+ absl::StrCat("outlier_detection_experimental LB policy config: [",
1119
+ absl::StrJoin(errors, "; "), "]"));
1014
1120
  }
1015
1121
  return MakeRefCounted<OutlierDetectionLbConfig>(outlier_detection_config,
1016
1122
  std::move(child_policy));
@@ -30,7 +30,7 @@ namespace grpc_core {
30
30
  bool XdsOutlierDetectionEnabled();
31
31
 
32
32
  struct OutlierDetectionConfig {
33
- Duration interval = Duration::Infinity();
33
+ Duration interval = Duration::Seconds(10);
34
34
  Duration base_ejection_time = Duration::Milliseconds(30000);
35
35
  Duration max_ejection_time = Duration::Milliseconds(30000);
36
36
  uint32_t max_ejection_percent = 10;
@@ -39,16 +39,40 @@ struct OutlierDetectionConfig {
39
39
  uint32_t enforcement_percentage = 0;
40
40
  uint32_t minimum_hosts = 5;
41
41
  uint32_t request_volume = 100;
42
+
43
+ bool operator==(const SuccessRateEjection& other) const {
44
+ return stdev_factor == other.stdev_factor &&
45
+ enforcement_percentage == other.enforcement_percentage &&
46
+ minimum_hosts == other.minimum_hosts &&
47
+ request_volume == other.request_volume;
48
+ }
42
49
  };
43
50
  struct FailurePercentageEjection {
44
51
  uint32_t threshold = 85;
45
52
  uint32_t enforcement_percentage = 0;
46
53
  uint32_t minimum_hosts = 5;
47
54
  uint32_t request_volume = 50;
55
+
56
+ bool operator==(const FailurePercentageEjection& other) const {
57
+ return threshold == other.threshold &&
58
+ enforcement_percentage == other.enforcement_percentage &&
59
+ minimum_hosts == other.minimum_hosts &&
60
+ request_volume == other.request_volume;
61
+ }
48
62
  };
49
63
  absl::optional<SuccessRateEjection> success_rate_ejection;
50
64
  absl::optional<FailurePercentageEjection> failure_percentage_ejection;
65
+
66
+ bool operator==(const OutlierDetectionConfig& other) const {
67
+ return interval == other.interval &&
68
+ base_ejection_time == other.base_ejection_time &&
69
+ max_ejection_time == other.max_ejection_time &&
70
+ max_ejection_percent == other.max_ejection_percent &&
71
+ success_rate_ejection == other.success_rate_ejection &&
72
+ failure_percentage_ejection == other.failure_percentage_ejection;
73
+ }
51
74
  };
75
+
52
76
  } // namespace grpc_core
53
77
 
54
78
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_OUTLIER_DETECTION_OUTLIER_DETECTION_H
@@ -29,24 +29,24 @@
29
29
  #include "absl/status/status.h"
30
30
  #include "absl/status/statusor.h"
31
31
  #include "absl/strings/str_cat.h"
32
+ #include "absl/strings/string_view.h"
32
33
  #include "absl/types/optional.h"
33
34
 
34
35
  #include <grpc/impl/codegen/connectivity_state.h>
35
36
  #include <grpc/impl/codegen/grpc_types.h>
36
37
  #include <grpc/support/log.h>
37
38
 
38
- #include "src/core/ext/filters/client_channel/lb_policy.h"
39
39
  #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
40
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
41
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
42
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
43
40
  #include "src/core/lib/channel/channel_args.h"
44
41
  #include "src/core/lib/debug/trace.h"
45
42
  #include "src/core/lib/gprpp/debug_location.h"
46
43
  #include "src/core/lib/gprpp/orphanable.h"
47
44
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
48
- #include "src/core/lib/iomgr/error.h"
49
45
  #include "src/core/lib/json/json.h"
46
+ #include "src/core/lib/load_balancing/lb_policy.h"
47
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
48
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
49
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
50
50
  #include "src/core/lib/resolver/server_address.h"
51
51
  #include "src/core/lib/transport/connectivity_state.h"
52
52
 
@@ -60,13 +60,13 @@ namespace {
60
60
  // pick_first LB policy
61
61
  //
62
62
 
63
- constexpr char kPickFirst[] = "pick_first";
63
+ constexpr absl::string_view kPickFirst = "pick_first";
64
64
 
65
65
  class PickFirst : public LoadBalancingPolicy {
66
66
  public:
67
67
  explicit PickFirst(Args args);
68
68
 
69
- const char* name() const override { return kPickFirst; }
69
+ absl::string_view name() const override { return kPickFirst; }
70
70
 
71
71
  void UpdateLocked(UpdateArgs args) override;
72
72
  void ExitIdleLocked() override;
@@ -101,7 +101,7 @@ class PickFirst : public LoadBalancingPolicy {
101
101
  PickFirstSubchannelData> {
102
102
  public:
103
103
  PickFirstSubchannelList(PickFirst* policy, ServerAddressList addresses,
104
- const grpc_channel_args& args)
104
+ const ChannelArgs& args)
105
105
  : SubchannelList(policy,
106
106
  (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)
107
107
  ? "PickFirstSubchannelList"
@@ -228,7 +228,8 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
228
228
  latest_pending_subchannel_list_.get());
229
229
  }
230
230
  latest_pending_subchannel_list_ = MakeOrphanable<PickFirstSubchannelList>(
231
- this, std::move(addresses), *latest_update_args_.args);
231
+ this, std::move(addresses), latest_update_args_.args);
232
+ latest_pending_subchannel_list_->StartWatchingLocked();
232
233
  // Empty update or no valid subchannels. Put the channel in
233
234
  // TRANSIENT_FAILURE.
234
235
  if (latest_pending_subchannel_list_->num_subchannels() == 0) {
@@ -273,12 +274,7 @@ void PickFirst::UpdateLocked(UpdateArgs args) {
273
274
  }
274
275
  }
275
276
  // Add GRPC_ARG_INHIBIT_HEALTH_CHECKING channel arg.
276
- grpc_arg new_arg = grpc_channel_arg_integer_create(
277
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1);
278
- const grpc_channel_args* new_args =
279
- grpc_channel_args_copy_and_add(args.args, &new_arg, 1);
280
- std::swap(new_args, args.args);
281
- grpc_channel_args_destroy(new_args);
277
+ args.args = args.args.Set(GRPC_ARG_INHIBIT_HEALTH_CHECKING, 1);
282
278
  // If the update contains a resolver error and we have a previous update
283
279
  // that was not a resolver error, keep using the previous addresses.
284
280
  if (!args.addresses.ok() && latest_update_args_.config != nullptr) {
@@ -507,7 +503,7 @@ void PickFirst::PickFirstSubchannelData::ProcessUnselectedReadyLocked() {
507
503
 
508
504
  class PickFirstConfig : public LoadBalancingPolicy::Config {
509
505
  public:
510
- const char* name() const override { return kPickFirst; }
506
+ absl::string_view name() const override { return kPickFirst; }
511
507
  };
512
508
 
513
509
  //
@@ -521,10 +517,10 @@ class PickFirstFactory : public LoadBalancingPolicyFactory {
521
517
  return MakeOrphanable<PickFirst>(std::move(args));
522
518
  }
523
519
 
524
- const char* name() const override { return kPickFirst; }
520
+ absl::string_view name() const override { return kPickFirst; }
525
521
 
526
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
527
- const Json& /*json*/, grpc_error_handle* /*error*/) const override {
522
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
523
+ ParseLoadBalancingConfig(const Json& /*json*/) const override {
528
524
  return MakeRefCounted<PickFirstConfig>();
529
525
  }
530
526
  };