grpc 1.35.0.pre1 → 1.37.1

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 (507) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +121 -89
  3. data/include/grpc/grpc.h +15 -1
  4. data/include/grpc/grpc_security.h +16 -11
  5. data/include/grpc/impl/codegen/port_platform.h +2 -0
  6. data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
  7. data/src/core/ext/filters/client_channel/client_channel.h +0 -2
  8. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  9. data/src/core/ext/filters/client_channel/config_selector.h +9 -1
  10. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  12. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
  14. data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  21. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -25
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
  27. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  28. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  29. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  30. data/src/core/ext/filters/client_channel/resolver.h +1 -12
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
  35. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
  36. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
  37. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  38. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  39. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +307 -155
  40. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  41. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  42. data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
  43. data/src/core/ext/filters/client_channel/subchannel.h +63 -95
  44. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  45. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  46. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  49. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  50. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  51. data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
  52. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  54. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
  55. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  56. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -2
  57. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  59. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  60. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
  61. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  62. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
  63. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  64. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  65. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  66. data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
  67. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  68. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  69. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  70. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  71. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  72. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  73. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  74. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  75. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  78. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  84. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  88. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  89. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  90. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  91. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  92. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  93. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  94. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  95. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  96. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  97. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  98. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  99. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  100. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
  101. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  102. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  103. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  104. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  105. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  106. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  107. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  108. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  109. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  118. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  119. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  120. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  121. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  122. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  123. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  124. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  125. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  126. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  127. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  128. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  129. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  130. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  131. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  132. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  133. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  134. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  135. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  136. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  137. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  138. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  139. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  140. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  141. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  142. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  143. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  144. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  145. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  146. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  147. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  148. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  149. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  150. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  151. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  152. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  153. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  154. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  155. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  156. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  157. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  158. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  159. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  160. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  161. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  162. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  163. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  164. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  165. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  166. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  167. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  168. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  169. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  170. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  171. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  172. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  173. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  174. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  175. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  176. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  177. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  178. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  179. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  180. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  181. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  182. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  183. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  184. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  185. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  186. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  187. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  188. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  189. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  190. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  191. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  192. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  193. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  194. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  195. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  196. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  197. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  198. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  199. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  200. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  201. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
  202. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
  203. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
  204. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
  205. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
  206. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
  207. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
  208. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  209. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  210. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  211. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  212. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  213. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  214. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  215. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  216. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  217. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  218. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  219. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  220. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  221. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  222. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  223. data/src/core/ext/xds/xds_api.cc +2149 -666
  224. data/src/core/ext/xds/xds_api.h +321 -119
  225. data/src/core/ext/xds/xds_bootstrap.cc +80 -45
  226. data/src/core/ext/xds/xds_bootstrap.h +17 -5
  227. data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
  228. data/src/core/ext/xds/xds_certificate_provider.h +83 -44
  229. data/src/core/ext/xds/xds_client.cc +181 -34
  230. data/src/core/ext/xds/xds_client.h +29 -0
  231. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  232. data/src/core/ext/xds/xds_client_stats.h +2 -2
  233. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  234. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  235. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  236. data/src/core/ext/xds/xds_http_filters.h +130 -0
  237. data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
  238. data/src/core/lib/channel/channel_stack.cc +12 -0
  239. data/src/core/lib/channel/channel_stack.h +7 -0
  240. data/src/core/lib/channel/channelz.cc +92 -4
  241. data/src/core/lib/channel/channelz.h +30 -1
  242. data/src/core/lib/channel/channelz_registry.cc +14 -0
  243. data/src/core/lib/channel/handshaker.cc +2 -44
  244. data/src/core/lib/channel/handshaker.h +1 -18
  245. data/src/core/lib/channel/status_util.cc +12 -2
  246. data/src/core/lib/channel/status_util.h +5 -0
  247. data/src/core/lib/gpr/log.cc +6 -1
  248. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  249. data/src/core/lib/gpr/sync_windows.cc +2 -2
  250. data/src/core/lib/gprpp/atomic.h +3 -3
  251. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  252. data/src/core/lib/gprpp/mpscq.cc +2 -2
  253. data/src/core/lib/gprpp/ref_counted.h +1 -1
  254. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  255. data/src/core/lib/gprpp/sync.h +129 -40
  256. data/src/core/lib/gprpp/thd.h +1 -1
  257. data/src/core/lib/gprpp/time_util.cc +77 -0
  258. data/src/core/lib/gprpp/time_util.h +42 -0
  259. data/src/core/lib/http/httpcli_security_connector.cc +2 -2
  260. data/src/core/lib/iomgr/buffer_list.h +1 -1
  261. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  262. data/src/core/lib/iomgr/error.h +1 -1
  263. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  264. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
  265. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
  266. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  267. data/src/core/lib/iomgr/exec_ctx.cc +6 -2
  268. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  269. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  270. data/src/core/lib/iomgr/resource_quota.cc +1 -1
  271. data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
  272. data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
  273. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  274. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +5 -8
  276. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  277. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  278. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  279. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  280. data/src/core/lib/matchers/matchers.cc +339 -0
  281. data/src/core/lib/matchers/matchers.h +160 -0
  282. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  284. data/src/core/lib/security/credentials/credentials.h +2 -1
  285. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
  286. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
  287. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
  288. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
  289. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
  290. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
  291. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  292. data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
  293. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
  294. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  295. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  296. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  297. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  299. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  300. data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
  301. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  302. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  303. data/src/core/lib/security/security_connector/ssl_utils.cc +9 -4
  304. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
  305. data/src/core/lib/security/transport/security_handshaker.cc +33 -5
  306. data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
  307. data/src/core/lib/slice/slice_intern.cc +5 -6
  308. data/src/core/lib/surface/channel.h +3 -3
  309. data/src/core/lib/surface/completion_queue.cc +1 -1
  310. data/src/core/lib/surface/init.cc +13 -15
  311. data/src/core/lib/surface/lame_client.cc +38 -19
  312. data/src/core/lib/surface/lame_client.h +4 -3
  313. data/src/core/lib/surface/server.cc +43 -36
  314. data/src/core/lib/surface/server.h +76 -14
  315. data/src/core/lib/surface/version.cc +2 -2
  316. data/src/core/lib/transport/metadata.cc +6 -2
  317. data/src/core/lib/transport/metadata_batch.cc +27 -0
  318. data/src/core/lib/transport/metadata_batch.h +14 -0
  319. data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
  320. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
  321. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
  322. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  323. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  324. data/src/core/tsi/fake_transport_security.cc +11 -2
  325. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  326. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  327. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  328. data/src/core/tsi/ssl_transport_security.cc +0 -3
  329. data/src/core/tsi/ssl_transport_security.h +0 -3
  330. data/src/ruby/ext/grpc/extconf.rb +9 -1
  331. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  332. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  333. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  334. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  335. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  336. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  337. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  338. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  339. data/src/ruby/ext/grpc/rb_server.c +13 -1
  340. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  341. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  342. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  343. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  344. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  345. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  346. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  349. data/src/ruby/spec/call_spec.rb +1 -1
  350. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  351. data/src/ruby/spec/channel_spec.rb +17 -6
  352. data/src/ruby/spec/client_auth_spec.rb +27 -1
  353. data/src/ruby/spec/errors_spec.rb +1 -1
  354. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  355. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  356. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  357. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  358. data/src/ruby/spec/server_spec.rb +22 -0
  359. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  360. data/third_party/boringssl-with-bazel/err_data.c +715 -713
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  372. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  373. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  374. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  375. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  377. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  378. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  379. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  381. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  382. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  383. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  384. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  385. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  387. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  388. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  389. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  395. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  396. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  406. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  407. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  408. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  410. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  411. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  424. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  425. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  426. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  427. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  436. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  437. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  438. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  439. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
  440. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  442. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  443. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  444. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  445. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  446. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  447. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  448. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  449. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
  451. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
  452. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  453. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
  454. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  455. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  456. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  457. data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
  458. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  459. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  460. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
  461. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  462. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  463. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  464. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
  465. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  466. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  467. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
  468. data/third_party/xxhash/xxhash.h +5443 -0
  469. metadata +140 -84
  470. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  471. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  472. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  473. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  474. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  475. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  476. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  477. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  478. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  479. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  480. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  481. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  482. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  483. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  484. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  485. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  486. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  487. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  488. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  489. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  490. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  491. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  492. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  493. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  494. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  495. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  496. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  497. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  498. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  499. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  500. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  501. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  502. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  503. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  504. data/third_party/upb/upb/json_decode.c +0 -1443
  505. data/third_party/upb/upb/json_decode.h +0 -23
  506. data/third_party/upb/upb/json_encode.c +0 -713
  507. data/third_party/upb/upb/json_encode.h +0 -36
