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
@@ -31,6 +31,12 @@
31
31
 
32
32
  namespace grpc_core {
33
33
 
34
+ //
35
+ // ServerAddressWeightAttribute
36
+ //
37
+ const char* ServerAddressWeightAttribute::kServerAddressWeightAttributeKey =
38
+ "server_address_weight";
39
+
34
40
  //
35
41
  // ServerAddress
36
42
  //
@@ -55,6 +61,9 @@ ServerAddress::ServerAddress(const ServerAddress& other)
55
61
  }
56
62
  }
57
63
  ServerAddress& ServerAddress::operator=(const ServerAddress& other) {
64
+ if (&other == this) {
65
+ return *this;
66
+ }
58
67
  address_ = other.address_;
59
68
  grpc_channel_args_destroy(args_);
60
69
  args_ = grpc_channel_args_copy(other.args_);
@@ -25,8 +25,10 @@
25
25
  #include <memory>
26
26
 
27
27
  #include "absl/container/inlined_vector.h"
28
+ #include "absl/strings/str_format.h"
28
29
 
29
30
  #include "src/core/lib/channel/channel_args.h"
31
+ #include "src/core/lib/gpr/useful.h"
30
32
  #include "src/core/lib/iomgr/resolve_address.h"
31
33
 
32
34
  namespace grpc_core {
@@ -108,6 +110,35 @@ class ServerAddress {
108
110
 
109
111
  typedef absl::InlinedVector<ServerAddress, 1> ServerAddressList;
110
112
 
113
+ //
114
+ // ServerAddressWeightAttribute
115
+ //
116
+ class ServerAddressWeightAttribute : public ServerAddress::AttributeInterface {
117
+ public:
118
+ static const char* kServerAddressWeightAttributeKey;
119
+
120
+ explicit ServerAddressWeightAttribute(uint32_t weight) : weight_(weight) {}
121
+
122
+ uint32_t weight() const { return weight_; }
123
+
124
+ std::unique_ptr<AttributeInterface> Copy() const override {
125
+ return absl::make_unique<ServerAddressWeightAttribute>(weight_);
126
+ }
127
+
128
+ int Cmp(const AttributeInterface* other) const override {
129
+ const auto* other_locality_attr =
130
+ static_cast<const ServerAddressWeightAttribute*>(other);
131
+ return GPR_ICMP(weight_, other_locality_attr->weight_);
132
+ }
133
+
134
+ std::string ToString() const override {
135
+ return absl::StrFormat("%d", weight_);
136
+ }
137
+
138
+ private:
139
+ uint32_t weight_;
140
+ };
141
+
111
142
  } // namespace grpc_core
112
143
 
113
144
  #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVER_ADDRESS_H */
@@ -303,20 +303,17 @@ class Subchannel::ConnectedSubchannelStateWatcher
303
303
  : public AsyncConnectivityStateWatcherInterface {
304
304
  public:
305
305
  // Must be instantiated while holding c->mu.
306
- explicit ConnectedSubchannelStateWatcher(Subchannel* c) : subchannel_(c) {
307
- // Steal subchannel ref for connecting.
308
- GRPC_SUBCHANNEL_WEAK_REF(subchannel_, "state_watcher");
309
- GRPC_SUBCHANNEL_WEAK_UNREF(subchannel_, "connecting");
310
- }
306
+ explicit ConnectedSubchannelStateWatcher(WeakRefCountedPtr<Subchannel> c)
307
+ : subchannel_(std::move(c)) {}
311
308
 
312
309
  ~ConnectedSubchannelStateWatcher() override {
313
- GRPC_SUBCHANNEL_WEAK_UNREF(subchannel_, "state_watcher");
310
+ subchannel_.reset(DEBUG_LOCATION, "state_watcher");
314
311
  }
315
312
 
316
313
  private:
317
314
  void OnConnectivityStateChange(grpc_connectivity_state new_state,
318
315
  const absl::Status& status) override {
319
- Subchannel* c = subchannel_;
316
+ Subchannel* c = subchannel_.get();
320
317
  MutexLock lock(&c->mu_);
321
318
  switch (new_state) {
322
319
  case GRPC_CHANNEL_TRANSIENT_FAILURE:
@@ -357,7 +354,7 @@ class Subchannel::ConnectedSubchannelStateWatcher
357
354
  }
358
355
  }
359
356
 
360
- Subchannel* subchannel_;
357
+ WeakRefCountedPtr<Subchannel> subchannel_;
361
358
  };
362
359
 
363
360
  // Asynchronously notifies the \a watcher of a change in the connectvity state
@@ -424,19 +421,19 @@ void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
424
421
  class Subchannel::HealthWatcherMap::HealthWatcher
425
422
  : public AsyncConnectivityStateWatcherInterface {
426
423
  public:
427
- HealthWatcher(Subchannel* c, std::string health_check_service_name,
428
- grpc_connectivity_state subchannel_state)
429
- : subchannel_(c),
424
+ HealthWatcher(WeakRefCountedPtr<Subchannel> c,
425
+ std::string health_check_service_name)
426
+ : subchannel_(std::move(c)),
430
427
  health_check_service_name_(std::move(health_check_service_name)),
431
- state_(subchannel_state == GRPC_CHANNEL_READY ? GRPC_CHANNEL_CONNECTING
432
- : subchannel_state) {
433
- GRPC_SUBCHANNEL_WEAK_REF(subchannel_, "health_watcher");
428
+ state_(subchannel_->state_ == GRPC_CHANNEL_READY
429
+ ? GRPC_CHANNEL_CONNECTING
430
+ : subchannel_->state_) {
434
431
  // If the subchannel is already connected, start health checking.
435
- if (subchannel_state == GRPC_CHANNEL_READY) StartHealthCheckingLocked();
432
+ if (subchannel_->state_ == GRPC_CHANNEL_READY) StartHealthCheckingLocked();
436
433
  }
437
434
 
438
435
  ~HealthWatcher() override {
439
- GRPC_SUBCHANNEL_WEAK_UNREF(subchannel_, "health_watcher");
436
+ subchannel_.reset(DEBUG_LOCATION, "health_watcher");
440
437
  }
441
438
 
442
439
  const std::string& health_check_service_name() const {
@@ -449,7 +446,8 @@ class Subchannel::HealthWatcherMap::HealthWatcher
449
446
  grpc_connectivity_state initial_state,
450
447
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
451
448
  if (state_ != initial_state) {
452
- new AsyncWatcherNotifierLocked(watcher, subchannel_, state_, status_);
449
+ new AsyncWatcherNotifierLocked(watcher, subchannel_.get(), state_,
450
+ status_);
453
451
  }
454
452
  watcher_list_.AddWatcherLocked(std::move(watcher));
455
453
  }
@@ -461,7 +459,8 @@ class Subchannel::HealthWatcherMap::HealthWatcher
461
459
 
462
460
  bool HasWatchers() const { return !watcher_list_.empty(); }
463
461
 
464
- void NotifyLocked(grpc_connectivity_state state, const absl::Status& status) {
462
+ void NotifyLocked(grpc_connectivity_state state, const absl::Status& status)
463
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(subchannel_->mu_) {
465
464
  if (state == GRPC_CHANNEL_READY) {
466
465
  // If we had not already notified for CONNECTING state, do so now.
467
466
  // (We may have missed this earlier, because if the transition
@@ -470,14 +469,14 @@ class Subchannel::HealthWatcherMap::HealthWatcher
470
469
  if (state_ != GRPC_CHANNEL_CONNECTING) {
471
470
  state_ = GRPC_CHANNEL_CONNECTING;
472
471
  status_ = status;
473
- watcher_list_.NotifyLocked(subchannel_, state_, status);
472
+ watcher_list_.NotifyLocked(subchannel_.get(), state_, status);
474
473
  }
475
474
  // If we've become connected, start health checking.
476
475
  StartHealthCheckingLocked();
477
476
  } else {
478
477
  state_ = state;
479
478
  status_ = status;
480
- watcher_list_.NotifyLocked(subchannel_, state_, status);
479
+ watcher_list_.NotifyLocked(subchannel_.get(), state_, status);
481
480
  // We're not connected, so stop health checking.
482
481
  health_check_client_.reset();
483
482
  }
@@ -496,18 +495,19 @@ class Subchannel::HealthWatcherMap::HealthWatcher
496
495
  if (new_state != GRPC_CHANNEL_SHUTDOWN && health_check_client_ != nullptr) {
497
496
  state_ = new_state;
498
497
  status_ = status;
499
- watcher_list_.NotifyLocked(subchannel_, new_state, status);
498
+ watcher_list_.NotifyLocked(subchannel_.get(), new_state, status);
500
499
  }
501
500
  }
502
501
 
503
- void StartHealthCheckingLocked() {
502
+ void StartHealthCheckingLocked()
503
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(subchannel_->mu_) {
504
504
  GPR_ASSERT(health_check_client_ == nullptr);
505
505
  health_check_client_ = MakeOrphanable<HealthCheckClient>(
506
506
  health_check_service_name_, subchannel_->connected_subchannel_,
507
507
  subchannel_->pollset_set_, subchannel_->channelz_node_, Ref());
508
508
  }
509
509
 
510
- Subchannel* subchannel_;
510
+ WeakRefCountedPtr<Subchannel> subchannel_;
511
511
  std::string health_check_service_name_;
512
512
  OrphanablePtr<HealthCheckClient> health_check_client_;
513
513
  grpc_connectivity_state state_;
@@ -520,7 +520,8 @@ class Subchannel::HealthWatcherMap::HealthWatcher
520
520
  //
521
521
 
522
522
  void Subchannel::HealthWatcherMap::AddWatcherLocked(
523
- Subchannel* subchannel, grpc_connectivity_state initial_state,
523
+ WeakRefCountedPtr<Subchannel> subchannel,
524
+ grpc_connectivity_state initial_state,
524
525
  const std::string& health_check_service_name,
525
526
  RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
526
527
  // If the health check service name is not already present in the map,
@@ -528,8 +529,8 @@ void Subchannel::HealthWatcherMap::AddWatcherLocked(
528
529
  auto it = map_.find(health_check_service_name);
529
530
  HealthWatcher* health_watcher;
530
531
  if (it == map_.end()) {
531
- auto w = MakeOrphanable<HealthWatcher>(
532
- subchannel, health_check_service_name, subchannel->state_);
532
+ auto w = MakeOrphanable<HealthWatcher>(std::move(subchannel),
533
+ health_check_service_name);
533
534
  health_watcher = w.get();
534
535
  map_.emplace(health_check_service_name, std::move(w));
535
536
  } else {
@@ -647,14 +648,16 @@ Subchannel::ConnectivityStateWatcherInterface::PopConnectivityStateChange() {
647
648
  return state_change;
648
649
  }
649
650
 
650
- Subchannel::Subchannel(SubchannelKey* key,
651
+ Subchannel::Subchannel(SubchannelKey key,
651
652
  OrphanablePtr<SubchannelConnector> connector,
652
653
  const grpc_channel_args* args)
653
- : key_(key),
654
+ : DualRefCounted<Subchannel>(
655
+ GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel_refcount) ? "Subchannel"
656
+ : nullptr),
657
+ key_(std::move(key)),
654
658
  connector_(std::move(connector)),
655
659
  backoff_(ParseArgsForBackoffValues(args, &min_connect_timeout_ms_)) {
656
660
  GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
657
- gpr_atm_no_barrier_store(&ref_pair_, 1 << INTERNAL_REF_BITS);
658
661
  pollset_set_ = grpc_pollset_set_create();
659
662
  grpc_resolved_address* addr =
660
663
  static_cast<grpc_resolved_address*>(gpr_malloc(sizeof(*addr)));
@@ -704,26 +707,26 @@ Subchannel::~Subchannel() {
704
707
  grpc_channel_args_destroy(args_);
705
708
  connector_.reset();
706
709
  grpc_pollset_set_destroy(pollset_set_);
707
- delete key_;
708
710
  }
709
711
 
710
- Subchannel* Subchannel::Create(OrphanablePtr<SubchannelConnector> connector,
711
- const grpc_channel_args* args) {
712
- SubchannelKey* key = new SubchannelKey(args);
712
+ RefCountedPtr<Subchannel> Subchannel::Create(
713
+ OrphanablePtr<SubchannelConnector> connector,
714
+ const grpc_channel_args* args) {
715
+ SubchannelKey key(args);
713
716
  SubchannelPoolInterface* subchannel_pool =
714
717
  SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(args);
715
718
  GPR_ASSERT(subchannel_pool != nullptr);
716
- Subchannel* c = subchannel_pool->FindSubchannel(key);
719
+ RefCountedPtr<Subchannel> c = subchannel_pool->FindSubchannel(key);
717
720
  if (c != nullptr) {
718
- delete key;
719
721
  return c;
720
722
  }
721
- c = new Subchannel(key, std::move(connector), args);
723
+ c = MakeRefCounted<Subchannel>(std::move(key), std::move(connector), args);
722
724
  // Try to register the subchannel before setting the subchannel pool.
723
725
  // Otherwise, in case of a registration race, unreffing c in
724
726
  // RegisterSubchannel() will cause c to be tried to be unregistered, while
725
727
  // its key maps to a different subchannel.
726
- Subchannel* registered = subchannel_pool->RegisterSubchannel(key, c);
728
+ RefCountedPtr<Subchannel> registered =
729
+ subchannel_pool->RegisterSubchannel(c->key_, c);
727
730
  if (registered == c) c->subchannel_pool_ = subchannel_pool->Ref();
728
731
  return registered;
729
732
  }
@@ -747,68 +750,6 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
747
750
  }
748
751
  }
749
752
 
750
- Subchannel* Subchannel::Ref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
751
- gpr_atm old_refs;
752
- old_refs = RefMutate((1 << INTERNAL_REF_BITS),
753
- 0 GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE("STRONG_REF"));
754
- GPR_ASSERT((old_refs & STRONG_REF_MASK) != 0);
755
- return this;
756
- }
757
-
758
- void Subchannel::Unref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
759
- gpr_atm old_refs;
760
- // add a weak ref and subtract a strong ref (atomically)
761
- old_refs = RefMutate(
762
- static_cast<gpr_atm>(1) - static_cast<gpr_atm>(1 << INTERNAL_REF_BITS),
763
- 1 GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE("STRONG_UNREF"));
764
- if ((old_refs & STRONG_REF_MASK) == (1 << INTERNAL_REF_BITS)) {
765
- Disconnect();
766
- }
767
- GRPC_SUBCHANNEL_WEAK_UNREF(this, "strong-unref");
768
- }
769
-
770
- Subchannel* Subchannel::WeakRef(GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
771
- gpr_atm old_refs;
772
- old_refs = RefMutate(1, 0 GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE("WEAK_REF"));
773
- GPR_ASSERT(old_refs != 0);
774
- return this;
775
- }
776
-
777
- namespace {
778
-
779
- void subchannel_destroy(void* arg, grpc_error* /*error*/) {
780
- Subchannel* self = static_cast<Subchannel*>(arg);
781
- delete self;
782
- }
783
-
784
- } // namespace
785
-
786
- void Subchannel::WeakUnref(GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
787
- gpr_atm old_refs;
788
- old_refs = RefMutate(-static_cast<gpr_atm>(1),
789
- 1 GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE("WEAK_UNREF"));
790
- if (old_refs == 1) {
791
- ExecCtx::Run(DEBUG_LOCATION,
792
- GRPC_CLOSURE_CREATE(subchannel_destroy, this,
793
- grpc_schedule_on_exec_ctx),
794
- GRPC_ERROR_NONE);
795
- }
796
- }
797
-
798
- Subchannel* Subchannel::RefFromWeakRef() {
799
- for (;;) {
800
- gpr_atm old_refs = gpr_atm_acq_load(&ref_pair_);
801
- if (old_refs >= (1 << INTERNAL_REF_BITS)) {
802
- gpr_atm new_refs = old_refs + (1 << INTERNAL_REF_BITS);
803
- if (gpr_atm_rel_cas(&ref_pair_, old_refs, new_refs)) {
804
- return this;
805
- }
806
- } else {
807
- return nullptr;
808
- }
809
- }
810
- }
811
-
812
753
  const char* Subchannel::GetTargetAddress() {
813
754
  const grpc_arg* addr_arg =
814
755
  grpc_channel_args_find(args_, GRPC_ARG_SUBCHANNEL_ADDRESS);
@@ -854,7 +795,8 @@ void Subchannel::WatchConnectivityState(
854
795
  watcher_list_.AddWatcherLocked(std::move(watcher));
855
796
  } else {
856
797
  health_watcher_map_.AddWatcherLocked(
857
- this, initial_state, *health_check_service_name, std::move(watcher));
798
+ WeakRef(DEBUG_LOCATION, "health_watcher"), initial_state,
799
+ *health_check_service_name, std::move(watcher));
858
800
  }
859
801
  }
860
802
 
@@ -891,6 +833,21 @@ void Subchannel::ResetBackoff() {
891
833
  }
892
834
  }
893
835
 
836
+ void Subchannel::Orphan() {
837
+ // The subchannel_pool is only used once here in this subchannel, so the
838
+ // access can be outside of the lock.
839
+ if (subchannel_pool_ != nullptr) {
840
+ subchannel_pool_->UnregisterSubchannel(key_, this);
841
+ subchannel_pool_.reset();
842
+ }
843
+ MutexLock lock(&mu_);
844
+ GPR_ASSERT(!disconnected_);
845
+ disconnected_ = true;
846
+ connector_.reset();
847
+ connected_subchannel_.reset();
848
+ health_watcher_map_.ShutdownLocked();
849
+ }
850
+
894
851
  grpc_arg Subchannel::CreateSubchannelAddressArg(
895
852
  const grpc_resolved_address* addr) {
896
853
  return grpc_channel_arg_string_create(
@@ -984,7 +941,8 @@ void Subchannel::MaybeStartConnectingLocked() {
984
941
  return;
985
942
  }
986
943
  connecting_ = true;
987
- GRPC_SUBCHANNEL_WEAK_REF(this, "connecting");
944
+ WeakRef(DEBUG_LOCATION, "connecting")
945
+ .release(); // ref held by pending connect
988
946
  if (!backoff_begun_) {
989
947
  backoff_begun_ = true;
990
948
  ContinueConnectingLocked();
@@ -1006,10 +964,8 @@ void Subchannel::MaybeStartConnectingLocked() {
1006
964
  }
1007
965
 
1008
966
  void Subchannel::OnRetryAlarm(void* arg, grpc_error* error) {
1009
- Subchannel* c = static_cast<Subchannel*>(arg);
1010
- // TODO(soheilhy): Once subchannel refcounting is simplified, we can get use
1011
- // MutexLock instead of ReleasableMutexLock, here.
1012
- ReleasableMutexLock lock(&c->mu_);
967
+ WeakRefCountedPtr<Subchannel> c(static_cast<Subchannel*>(arg));
968
+ MutexLock lock(&c->mu_);
1013
969
  c->have_retry_alarm_ = false;
1014
970
  if (c->disconnected_) {
1015
971
  error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Disconnected",
@@ -1023,10 +979,9 @@ void Subchannel::OnRetryAlarm(void* arg, grpc_error* error) {
1023
979
  if (error == GRPC_ERROR_NONE) {
1024
980
  gpr_log(GPR_INFO, "Failed to connect to channel, retrying");
1025
981
  c->ContinueConnectingLocked();
1026
- lock.Unlock();
1027
- } else {
1028
- lock.Unlock();
1029
- GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
982
+ // Still connecting, keep ref around. Note that this stolen ref won't
983
+ // be dropped without first acquiring c->mu_.
984
+ c.release();
1030
985
  }
1031
986
  GRPC_ERROR_UNREF(error);
1032
987
  }
@@ -1044,27 +999,23 @@ void Subchannel::ContinueConnectingLocked() {
1044
999
  }
1045
1000
 
1046
1001
  void Subchannel::OnConnectingFinished(void* arg, grpc_error* error) {
1047
- auto* c = static_cast<Subchannel*>(arg);
1002
+ WeakRefCountedPtr<Subchannel> c(static_cast<Subchannel*>(arg));
1048
1003
  const grpc_channel_args* delete_channel_args =
1049
1004
  c->connecting_result_.channel_args;
1050
- GRPC_SUBCHANNEL_WEAK_REF(c, "on_connecting_finished");
1051
1005
  {
1052
1006
  MutexLock lock(&c->mu_);
1053
1007
  c->connecting_ = false;
1054
1008
  if (c->connecting_result_.transport != nullptr &&
1055
1009
  c->PublishTransportLocked()) {
1056
1010
  // Do nothing, transport was published.
1057
- } else if (c->disconnected_) {
1058
- GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
1059
- } else {
1011
+ } else if (!c->disconnected_) {
1060
1012
  gpr_log(GPR_INFO, "Connect failed: %s", grpc_error_string(error));
1061
1013
  c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
1062
1014
  grpc_error_to_absl_status(error));
1063
- GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
1064
1015
  }
1065
1016
  }
1066
- GRPC_SUBCHANNEL_WEAK_UNREF(c, "on_connecting_finished");
1067
1017
  grpc_channel_args_destroy(delete_channel_args);
1018
+ c.reset(DEBUG_LOCATION, "connecting");
1068
1019
  }
1069
1020
 
1070
1021
  namespace {
@@ -1117,39 +1068,11 @@ bool Subchannel::PublishTransportLocked() {
1117
1068
  }
1118
1069
  // Start watching connected subchannel.
1119
1070
  connected_subchannel_->StartWatch(
1120
- pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(this));
1071
+ pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(
1072
+ WeakRef(DEBUG_LOCATION, "state_watcher")));
1121
1073
  // Report initial state.
1122
1074
  SetConnectivityStateLocked(GRPC_CHANNEL_READY, absl::Status());
1123
1075
  return true;
1124
1076
  }
1125
1077
 
1126
- void Subchannel::Disconnect() {
1127
- // The subchannel_pool is only used once here in this subchannel, so the
1128
- // access can be outside of the lock.
1129
- if (subchannel_pool_ != nullptr) {
1130
- subchannel_pool_->UnregisterSubchannel(key_);
1131
- subchannel_pool_.reset();
1132
- }
1133
- MutexLock lock(&mu_);
1134
- GPR_ASSERT(!disconnected_);
1135
- disconnected_ = true;
1136
- connector_.reset();
1137
- connected_subchannel_.reset();
1138
- health_watcher_map_.ShutdownLocked();
1139
- }
1140
-
1141
- gpr_atm Subchannel::RefMutate(
1142
- gpr_atm delta, int barrier GRPC_SUBCHANNEL_REF_MUTATE_EXTRA_ARGS) {
1143
- gpr_atm old_val = barrier ? gpr_atm_full_fetch_add(&ref_pair_, delta)
1144
- : gpr_atm_no_barrier_fetch_add(&ref_pair_, delta);
1145
- #ifndef NDEBUG
1146
- if (grpc_trace_subchannel_refcount.enabled()) {
1147
- gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
1148
- "SUBCHANNEL: %p %12s 0x%" PRIxPTR " -> 0x%" PRIxPTR " [%s]", this,
1149
- purpose, old_val, old_val + delta, reason);
1150
- }
1151
- #endif
1152
- return old_val;
1153
- }
1154
-
1155
1078
  } // namespace grpc_core