@@ -24,73 +24,33 @@
24
24
 
25
25
  namespace grpc_core {
26
26
 
27
- LocalSubchannelPool::LocalSubchannelPool() {
28
- subchannel_map_ = grpc_avl_create(&subchannel_avl_vtable_);
27
+ RefCountedPtr<Subchannel> LocalSubchannelPool::RegisterSubchannel(
28
+ const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) {
29
+ auto it = subchannel_map_.find(key);
30
+ // Because this pool is only accessed under the client channel's work
31
+ // serializer, and because FindSubchannel is checked before invoking
32
+ // RegisterSubchannel, no such subchannel should exist in the map.
33
+ GPR_ASSERT(it == subchannel_map_.end());
34
+ subchannel_map_[key] = constructed.get();
35
+ return constructed;
36
+ }
37
+
38
+ void LocalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
39
+ Subchannel* subchannel) {
40
+ auto it = subchannel_map_.find(key);
41
+ // Because this subchannel pool is accessed only under the client
42
+ // channel's work serializer, any subchannel created by RegisterSubchannel
43
+ // will be deleted from the map in UnregisterSubchannel.
44
+ GPR_ASSERT(it != subchannel_map_.end());
45
+ GPR_ASSERT(it->second == subchannel);
46
+ subchannel_map_.erase(it);
47
+ }
48
+
49
+ RefCountedPtr<Subchannel> LocalSubchannelPool::FindSubchannel(
50
+ const SubchannelKey& key) {
51
+ auto it = subchannel_map_.find(key);
52
+ if (it == subchannel_map_.end()) return nullptr;
53
+ return it->second->Ref();
29
54
  }
30
55
 
31
- LocalSubchannelPool::~LocalSubchannelPool() {
32
- grpc_avl_unref(subchannel_map_, nullptr);
33
- }
34
-
35
- Subchannel* LocalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
36
- Subchannel* constructed) {
37
- // Check to see if a subchannel already exists.
38
- Subchannel* c =
39
- static_cast<Subchannel*>(grpc_avl_get(subchannel_map_, key, nullptr));
40
- if (c != nullptr) {
41
- // The subchannel already exists. Reuse it.
42
- c = GRPC_SUBCHANNEL_REF(c, "subchannel_register+reuse");
43
- GRPC_SUBCHANNEL_UNREF(constructed, "subchannel_register+found_existing");
44
- } else {
45
- // There hasn't been such subchannel. Add one.
46
- subchannel_map_ = grpc_avl_add(subchannel_map_, new SubchannelKey(*key),
47
- constructed, nullptr);
48
- c = constructed;
49
- }
50
- return c;
51
- }
52
-
53
- void LocalSubchannelPool::UnregisterSubchannel(SubchannelKey* key) {
54
- subchannel_map_ = grpc_avl_remove(subchannel_map_, key, nullptr);
55
- }
56
-
57
- Subchannel* LocalSubchannelPool::FindSubchannel(SubchannelKey* key) {
58
- Subchannel* c =
59
- static_cast<Subchannel*>(grpc_avl_get(subchannel_map_, key, nullptr));
60
- return c == nullptr ? c : GRPC_SUBCHANNEL_REF(c, "found_from_pool");
61
- }
62
-
63
- namespace {
64
-
65
- void sck_avl_destroy(void* p, void* /*user_data*/) {
66
- SubchannelKey* key = static_cast<SubchannelKey*>(p);
67
- delete key;
68
- }
69
-
70
- void* sck_avl_copy(void* p, void* /*unused*/) {
71
- const SubchannelKey* key = static_cast<const SubchannelKey*>(p);
72
- auto new_key = new SubchannelKey(*key);
73
- return static_cast<void*>(new_key);
74
- }
75
-
76
- long sck_avl_compare(void* a, void* b, void* /*unused*/) {
77
- const SubchannelKey* key_a = static_cast<const SubchannelKey*>(a);
78
- const SubchannelKey* key_b = static_cast<const SubchannelKey*>(b);
79
- return key_a->Cmp(*key_b);
80
- }
81
-
82
- void scv_avl_destroy(void* /*p*/, void* /*user_data*/) {}
83
-
84
- void* scv_avl_copy(void* p, void* /*unused*/) { return p; }
85
-
86
- } // namespace
87
-
88
- const grpc_avl_vtable LocalSubchannelPool::subchannel_avl_vtable_ = {
89
- sck_avl_destroy, // destroy_key
90
- sck_avl_copy, // copy_key
91
- sck_avl_compare, // compare_keys
92
- scv_avl_destroy, // destroy_value
93
- scv_avl_copy // copy_value
94
- };
95
-
96
56
  } // namespace grpc_core
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <map>
25
+
24
26
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
25
27
 
26
28
  namespace grpc_core {
@@ -34,22 +36,21 @@ namespace grpc_core {
34
36
  // Thread-unsafe.
35
37
  class LocalSubchannelPool final : public SubchannelPoolInterface {
36
38
  public:
37
- LocalSubchannelPool();
38
- ~LocalSubchannelPool() override;
39
+ LocalSubchannelPool() {}
40
+ ~LocalSubchannelPool() override {}
39
41
 
40
42
  // Implements interface methods.
41
43
  // Thread-unsafe. Intended to be invoked within the client_channel work
42
44
  // serializer.
43
- Subchannel* RegisterSubchannel(SubchannelKey* key,
44
- Subchannel* constructed) override;
45
- void UnregisterSubchannel(SubchannelKey* key) override;
46
- Subchannel* FindSubchannel(SubchannelKey* key) override;
45
+ RefCountedPtr<Subchannel> RegisterSubchannel(
46
+ const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) override;
47
+ void UnregisterSubchannel(const SubchannelKey& key,
48
+ Subchannel* subchannel) override;
49
+ RefCountedPtr<Subchannel> FindSubchannel(const SubchannelKey& key) override;
47
50
 
48
51
  private:
49
- // The vtable for subchannel operations in an AVL tree.
50
- static const grpc_avl_vtable subchannel_avl_vtable_;
51
52
  // A map from subchannel key to subchannel.
52
- grpc_avl subchannel_map_;
53
+ std::map<SubchannelKey, Subchannel*> subchannel_map_;
53
54
  };
54
55
 
55
56
  } // namespace grpc_core
@@ -29,13 +29,10 @@ namespace grpc_core {
29
29
  // Resolver
30
30
  //
31
31
 
32
- Resolver::Resolver(std::shared_ptr<WorkSerializer> work_serializer,
33
- std::unique_ptr<ResultHandler> result_handler)
32
+ Resolver::Resolver()
34
33
  : InternallyRefCounted(GRPC_TRACE_FLAG_ENABLED(grpc_trace_resolver_refcount)
35
34
  ? "Resolver"
36
- : nullptr),
37
- work_serializer_(std::move(work_serializer)),
38
- result_handler_(std::move(result_handler)) {}
35
+ : nullptr) {}
39
36
 
40
37
  //
41
38
  // Resolver::Result
@@ -63,6 +60,9 @@ Resolver::Result::Result(Result&& other) noexcept {
63
60
  }
64
61
 
65
62
  Resolver::Result& Resolver::Result::operator=(const Result& other) {
63
+ if (&other == this) {
64
+ return *this;
65
+ }
66
66
  addresses = other.addresses;
67
67
  service_config = other.service_config;
68
68
  GRPC_ERROR_UNREF(service_config_error);
@@ -125,21 +125,10 @@ class Resolver : public InternallyRefCounted<Resolver> {
125
125
  }
126
126
 
127
127
  protected:
128
- Resolver(std::shared_ptr<WorkSerializer> work_serializer,
129
- std::unique_ptr<ResultHandler> result_handler);
128
+ Resolver();
130
129
 
131
130
  /// Shuts down the resolver.
132
131
  virtual void ShutdownLocked() = 0;
133
-
134
- std::shared_ptr<WorkSerializer> work_serializer() const {
135
- return work_serializer_;
136
- }
137
-
138
- ResultHandler* result_handler() const { return result_handler_.get(); }
139
-
140
- private:
141
- std::shared_ptr<WorkSerializer> work_serializer_;
142
- std::unique_ptr<ResultHandler> result_handler_;
143
132
  };
144
133
 
145
134
  } // namespace grpc_core
@@ -91,10 +91,20 @@ class AresDnsResolver : public Resolver {
91
91
  std::string name_to_resolve_;
92
92
  /// channel args
93
93
  grpc_channel_args* channel_args_;
94
- /// whether to request the service config
95
- bool request_service_config_;
94
+ std::shared_ptr<WorkSerializer> work_serializer_;
95
+ std::unique_ptr<ResultHandler> result_handler_;
96
96
  /// pollset_set to drive the name resolution process
97
97
  grpc_pollset_set* interested_parties_;
98
+
99
+ /// whether to request the service config
100
+ bool request_service_config_;
101
+ // whether or not to enable SRV DNS queries
102
+ bool enable_srv_queries_;
103
+ // timeout in milliseconds for active DNS queries
104
+ int query_timeout_ms_;
105
+ /// min interval between DNS requests
106
+ grpc_millis min_time_between_resolutions_;
107
+
98
108
  /// closures used by the work_serializer
99
109
  grpc_closure on_next_resolution_;
100
110
  grpc_closure on_resolved_;
@@ -105,8 +115,6 @@ class AresDnsResolver : public Resolver {
105
115
  /// next resolution timer
106
116
  bool have_next_resolution_timer_ = false;
107
117
  grpc_timer next_resolution_timer_;
108
- /// min interval between DNS requests
109
- grpc_millis min_time_between_resolutions_;
110
118
  /// timestamp of last DNS request
111
119
  grpc_millis last_resolution_timestamp_ = -1;
112
120
  /// retry backoff state
@@ -119,14 +127,25 @@ class AresDnsResolver : public Resolver {
119
127
  char* service_config_json_ = nullptr;
120
128
  // has shutdown been initiated
121
129
  bool shutdown_initiated_ = false;
122
- // timeout in milliseconds for active DNS queries
123
- int query_timeout_ms_;
124
- // whether or not to enable SRV DNS queries
125
- bool enable_srv_queries_;
126
130
  };
127
131
 
128
132
  AresDnsResolver::AresDnsResolver(ResolverArgs args)
129
- : Resolver(std::move(args.work_serializer), std::move(args.result_handler)),
133
+ : dns_server_(args.uri.authority()),
134
+ name_to_resolve_(absl::StripPrefix(args.uri.path(), "/")),
135
+ channel_args_(grpc_channel_args_copy(args.args)),
136
+ work_serializer_(std::move(args.work_serializer)),
137
+ result_handler_(std::move(args.result_handler)),
138
+ interested_parties_(args.pollset_set),
139
+ request_service_config_(!grpc_channel_args_find_bool(
140
+ channel_args_, GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION, true)),
141
+ enable_srv_queries_(grpc_channel_args_find_bool(
142
+ channel_args_, GRPC_ARG_DNS_ENABLE_SRV_QUERIES, false)),
143
+ query_timeout_ms_(grpc_channel_args_find_integer(
144
+ channel_args_, GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS,
145
+ {GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, 0, INT_MAX})),
146
+ min_time_between_resolutions_(grpc_channel_args_find_integer(
147
+ channel_args_, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
148
+ {1000 * 30, 0, INT_MAX})),
130
149
  backoff_(
131
150
  BackOff::Options()
132
151
  .set_initial_backoff(GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS *
@@ -134,42 +153,14 @@ AresDnsResolver::AresDnsResolver(ResolverArgs args)
134
153
  .set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
135
154
  .set_jitter(GRPC_DNS_RECONNECT_JITTER)
136
155
  .set_max_backoff(GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
137
- // Closure Initialization
156
+ // Closure initialization.
138
157
  GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this,
139
158
  grpc_schedule_on_exec_ctx);
140
159
  GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
141
- // Get name to resolve from URI path.
142
- name_to_resolve_ = std::string(absl::StripPrefix(args.uri.path(), "/"));
143
- // Get DNS server from URI authority.
144
- dns_server_ = args.uri.authority();
145
- channel_args_ = grpc_channel_args_copy(args.args);
146
- // Disable service config option
147
- const grpc_arg* arg = grpc_channel_args_find(
148
- channel_args_, GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION);
149
- request_service_config_ = !grpc_channel_arg_get_bool(arg, true);
150
- // Min time b/t resolutions option
151
- arg = grpc_channel_args_find(channel_args_,
152
- GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS);
153
- min_time_between_resolutions_ =
154
- grpc_channel_arg_get_integer(arg, {1000 * 30, 0, INT_MAX});
155
- // Enable SRV queries option
156
- arg = grpc_channel_args_find(channel_args_, GRPC_ARG_DNS_ENABLE_SRV_QUERIES);
157
- enable_srv_queries_ = grpc_channel_arg_get_bool(arg, false);
158
- interested_parties_ = grpc_pollset_set_create();
159
- if (args.pollset_set != nullptr) {
160
- grpc_pollset_set_add_pollset_set(interested_parties_, args.pollset_set);
161
- }
162
-
163
- const grpc_arg* query_timeout_ms_arg =
164
- grpc_channel_args_find(channel_args_, GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS);
165
- query_timeout_ms_ = grpc_channel_arg_get_integer(
166
- query_timeout_ms_arg,
167
- {GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, 0, INT_MAX});
168
160
  }
169
161
 
170
162
  AresDnsResolver::~AresDnsResolver() {
171
163
  GRPC_CARES_TRACE_LOG("resolver:%p destroying AresDnsResolver", this);
172
- grpc_pollset_set_destroy(interested_parties_);
173
164
  grpc_channel_args_destroy(channel_args_);
174
165
  }
175
166
 
@@ -205,8 +196,8 @@ void AresDnsResolver::ShutdownLocked() {
205
196
  void AresDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
206
197
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
207
198
  GRPC_ERROR_REF(error); // ref owned by lambda
208
- r->work_serializer()->Run([r, error]() { r->OnNextResolutionLocked(error); },
209
- DEBUG_LOCATION);
199
+ r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
200
+ DEBUG_LOCATION);
210
201
  }
211
202
 
212
203
  void AresDnsResolver::OnNextResolutionLocked(grpc_error* error) {
@@ -317,8 +308,8 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
317
308
  void AresDnsResolver::OnResolved(void* arg, grpc_error* error) {
318
309
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
319
310
  GRPC_ERROR_REF(error); // ref owned by lambda
320
- r->work_serializer()->Run([r, error]() { r->OnResolvedLocked(error); },
321
- DEBUG_LOCATION);
311
+ r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
312
+ DEBUG_LOCATION);
322
313
  }
323
314
 
324
315
  void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
@@ -355,7 +346,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
355
346
  }
356
347
  result.args = grpc_channel_args_copy_and_add(channel_args_, new_args.data(),
357
348
  new_args.size());
358
- result_handler()->ReturnResult(std::move(result));
349
+ result_handler_->ReturnResult(std::move(result));
359
350
  addresses_.reset();
360
351
  balancer_addresses_.reset();
361
352
  // Reset backoff state so that we start from the beginning when the
@@ -366,7 +357,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
366
357
  grpc_error_string(error));
367
358
  std::string error_message =
368
359
  absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
369
- result_handler()->ReturnError(grpc_error_set_int(
360
+ result_handler_->ReturnError(grpc_error_set_int(
370
361
  GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(error_message.c_str(),
371
362
  &error, 1),
372
363
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
@@ -436,7 +427,7 @@ void AresDnsResolver::StartResolvingLocked() {
436
427
  interested_parties_, &on_resolved_, &addresses_,
437
428
  enable_srv_queries_ ? &balancer_addresses_ : nullptr,
438
429
  request_service_config_ ? &service_config_json_ : nullptr,
439
- query_timeout_ms_, work_serializer());
430
+ query_timeout_ms_, work_serializer_);
440
431
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
441
432
  GRPC_CARES_TRACE_LOG("resolver:%p Started resolving. pending_request_:%p",
442
433
  this, pending_request_);
@@ -54,8 +54,8 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
54
54
  /* c-ares library will close the fd inside grpc_fd. This fd may be picked up
55
55
  immediately by another thread, and should not be closed by the following
56
56
  grpc_fd_orphan. */
57
- int dummy_release_fd;
58
- grpc_fd_orphan(fd_, nullptr, &dummy_release_fd, "c-ares query finished");
57
+ int phony_release_fd;
58
+ grpc_fd_orphan(fd_, nullptr, &phony_release_fd, "c-ares query finished");
59
59
  }
60
60
 
61
61
  void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
@@ -251,7 +251,7 @@ class GrpcPolledFdWindows {
251
251
  }
252
252
  }
253
253
 
254
- bool IsFdStillReadableLocked() { return GRPC_SLICE_LENGTH(read_buf_) > 0; }
254
+ bool IsFdStillReadableLocked() { return read_buf_has_data_; }
255
255
 
256
256
  void ShutdownLocked(grpc_error* error) {
257
257
  grpc_winsocket_shutdown(winsocket_);
@@ -362,6 +362,8 @@ class GrpcPolledFdWindows {
362
362
  DWORD bytes_sent = 0;
363
363
  int wsa_error_code = 0;
364
364
  if (SendWriteBuf(&bytes_sent, nullptr, &wsa_error_code) != 0) {
365
+ grpc_slice_unref_internal(write_buf_);
366
+ write_buf_ = grpc_empty_slice();
365
367
  wsa_error_ctx->SetWSAError(wsa_error_code);
366
368
  char* msg = gpr_format_message(wsa_error_code);
367
369
  GRPC_CARES_TRACE_LOG(
@@ -114,8 +114,6 @@ struct grpc_ares_ev_driver {
114
114
  std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
115
115
  /** a list of grpc_fd that this event driver is currently using. */
116
116
  fd_node* fds;
117
- /** is this event driver currently working? */
118
- bool working;
119
117
  /** is this event driver being shut down */
120
118
  bool shutting_down;
121
119
  /** request object that's using this ev driver */
@@ -219,9 +217,9 @@ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
219
217
 
220
218
  void grpc_ares_ev_driver_on_queries_complete_locked(
221
219
  grpc_ares_ev_driver* ev_driver) {
222
- // We mark the event driver as being shut down. If the event driver
223
- // is working, grpc_ares_notify_on_event_locked will shut down the
224
- // fds; if it's not working, there are no fds to shut down.
220
+ // We mark the event driver as being shut down.
221
+ // grpc_ares_notify_on_event_locked will shut down any remaining
222
+ // fds.
225
223
  ev_driver->shutting_down = true;
226
224
  grpc_timer_cancel(&ev_driver->query_timeout);
227
225
  grpc_timer_cancel(&ev_driver->ares_backup_poll_alarm);
@@ -240,14 +238,14 @@ void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver) {
240
238
  // Search fd in the fd_node list head. This is an O(n) search, the max possible
241
239
  // value of n is ARES_GETSOCK_MAXNUM (16). n is typically 1 - 2 in our tests.
242
240
  static fd_node* pop_fd_node_locked(fd_node** head, ares_socket_t as) {
243
- fd_node dummy_head;
244
- dummy_head.next = *head;
245
- fd_node* node = &dummy_head;
241
+ fd_node phony_head;
242
+ phony_head.next = *head;
243
+ fd_node* node = &phony_head;
246
244
  while (node->next != nullptr) {
247
245
  if (node->next->grpc_polled_fd->GetWrappedAresSocketLocked() == as) {
248
246
  fd_node* ret = node->next;
249
247
  node->next = node->next->next;
250
- *head = dummy_head.next;
248
+ *head = phony_head.next;
251
249
  return ret;
252
250
  }
253
251
  node = node->next;
@@ -483,43 +481,34 @@ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
483
481
  }
484
482
  }
485
483
  ev_driver->fds = new_list;
486
- // If the ev driver has no working fd, all the tasks are done.
487
- if (new_list == nullptr) {
488
- ev_driver->working = false;
489
- GRPC_CARES_TRACE_LOG("request:%p ev driver stop working",
490
- ev_driver->request);
491
- }
492
484
  }
493
485
 
494
486
  void grpc_ares_ev_driver_start_locked(grpc_ares_ev_driver* ev_driver) {
495
- if (!ev_driver->working) {
496
- ev_driver->working = true;
497
- grpc_ares_notify_on_event_locked(ev_driver);
498
- // Initialize overall DNS resolution timeout alarm
499
- grpc_millis timeout =
500
- ev_driver->query_timeout_ms == 0
501
- ? GRPC_MILLIS_INF_FUTURE
502
- : ev_driver->query_timeout_ms + grpc_core::ExecCtx::Get()->Now();
503
- GRPC_CARES_TRACE_LOG(
504
- "request:%p ev_driver=%p grpc_ares_ev_driver_start_locked. timeout in "
505
- "%" PRId64 " ms",
506
- ev_driver->request, ev_driver, timeout);
507
- grpc_ares_ev_driver_ref(ev_driver);
508
- GRPC_CLOSURE_INIT(&ev_driver->on_timeout_locked, on_timeout, ev_driver,
509
- grpc_schedule_on_exec_ctx);
510
- grpc_timer_init(&ev_driver->query_timeout, timeout,
511
- &ev_driver->on_timeout_locked);
512
- // Initialize the backup poll alarm
513
- grpc_millis next_ares_backup_poll_alarm =
514
- calculate_next_ares_backup_poll_alarm_ms(ev_driver);
515
- grpc_ares_ev_driver_ref(ev_driver);
516
- GRPC_CLOSURE_INIT(&ev_driver->on_ares_backup_poll_alarm_locked,
517
- on_ares_backup_poll_alarm, ev_driver,
518
- grpc_schedule_on_exec_ctx);
519
- grpc_timer_init(&ev_driver->ares_backup_poll_alarm,
520
- next_ares_backup_poll_alarm,
521
- &ev_driver->on_ares_backup_poll_alarm_locked);
522
- }
487
+ grpc_ares_notify_on_event_locked(ev_driver);
488
+ // Initialize overall DNS resolution timeout alarm
489
+ grpc_millis timeout =
490
+ ev_driver->query_timeout_ms == 0
491
+ ? GRPC_MILLIS_INF_FUTURE
492
+ : ev_driver->query_timeout_ms + grpc_core::ExecCtx::Get()->Now();
493
+ GRPC_CARES_TRACE_LOG(
494
+ "request:%p ev_driver=%p grpc_ares_ev_driver_start_locked. timeout in "
495
+ "%" PRId64 " ms",
496
+ ev_driver->request, ev_driver, timeout);
497
+ grpc_ares_ev_driver_ref(ev_driver);
498
+ GRPC_CLOSURE_INIT(&ev_driver->on_timeout_locked, on_timeout, ev_driver,
499
+ grpc_schedule_on_exec_ctx);
500
+ grpc_timer_init(&ev_driver->query_timeout, timeout,
501
+ &ev_driver->on_timeout_locked);
502
+ // Initialize the backup poll alarm
503
+ grpc_millis next_ares_backup_poll_alarm =
504
+ calculate_next_ares_backup_poll_alarm_ms(ev_driver);
505
+ grpc_ares_ev_driver_ref(ev_driver);
506
+ GRPC_CLOSURE_INIT(&ev_driver->on_ares_backup_poll_alarm_locked,
507
+ on_ares_backup_poll_alarm, ev_driver,
508
+ grpc_schedule_on_exec_ctx);
509
+ grpc_timer_init(&ev_driver->ares_backup_poll_alarm,
510
+ next_ares_backup_poll_alarm,
511
+ &ev_driver->on_ares_backup_poll_alarm_locked);
523
512
  }
524
513
 
525
514
  static void noop_inject_channel_config(ares_channel /*channel*/) {}
@@ -551,7 +540,6 @@ grpc_error* grpc_ares_ev_driver_create_locked(
551
540
  gpr_ref_init(&(*ev_driver)->refs, 1);
552
541
  (*ev_driver)->pollset_set = pollset_set;
553
542
  (*ev_driver)->fds = nullptr;
554
- (*ev_driver)->working = false;
555
543
  (*ev_driver)->shutting_down = false;
556
544
  (*ev_driver)->request = request;
557
545
  (*ev_driver)->polled_fd_factory =
@@ -757,7 +745,7 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
757
745
  r, srv_it->host, htons(srv_it->port), true /* is_balancer */, "A");
758
746
  ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET,
759
747
  on_hostbyname_done_locked, hr);
760
- grpc_ares_ev_driver_start_locked(r->ev_driver);
748
+ grpc_ares_notify_on_event_locked(r->ev_driver);
761
749
  }
762
750
  }
763
751
  if (reply != nullptr) {
@@ -983,11 +971,7 @@ static bool target_matches_localhost_inner(const char* name, std::string* host,
983
971
  gpr_log(GPR_ERROR, "Unable to split host and port for name: %s", name);
984
972
  return false;
985
973
  }
986
- if (gpr_stricmp(host->c_str(), "localhost") == 0) {
987
- return true;
988
- } else {
989
- return false;
990
- }
974
+ return gpr_stricmp(host->c_str(), "localhost") == 0;
991
975
  }
992
976
 
993
977
  static bool target_matches_localhost(const char* name) {