grpc 1.28.0 → 1.42.0

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 (1954) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1824 -22390
  3. data/etc/roots.pem +592 -899
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/compression.h +1 -1
  7. data/include/grpc/event_engine/README.md +38 -0
  8. data/include/grpc/event_engine/endpoint_config.h +43 -0
  9. data/include/grpc/event_engine/event_engine.h +375 -0
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  11. data/include/grpc/event_engine/memory_allocator.h +210 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/fork.h +1 -1
  14. data/include/grpc/grpc.h +52 -13
  15. data/include/grpc/grpc_posix.h +5 -2
  16. data/include/grpc/grpc_security.h +324 -180
  17. data/include/grpc/grpc_security_constants.h +20 -0
  18. data/include/grpc/impl/codegen/README.md +22 -0
  19. data/include/grpc/impl/codegen/atm.h +5 -3
  20. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  21. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  22. data/include/grpc/impl/codegen/atm_windows.h +6 -0
  23. data/include/grpc/impl/codegen/byte_buffer.h +3 -1
  24. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  25. data/include/grpc/impl/codegen/compression_types.h +2 -0
  26. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  27. data/include/grpc/impl/codegen/fork.h +2 -0
  28. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  29. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  30. data/include/grpc/impl/codegen/grpc_types.h +80 -54
  31. data/include/grpc/impl/codegen/log.h +2 -2
  32. data/include/grpc/impl/codegen/port_platform.h +103 -100
  33. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  34. data/include/grpc/impl/codegen/slice.h +2 -0
  35. data/include/grpc/impl/codegen/status.h +2 -0
  36. data/include/grpc/impl/codegen/sync.h +8 -5
  37. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  38. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  39. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  40. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  41. data/include/grpc/impl/codegen/sync_windows.h +6 -0
  42. data/include/grpc/module.modulemap +31 -46
  43. data/include/grpc/slice.h +1 -1
  44. data/include/grpc/slice_buffer.h +3 -3
  45. data/include/grpc/status.h +1 -1
  46. data/include/grpc/support/atm.h +1 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  48. data/include/grpc/support/atm_gcc_sync.h +1 -1
  49. data/include/grpc/support/atm_windows.h +1 -1
  50. data/include/grpc/support/log.h +1 -1
  51. data/include/grpc/support/port_platform.h +1 -1
  52. data/include/grpc/support/sync.h +4 -4
  53. data/include/grpc/support/sync_abseil.h +1 -1
  54. data/include/grpc/support/sync_custom.h +1 -1
  55. data/include/grpc/support/sync_generic.h +1 -1
  56. data/include/grpc/support/sync_posix.h +1 -1
  57. data/include/grpc/support/sync_windows.h +1 -1
  58. data/include/grpc/support/time.h +9 -9
  59. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  60. data/src/core/ext/filters/client_channel/backend_metric.cc +30 -28
  61. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  62. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  63. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  64. data/src/core/ext/filters/client_channel/client_channel.cc +2207 -3176
  65. data/src/core/ext/filters/client_channel/client_channel.h +561 -62
  66. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  67. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -5
  68. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  69. data/src/core/ext/filters/client_channel/client_channel_factory.h +18 -19
  70. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -13
  71. data/src/core/ext/filters/client_channel/config_selector.cc +59 -0
  72. data/src/core/ext/filters/client_channel/config_selector.h +145 -0
  73. data/src/core/ext/filters/client_channel/connector.h +19 -19
  74. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  75. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -11
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +71 -73
  79. data/src/core/ext/filters/client_channel/health/health_check_client.h +37 -35
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +43 -40
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  82. data/src/core/ext/filters/client_channel/http_proxy.cc +59 -34
  83. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +96 -0
  84. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +101 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +26 -13
  86. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -21
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +659 -608
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +8 -44
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +5 -3
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -6
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  98. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +57 -44
  99. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +918 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -26
  104. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -47
  105. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +741 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +512 -137
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -26
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +795 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +701 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1362 -0
  112. data/src/core/ext/filters/client_channel/lb_policy.cc +29 -35
  113. data/src/core/ext/filters/client_channel/lb_policy.h +130 -117
  114. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  115. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +19 -12
  116. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  117. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  118. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +12 -10
  119. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +136 -131
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -35
  122. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  123. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +20 -17
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +98 -138
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +651 -216
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +32 -5
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  129. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +79 -68
  130. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +124 -136
  131. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -10
  132. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  133. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  134. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +892 -47
  135. data/src/core/ext/filters/client_channel/{xds/xds_channel_args.h → resolver/xds/xds_resolver.h} +9 -7
  136. data/src/core/ext/filters/client_channel/resolver.cc +9 -10
  137. data/src/core/ext/filters/client_channel/resolver.h +13 -23
  138. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -8
  139. data/src/core/ext/filters/client_channel/resolver_registry.cc +57 -56
  140. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -10
  141. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +61 -315
  142. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +42 -67
  143. data/src/core/ext/filters/client_channel/retry_filter.cc +2573 -0
  144. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
  145. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  146. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  147. data/src/core/ext/filters/client_channel/retry_throttle.cc +20 -49
  148. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  149. data/src/core/ext/filters/client_channel/server_address.cc +132 -13
  150. data/src/core/ext/filters/client_channel/server_address.h +80 -32
  151. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +156 -0
  152. data/src/core/ext/filters/client_channel/subchannel.cc +271 -347
  153. data/src/core/ext/filters/client_channel/subchannel.h +142 -163
  154. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  155. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
  156. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +27 -12
  157. data/src/core/ext/filters/client_idle/client_idle_filter.cc +47 -223
  158. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  159. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  160. data/src/core/ext/filters/deadline/deadline_filter.cc +113 -108
  161. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  162. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +503 -0
  163. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  164. data/src/core/ext/filters/fault_injection/service_config_parser.cc +181 -0
  165. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  166. data/src/core/ext/filters/http/client/http_client_filter.cc +104 -101
  167. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  168. data/src/core/ext/filters/http/http_filters_plugin.cc +54 -53
  169. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +274 -230
  170. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +398 -0
  171. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  172. data/src/core/ext/filters/http/server/http_server_filter.cc +107 -98
  173. data/src/core/ext/filters/max_age/max_age_filter.cc +74 -70
  174. data/src/core/ext/filters/message_size/message_size_filter.cc +89 -113
  175. data/src/core/ext/filters/message_size/message_size_filter.h +12 -5
  176. data/src/core/ext/service_config/service_config.cc +227 -0
  177. data/src/core/ext/service_config/service_config.h +127 -0
  178. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  179. data/src/core/ext/service_config/service_config_parser.cc +89 -0
  180. data/src/core/ext/service_config/service_config_parser.h +97 -0
  181. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +119 -49
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +24 -5
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +42 -35
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +32 -16
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +52 -88
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +829 -357
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +14 -6
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +32 -24
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +64 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +11 -9
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +5 -6
  195. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +548 -542
  196. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +17 -2
  197. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  198. data/src/core/ext/transport/chttp2/transport/context_list.h +5 -6
  199. data/src/core/ext/transport/chttp2/transport/flow_control.cc +82 -60
  200. data/src/core/ext/transport/chttp2/transport/flow_control.h +47 -33
  201. data/src/core/ext/transport/chttp2/transport/frame_data.cc +30 -29
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +25 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -9
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +15 -16
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -9
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -22
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -9
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +53 -22
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +11 -10
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +25 -25
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +7 -9
  213. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +311 -652
  215. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +241 -72
  216. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
  219. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +868 -1175
  220. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +102 -84
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -0
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
  223. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
  224. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +30 -0
  225. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  226. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  227. data/src/core/ext/transport/chttp2/transport/internal.h +77 -56
  228. data/src/core/ext/transport/chttp2/transport/parsing.cc +168 -320
  229. data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
  230. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  231. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  232. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  233. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  234. data/src/core/ext/transport/chttp2/transport/writing.cc +97 -80
  235. data/src/core/ext/transport/inproc/inproc_transport.cc +263 -180
  236. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  237. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1591 -0
  238. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
  239. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +2 -2
  240. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
  241. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +18 -6
  242. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  243. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +955 -0
  244. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  245. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1554 -0
  246. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  247. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +271 -0
  248. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +494 -0
  249. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2116 -0
  250. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  251. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +83 -0
  252. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  253. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +370 -0
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +470 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +94 -0
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +382 -0
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1295 -0
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +418 -0
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +84 -0
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +161 -0
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +917 -0
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +171 -0
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +830 -0
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +94 -0
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +244 -0
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1089 -0
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +71 -0
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +101 -0
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +43 -0
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +132 -0
  282. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  283. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +261 -0
  286. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +125 -0
  287. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +462 -0
  288. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  289. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +397 -0
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +79 -0
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -0
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +640 -0
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +161 -0
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +680 -0
  296. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  297. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
  298. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +42 -0
  299. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +127 -0
  300. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  301. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +536 -0
  302. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +153 -0
  303. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +550 -0
  304. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +185 -0
  305. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +738 -0
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +82 -0
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +312 -0
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +960 -0
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4213 -0
  310. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  311. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +177 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +134 -0
  314. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  315. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -0
  316. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  317. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +298 -0
  318. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  319. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +303 -0
  320. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  321. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +123 -0
  322. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +403 -0
  323. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1785 -0
  324. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  325. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  326. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +130 -0
  327. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +559 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  329. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +237 -0
  330. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +148 -0
  331. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +674 -0
  332. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  333. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +62 -0
  334. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  335. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +62 -0
  336. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  337. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +535 -0
  338. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +27 -0
  339. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +62 -0
  340. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +27 -0
  341. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +62 -0
  342. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  343. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +163 -0
  344. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +8 -8
  345. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +62 -0
  346. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  347. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +62 -0
  348. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  349. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +468 -0
  350. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  351. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
  352. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +48 -0
  353. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +144 -0
  354. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  355. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +96 -0
  356. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  357. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +90 -0
  358. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  359. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +84 -0
  360. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +65 -0
  361. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +184 -0
  362. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  363. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +158 -0
  364. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  365. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +136 -0
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +225 -0
  368. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  369. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +343 -0
  370. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  371. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +313 -0
  372. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +4 -3
  373. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +10 -10
  374. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  375. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +111 -0
  376. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  377. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +148 -0
  378. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  379. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +74 -0
  380. data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
  381. data/src/core/ext/upb-generated/google/api/annotations.upb.h +2 -2
  382. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  383. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +896 -0
  384. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  385. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +943 -0
  386. data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
  387. data/src/core/ext/upb-generated/google/api/http.upb.h +74 -36
  388. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
  389. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +20 -8
  390. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +155 -154
  391. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +881 -524
  392. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
  393. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +20 -8
  394. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
  395. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +16 -4
  396. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  397. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +77 -61
  398. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
  399. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +20 -8
  400. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
  401. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +146 -38
  402. data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
  403. data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -12
  404. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  405. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +48 -47
  406. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +63 -63
  407. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +307 -195
  408. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -8
  409. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +44 -16
  410. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
  411. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +34 -10
  412. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  413. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +186 -72
  414. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  415. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  416. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
  417. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +52 -16
  418. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +29 -0
  419. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +70 -0
  420. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
  421. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +2 -2
  422. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  423. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +77 -0
  424. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  425. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +66 -0
  426. data/src/core/ext/upb-generated/validate/validate.upb.c +243 -226
  427. data/src/core/ext/upb-generated/validate/validate.upb.h +1048 -668
  428. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  429. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  430. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  431. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +66 -0
  432. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  433. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +155 -0
  434. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  435. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +90 -0
  436. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  437. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +100 -0
  438. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  439. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +178 -0
  440. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  441. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +91 -0
  442. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  443. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  444. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +33 -0
  445. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  446. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  447. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  448. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +46 -0
  449. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  450. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  451. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +252 -0
  453. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  456. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  457. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +596 -0
  459. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +155 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  461. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  463. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  465. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  466. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  467. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  468. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +313 -0
  469. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +150 -0
  470. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +144 -0
  471. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  472. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  473. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  475. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  476. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  477. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  478. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +236 -0
  479. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  480. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  481. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  482. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +300 -0
  483. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +100 -0
  484. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  485. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  486. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  487. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  488. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  489. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  490. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +72 -0
  491. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  492. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  493. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  494. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  495. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +140 -0
  497. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +60 -0
  498. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  499. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  500. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  501. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  502. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +205 -0
  503. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  504. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +201 -0
  505. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  506. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  507. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +67 -0
  509. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  511. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  512. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +152 -0
  513. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  514. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  515. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  516. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +982 -0
  517. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  518. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  519. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  520. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  521. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  522. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  523. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  524. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  525. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  526. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  527. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  528. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  529. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  530. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +567 -0
  531. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +125 -0
  532. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  533. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  534. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +196 -0
  535. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +60 -0
  536. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  537. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  538. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +251 -0
  539. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  540. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  541. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  542. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  543. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  544. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  545. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  546. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  547. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  548. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  549. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  550. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  551. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  552. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  553. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  554. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  555. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  556. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  557. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  558. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  559. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  560. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +65 -0
  561. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  562. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  563. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  564. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  565. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  566. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  567. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  568. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +76 -0
  569. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  570. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  571. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  572. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  573. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  574. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  575. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  576. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  577. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  578. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  579. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  580. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  581. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  582. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  583. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  584. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  585. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  586. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  587. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  588. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  589. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  590. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  591. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  592. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  593. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  594. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  595. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  596. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  597. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  599. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  600. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  601. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  602. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  603. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  605. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  606. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  607. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +71 -0
  609. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  610. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +52 -0
  611. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +34 -0
  613. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  614. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +51 -0
  615. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +44 -0
  617. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  618. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +332 -0
  619. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  620. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  621. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  622. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +43 -0
  623. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +63 -0
  625. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +46 -0
  627. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  628. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +50 -0
  629. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  630. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +68 -0
  631. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  632. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +51 -0
  633. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  635. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  636. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  637. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  638. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  639. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  640. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  641. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  642. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  643. data/src/core/ext/xds/xds_api.cc +3965 -0
  644. data/src/core/ext/xds/xds_api.h +744 -0
  645. data/src/core/ext/xds/xds_bootstrap.cc +471 -0
  646. data/src/core/ext/xds/xds_bootstrap.h +125 -0
  647. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  648. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  649. data/src/core/ext/xds/xds_channel_args.h +32 -0
  650. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  651. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  652. data/src/core/ext/xds/xds_client.cc +2791 -0
  653. data/src/core/ext/xds/xds_client.h +380 -0
  654. data/src/core/ext/xds/xds_client_stats.cc +160 -0
  655. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +87 -46
  656. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  657. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  658. data/src/core/ext/xds/xds_http_filters.cc +116 -0
  659. data/src/core/ext/xds/xds_http_filters.h +133 -0
  660. data/src/core/ext/xds/xds_server_config_fetcher.cc +544 -0
  661. data/src/core/lib/address_utils/parse_address.cc +320 -0
  662. data/src/core/lib/address_utils/parse_address.h +77 -0
  663. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +159 -46
  664. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +46 -20
  665. data/src/core/lib/avl/avl.cc +5 -5
  666. data/src/core/lib/backoff/backoff.cc +1 -1
  667. data/src/core/lib/channel/call_tracer.h +85 -0
  668. data/src/core/lib/channel/channel_args.cc +50 -29
  669. data/src/core/lib/channel/channel_args.h +12 -2
  670. data/src/core/lib/channel/channel_stack.cc +27 -12
  671. data/src/core/lib/channel/channel_stack.h +38 -23
  672. data/src/core/lib/channel/channel_stack_builder.cc +6 -16
  673. data/src/core/lib/channel/channel_stack_builder.h +1 -9
  674. data/src/core/lib/channel/channel_trace.cc +11 -12
  675. data/src/core/lib/channel/channel_trace.h +3 -2
  676. data/src/core/lib/channel/channelz.cc +194 -142
  677. data/src/core/lib/channel/channelz.h +79 -55
  678. data/src/core/lib/channel/channelz_registry.cc +42 -22
  679. data/src/core/lib/channel/channelz_registry.h +4 -2
  680. data/src/core/lib/channel/connected_channel.cc +13 -12
  681. data/src/core/lib/channel/connected_channel.h +1 -2
  682. data/src/core/lib/channel/context.h +4 -1
  683. data/src/core/lib/channel/handshaker.cc +23 -65
  684. data/src/core/lib/channel/handshaker.h +12 -28
  685. data/src/core/lib/channel/handshaker_factory.h +10 -2
  686. data/src/core/lib/channel/handshaker_registry.cc +15 -82
  687. data/src/core/lib/channel/handshaker_registry.h +29 -12
  688. data/src/core/lib/channel/status_util.cc +14 -5
  689. data/src/core/lib/channel/status_util.h +11 -2
  690. data/src/core/lib/compression/algorithm_metadata.h +1 -0
  691. data/src/core/lib/compression/compression.cc +10 -6
  692. data/src/core/lib/compression/compression_args.cc +11 -7
  693. data/src/core/lib/compression/compression_internal.cc +14 -11
  694. data/src/core/lib/compression/compression_internal.h +3 -2
  695. data/src/core/lib/compression/message_compress.cc +7 -3
  696. data/src/core/lib/compression/stream_compression.cc +2 -1
  697. data/src/core/lib/compression/stream_compression.h +3 -2
  698. data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
  699. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  700. data/src/core/lib/compression/stream_compression_identity.cc +3 -4
  701. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  702. data/src/core/lib/config/core_configuration.cc +96 -0
  703. data/src/core/lib/config/core_configuration.h +146 -0
  704. data/src/core/lib/debug/stats.cc +22 -28
  705. data/src/core/lib/debug/stats.h +7 -4
  706. data/src/core/lib/debug/stats_data.cc +16 -14
  707. data/src/core/lib/debug/stats_data.h +14 -13
  708. data/src/core/lib/debug/trace.cc +1 -0
  709. data/src/core/lib/debug/trace.h +2 -1
  710. data/src/core/lib/event_engine/endpoint_config.cc +45 -0
  711. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  712. data/src/core/lib/event_engine/event_engine.cc +50 -0
  713. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  714. data/src/core/lib/event_engine/sockaddr.h +44 -0
  715. data/src/core/lib/gpr/alloc.cc +7 -5
  716. data/src/core/lib/gpr/atm.cc +1 -1
  717. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  718. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  719. data/src/core/lib/gpr/env_linux.cc +1 -2
  720. data/src/core/lib/gpr/env_posix.cc +2 -3
  721. data/src/core/lib/gpr/log.cc +61 -19
  722. data/src/core/lib/gpr/log_android.cc +3 -2
  723. data/src/core/lib/gpr/log_linux.cc +30 -13
  724. data/src/core/lib/gpr/log_posix.cc +25 -10
  725. data/src/core/lib/gpr/log_windows.cc +18 -4
  726. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  727. data/src/core/lib/gpr/spinlock.h +12 -5
  728. data/src/core/lib/gpr/string.cc +35 -57
  729. data/src/core/lib/gpr/string.h +11 -26
  730. data/src/core/lib/gpr/sync.cc +6 -6
  731. data/src/core/lib/gpr/sync_abseil.cc +12 -12
  732. data/src/core/lib/gpr/sync_posix.cc +5 -11
  733. data/src/core/lib/gpr/sync_windows.cc +2 -2
  734. data/src/core/lib/gpr/time.cc +19 -14
  735. data/src/core/lib/gpr/time_posix.cc +1 -1
  736. data/src/core/lib/gpr/time_precise.cc +5 -2
  737. data/src/core/lib/gpr/time_precise.h +6 -2
  738. data/src/core/lib/gpr/time_windows.cc +3 -2
  739. data/src/core/lib/gpr/tls.h +119 -36
  740. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  741. data/src/core/lib/gpr/useful.h +79 -31
  742. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  743. data/src/core/lib/gprpp/arena.cc +2 -1
  744. data/src/core/lib/gprpp/arena.h +18 -7
  745. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  746. data/src/core/lib/gprpp/bitset.h +188 -0
  747. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  748. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  749. data/src/core/lib/gprpp/dual_ref_counted.h +330 -0
  750. data/src/core/lib/gprpp/{optional.h → examine_stack.cc} +19 -9
  751. data/src/core/lib/gprpp/examine_stack.h +46 -0
  752. data/src/core/lib/gprpp/fork.cc +17 -15
  753. data/src/core/lib/gprpp/fork.h +4 -4
  754. data/src/core/lib/gprpp/global_config.h +1 -2
  755. data/src/core/lib/gprpp/global_config_env.cc +11 -9
  756. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  757. data/src/core/lib/gprpp/host_port.cc +29 -35
  758. data/src/core/lib/gprpp/host_port.h +14 -17
  759. data/src/core/lib/gprpp/manual_constructor.h +10 -7
  760. data/src/core/lib/gprpp/match.h +73 -0
  761. data/src/core/lib/gprpp/memory.h +9 -3
  762. data/src/core/lib/gprpp/mpscq.cc +9 -9
  763. data/src/core/lib/gprpp/mpscq.h +6 -5
  764. data/src/core/lib/gprpp/orphanable.h +10 -14
  765. data/src/core/lib/gprpp/overload.h +59 -0
  766. data/src/core/lib/gprpp/ref_counted.h +123 -86
  767. data/src/core/lib/gprpp/ref_counted_ptr.h +173 -7
  768. data/src/core/lib/gprpp/stat.h +38 -0
  769. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  770. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  771. data/src/core/lib/gprpp/status_helper.cc +427 -0
  772. data/src/core/lib/gprpp/status_helper.h +194 -0
  773. data/src/core/lib/gprpp/sync.h +106 -43
  774. data/src/core/lib/gprpp/table.h +411 -0
  775. data/src/core/lib/gprpp/thd.h +3 -3
  776. data/src/core/lib/gprpp/thd_posix.cc +47 -42
  777. data/src/core/lib/gprpp/thd_windows.cc +7 -12
  778. data/src/core/lib/gprpp/time_util.cc +77 -0
  779. data/src/core/lib/gprpp/time_util.h +42 -0
  780. data/src/core/lib/http/format_request.cc +47 -65
  781. data/src/core/lib/http/format_request.h +1 -0
  782. data/src/core/lib/http/httpcli.cc +213 -193
  783. data/src/core/lib/http/httpcli.h +7 -6
  784. data/src/core/lib/http/httpcli_security_connector.cc +25 -24
  785. data/src/core/lib/http/parser.cc +65 -45
  786. data/src/core/lib/http/parser.h +7 -7
  787. data/src/core/lib/iomgr/buffer_list.cc +10 -11
  788. data/src/core/lib/iomgr/buffer_list.h +27 -28
  789. data/src/core/lib/iomgr/call_combiner.cc +46 -21
  790. data/src/core/lib/iomgr/call_combiner.h +15 -16
  791. data/src/core/lib/iomgr/cfstream_handle.cc +10 -8
  792. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  793. data/src/core/lib/iomgr/closure.h +9 -9
  794. data/src/core/lib/iomgr/combiner.cc +25 -36
  795. data/src/core/lib/iomgr/combiner.h +3 -2
  796. data/src/core/lib/iomgr/dualstack_socket_posix.cc +48 -0
  797. data/src/core/lib/iomgr/endpoint.cc +6 -6
  798. data/src/core/lib/iomgr/endpoint.h +10 -8
  799. data/src/core/lib/iomgr/endpoint_cfstream.cc +60 -48
  800. data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
  801. data/src/core/lib/iomgr/endpoint_pair.h +2 -2
  802. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  803. data/src/core/lib/iomgr/endpoint_pair_posix.cc +21 -17
  804. data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
  805. data/src/core/lib/iomgr/error.cc +285 -115
  806. data/src/core/lib/iomgr/error.h +280 -115
  807. data/src/core/lib/iomgr/error_cfstream.cc +17 -10
  808. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  809. data/src/core/lib/iomgr/error_internal.h +7 -2
  810. data/src/core/lib/iomgr/ev_apple.cc +359 -0
  811. data/src/core/lib/iomgr/ev_apple.h +43 -0
  812. data/src/core/lib/iomgr/ev_epoll1_linux.cc +76 -80
  813. data/src/core/lib/iomgr/ev_epollex_linux.cc +106 -109
  814. data/src/core/lib/iomgr/ev_poll_posix.cc +79 -76
  815. data/src/core/lib/iomgr/ev_posix.cc +15 -16
  816. data/src/core/lib/iomgr/ev_posix.h +9 -9
  817. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  818. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  819. data/src/core/lib/iomgr/event_engine/endpoint.cc +173 -0
  820. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  821. data/src/core/lib/iomgr/event_engine/iomgr.cc +104 -0
  822. data/src/core/lib/iomgr/event_engine/iomgr.h +42 -0
  823. data/src/core/lib/iomgr/event_engine/pollset.cc +88 -0
  824. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  825. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  826. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  827. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  828. data/src/core/lib/iomgr/event_engine/resolver.cc +114 -0
  829. data/src/core/lib/iomgr/event_engine/tcp.cc +293 -0
  830. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  831. data/src/core/lib/iomgr/exec_ctx.cc +15 -12
  832. data/src/core/lib/iomgr/exec_ctx.h +37 -30
  833. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  834. data/src/core/lib/iomgr/executor/mpmcqueue.h +11 -15
  835. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  836. data/src/core/lib/iomgr/executor/threadpool.h +8 -7
  837. data/src/core/lib/iomgr/executor.cc +19 -33
  838. data/src/core/lib/iomgr/executor.h +3 -3
  839. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  840. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  841. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  842. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  843. data/src/core/lib/iomgr/iomgr.cc +6 -4
  844. data/src/core/lib/iomgr/iomgr.h +3 -3
  845. data/src/core/lib/iomgr/iomgr_custom.cc +3 -3
  846. data/src/core/lib/iomgr/iomgr_custom.h +2 -2
  847. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  848. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  849. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  850. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +115 -22
  851. data/src/core/lib/iomgr/iomgr_windows.cc +2 -3
  852. data/src/core/lib/iomgr/is_epollexclusive_available.cc +18 -4
  853. data/src/core/lib/iomgr/load_file.cc +6 -6
  854. data/src/core/lib/iomgr/load_file.h +2 -2
  855. data/src/core/lib/iomgr/lockfree_event.cc +38 -15
  856. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  857. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  858. data/src/core/lib/iomgr/pollset.cc +5 -5
  859. data/src/core/lib/iomgr/pollset.h +9 -9
  860. data/src/core/lib/iomgr/pollset_custom.cc +10 -11
  861. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  862. data/src/core/lib/iomgr/pollset_set_custom.cc +12 -13
  863. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  864. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  865. data/src/core/lib/iomgr/port.h +9 -31
  866. data/src/core/lib/iomgr/python_util.h +47 -0
  867. data/src/core/lib/iomgr/resolve_address.cc +14 -9
  868. data/src/core/lib/iomgr/resolve_address.h +15 -15
  869. data/src/core/lib/iomgr/resolve_address_custom.cc +48 -62
  870. data/src/core/lib/iomgr/resolve_address_custom.h +5 -4
  871. data/src/core/lib/iomgr/resolve_address_posix.cc +21 -30
  872. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -33
  873. data/src/core/lib/iomgr/resource_quota.cc +185 -94
  874. data/src/core/lib/iomgr/resource_quota.h +66 -17
  875. data/src/core/lib/iomgr/sockaddr.h +2 -1
  876. data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
  877. data/src/core/lib/iomgr/socket_factory_posix.h +3 -3
  878. data/src/core/lib/iomgr/socket_mutator.cc +20 -6
  879. data/src/core/lib/iomgr/socket_mutator.h +28 -5
  880. data/src/core/lib/iomgr/socket_utils_common_posix.cc +128 -105
  881. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  882. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  883. data/src/core/lib/iomgr/socket_utils_posix.h +25 -22
  884. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  885. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  886. data/src/core/lib/iomgr/tcp_client.cc +5 -3
  887. data/src/core/lib/iomgr/tcp_client.h +4 -0
  888. data/src/core/lib/iomgr/tcp_client_cfstream.cc +31 -43
  889. data/src/core/lib/iomgr/tcp_client_custom.cc +23 -34
  890. data/src/core/lib/iomgr/tcp_client_posix.cc +72 -69
  891. data/src/core/lib/iomgr/tcp_client_posix.h +8 -6
  892. data/src/core/lib/iomgr/tcp_client_windows.cc +31 -23
  893. data/src/core/lib/iomgr/tcp_custom.cc +77 -71
  894. data/src/core/lib/iomgr/tcp_custom.h +16 -14
  895. data/src/core/lib/iomgr/tcp_posix.cc +149 -156
  896. data/src/core/lib/iomgr/tcp_posix.h +19 -12
  897. data/src/core/lib/iomgr/tcp_server.cc +12 -11
  898. data/src/core/lib/iomgr/tcp_server.h +23 -17
  899. data/src/core/lib/iomgr/tcp_server_custom.cc +72 -94
  900. data/src/core/lib/iomgr/tcp_server_posix.cc +84 -76
  901. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -16
  902. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +29 -28
  903. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -28
  904. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  905. data/src/core/lib/iomgr/tcp_server_windows.cc +46 -42
  906. data/src/core/lib/iomgr/tcp_windows.cc +44 -47
  907. data/src/core/lib/iomgr/tcp_windows.h +4 -3
  908. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  909. data/src/core/lib/iomgr/timer.cc +1 -0
  910. data/src/core/lib/iomgr/timer.h +7 -3
  911. data/src/core/lib/iomgr/timer_custom.cc +9 -8
  912. data/src/core/lib/iomgr/timer_custom.h +1 -1
  913. data/src/core/lib/iomgr/timer_generic.cc +46 -76
  914. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +17 -14
  915. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  916. data/src/core/lib/iomgr/timer_heap.h +2 -3
  917. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  918. data/src/core/lib/iomgr/unix_sockets_posix.cc +37 -33
  919. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -3
  920. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +20 -7
  921. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  922. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  923. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +8 -9
  924. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  925. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  926. data/src/core/lib/iomgr/work_serializer.cc +4 -4
  927. data/src/core/lib/iomgr/work_serializer.h +18 -2
  928. data/src/core/lib/json/json.h +15 -4
  929. data/src/core/lib/json/json_reader.cc +31 -37
  930. data/src/core/lib/json/json_util.cc +126 -0
  931. data/src/core/lib/json/json_util.h +154 -0
  932. data/src/core/lib/json/json_writer.cc +14 -15
  933. data/src/core/lib/matchers/matchers.cc +327 -0
  934. data/src/core/lib/matchers/matchers.h +160 -0
  935. data/src/core/lib/profiling/basic_timers.cc +8 -6
  936. data/src/core/lib/profiling/stap_timers.cc +2 -2
  937. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  938. data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
  939. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  940. data/src/core/lib/security/authorization/evaluate_args.cc +213 -0
  941. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  942. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +171 -0
  943. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
  944. data/src/core/lib/security/context/security_context.cc +15 -11
  945. data/src/core/lib/security/context/security_context.h +3 -1
  946. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  947. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  948. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  949. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  950. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  951. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  952. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -8
  953. data/src/core/lib/security/credentials/composite/composite_credentials.h +8 -5
  954. data/src/core/lib/security/credentials/credentials.cc +17 -99
  955. data/src/core/lib/security/credentials/credentials.h +27 -70
  956. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
  957. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +404 -0
  958. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +81 -0
  959. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  960. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  961. data/src/core/lib/security/credentials/external/external_account_credentials.cc +527 -0
  962. data/src/core/lib/security/credentials/external/external_account_credentials.h +122 -0
  963. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  964. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  965. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  966. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +60 -0
  967. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  968. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -2
  969. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -7
  970. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +154 -77
  971. data/src/core/lib/security/credentials/iam/iam_credentials.cc +10 -7
  972. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  973. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  974. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -7
  975. data/src/core/lib/security/credentials/jwt/json_token.h +3 -5
  976. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +39 -19
  977. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +24 -3
  978. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +25 -35
  979. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -6
  980. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  981. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  982. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +128 -118
  983. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -12
  984. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +25 -14
  985. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -2
  986. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -10
  987. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -3
  988. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +348 -0
  989. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +217 -0
  990. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +455 -0
  991. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +147 -0
  992. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +82 -140
  993. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +74 -167
  994. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  995. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  996. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  997. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  998. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  999. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  1000. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +35 -10
  1001. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +40 -37
  1002. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  1003. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +97 -0
  1004. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  1005. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1006. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -6
  1007. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  1008. data/src/core/lib/security/security_connector/local/local_security_connector.cc +26 -13
  1009. data/src/core/lib/security/security_connector/security_connector.cc +15 -7
  1010. data/src/core/lib/security/security_connector/security_connector.h +16 -9
  1011. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
  1012. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +9 -7
  1013. data/src/core/lib/security/security_connector/ssl_utils.cc +126 -31
  1014. data/src/core/lib/security/security_connector/ssl_utils.h +40 -34
  1015. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +393 -303
  1016. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +144 -62
  1017. data/src/core/lib/security/transport/auth_filters.h +1 -5
  1018. data/src/core/lib/security/transport/client_auth_filter.cc +34 -28
  1019. data/src/core/lib/security/transport/secure_endpoint.cc +16 -20
  1020. data/src/core/lib/security/transport/secure_endpoint.h +1 -0
  1021. data/src/core/lib/security/transport/security_handshaker.cc +159 -91
  1022. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1023. data/src/core/lib/security/transport/server_auth_filter.cc +22 -17
  1024. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1025. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1026. data/src/core/lib/security/util/json_util.cc +10 -13
  1027. data/src/core/lib/security/util/json_util.h +2 -1
  1028. data/src/core/lib/slice/percent_encoding.cc +73 -30
  1029. data/src/core/lib/slice/percent_encoding.h +29 -28
  1030. data/src/core/lib/slice/slice.cc +59 -26
  1031. data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
  1032. data/src/core/lib/slice/slice_buffer.cc +8 -8
  1033. data/src/core/lib/slice/slice_intern.cc +23 -32
  1034. data/src/core/lib/slice/slice_internal.h +19 -246
  1035. data/src/core/lib/slice/slice_refcount.cc +17 -0
  1036. data/src/core/lib/slice/slice_refcount.h +121 -0
  1037. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  1038. data/src/core/lib/slice/slice_split.cc +100 -0
  1039. data/src/core/lib/slice/slice_split.h +40 -0
  1040. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1041. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1042. data/src/core/lib/slice/slice_utils.h +9 -0
  1043. data/src/core/lib/slice/static_slice.cc +529 -0
  1044. data/src/core/lib/slice/static_slice.h +331 -0
  1045. data/src/core/lib/surface/api_trace.cc +2 -1
  1046. data/src/core/lib/surface/api_trace.h +1 -0
  1047. data/src/core/lib/surface/builtins.cc +49 -0
  1048. data/src/core/lib/surface/builtins.h +26 -0
  1049. data/src/core/lib/surface/byte_buffer_reader.cc +3 -48
  1050. data/src/core/lib/surface/call.cc +252 -241
  1051. data/src/core/lib/surface/call.h +12 -6
  1052. data/src/core/lib/surface/call_details.cc +10 -10
  1053. data/src/core/lib/surface/call_log_batch.cc +52 -60
  1054. data/src/core/lib/surface/channel.cc +99 -85
  1055. data/src/core/lib/surface/channel.h +60 -9
  1056. data/src/core/lib/surface/channel_init.cc +23 -76
  1057. data/src/core/lib/surface/channel_init.h +52 -44
  1058. data/src/core/lib/surface/channel_ping.cc +4 -6
  1059. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1060. data/src/core/lib/surface/completion_queue.cc +179 -188
  1061. data/src/core/lib/surface/completion_queue.h +18 -17
  1062. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  1063. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1064. data/src/core/lib/surface/event_string.cc +19 -25
  1065. data/src/core/lib/surface/event_string.h +3 -1
  1066. data/src/core/lib/surface/init.cc +44 -74
  1067. data/src/core/lib/surface/init.h +10 -2
  1068. data/src/core/lib/surface/init_secure.cc +36 -17
  1069. data/src/core/lib/surface/lame_client.cc +62 -61
  1070. data/src/core/lib/surface/lame_client.h +5 -0
  1071. data/src/core/lib/surface/metadata_array.cc +2 -2
  1072. data/src/core/lib/surface/server.cc +1314 -1305
  1073. data/src/core/lib/surface/server.h +475 -45
  1074. data/src/core/lib/surface/validate_metadata.cc +55 -24
  1075. data/src/core/lib/surface/validate_metadata.h +6 -2
  1076. data/src/core/lib/surface/version.cc +2 -2
  1077. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  1078. data/src/core/lib/transport/bdp_estimator.h +2 -1
  1079. data/src/core/lib/transport/byte_stream.cc +5 -5
  1080. data/src/core/lib/transport/byte_stream.h +19 -13
  1081. data/src/core/lib/transport/connectivity_state.cc +32 -23
  1082. data/src/core/lib/transport/connectivity_state.h +33 -17
  1083. data/src/core/lib/transport/error_utils.cc +71 -21
  1084. data/src/core/lib/transport/error_utils.h +16 -4
  1085. data/src/core/lib/transport/metadata.cc +60 -25
  1086. data/src/core/lib/transport/metadata.h +17 -14
  1087. data/src/core/lib/transport/metadata_batch.cc +41 -339
  1088. data/src/core/lib/transport/metadata_batch.h +932 -69
  1089. data/src/core/lib/transport/parsed_metadata.h +263 -0
  1090. data/src/core/lib/transport/pid_controller.cc +4 -4
  1091. data/src/core/lib/transport/static_metadata.cc +718 -831
  1092. data/src/core/lib/transport/static_metadata.h +115 -372
  1093. data/src/core/lib/transport/status_conversion.cc +6 -14
  1094. data/src/core/lib/transport/status_metadata.cc +5 -3
  1095. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  1096. data/src/core/lib/transport/transport.cc +15 -14
  1097. data/src/core/lib/transport/transport.h +29 -13
  1098. data/src/core/lib/transport/transport_op_string.cc +91 -112
  1099. data/src/core/lib/uri/uri_parser.cc +135 -258
  1100. data/src/core/lib/uri/uri_parser.h +60 -23
  1101. data/src/core/plugin_registry/grpc_plugin_registry.cc +136 -44
  1102. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -5
  1103. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  1104. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1105. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1106. data/src/core/tsi/alts/frame_protector/frame_handler.cc +18 -17
  1107. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +56 -45
  1108. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -7
  1109. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +116 -55
  1110. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  1111. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1112. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  1113. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1114. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1115. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  1116. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  1117. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
  1118. data/src/core/tsi/fake_transport_security.cc +41 -26
  1119. data/src/core/tsi/local_transport_security.cc +41 -74
  1120. data/src/core/tsi/local_transport_security.h +6 -7
  1121. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  1122. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  1123. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  1124. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +7 -7
  1125. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1126. data/src/core/tsi/ssl_transport_security.cc +262 -113
  1127. data/src/core/tsi/ssl_transport_security.h +32 -19
  1128. data/src/core/tsi/ssl_types.h +0 -2
  1129. data/src/core/tsi/transport_security.cc +25 -11
  1130. data/src/core/tsi/transport_security.h +22 -10
  1131. data/src/core/tsi/transport_security_grpc.h +3 -3
  1132. data/src/core/tsi/transport_security_interface.h +35 -4
  1133. data/src/ruby/bin/math_services_pb.rb +5 -5
  1134. data/src/ruby/ext/grpc/extconf.rb +25 -9
  1135. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1136. data/src/ruby/ext/grpc/rb_call.c +17 -8
  1137. data/src/ruby/ext/grpc/rb_call.h +4 -0
  1138. data/src/ruby/ext/grpc/rb_call_credentials.c +62 -17
  1139. data/src/ruby/ext/grpc/rb_channel.c +19 -8
  1140. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1141. data/src/ruby/ext/grpc/rb_channel_credentials.c +24 -5
  1142. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1143. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1144. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1145. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1146. data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
  1147. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1148. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1149. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +54 -18
  1150. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +99 -45
  1151. data/src/ruby/ext/grpc/rb_server.c +19 -6
  1152. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1153. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1154. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1155. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1156. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1157. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1158. data/src/ruby/lib/grpc/errors.rb +103 -42
  1159. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  1160. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  1161. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  1162. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  1163. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  1164. data/src/ruby/lib/grpc/structs.rb +1 -1
  1165. data/src/ruby/lib/grpc/version.rb +1 -1
  1166. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  1167. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  1168. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +51 -0
  1169. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  1170. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +64 -14
  1171. data/src/ruby/spec/call_spec.rb +1 -1
  1172. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  1173. data/src/ruby/spec/channel_spec.rb +17 -6
  1174. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1175. data/src/ruby/spec/client_server_spec.rb +1 -1
  1176. data/src/ruby/spec/debug_message_spec.rb +134 -0
  1177. data/src/ruby/spec/errors_spec.rb +1 -1
  1178. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  1179. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1180. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1181. data/src/ruby/spec/generic/service_spec.rb +2 -0
  1182. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1183. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  1184. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1185. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1186. data/src/ruby/spec/pb/codegen/package_option_spec.rb +29 -7
  1187. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1188. data/src/ruby/spec/server_spec.rb +22 -0
  1189. data/src/ruby/spec/support/services.rb +10 -4
  1190. data/src/ruby/spec/testdata/ca.pem +18 -13
  1191. data/src/ruby/spec/testdata/client.key +26 -14
  1192. data/src/ruby/spec/testdata/client.pem +18 -12
  1193. data/src/ruby/spec/testdata/server1.key +26 -14
  1194. data/src/ruby/spec/testdata/server1.pem +20 -14
  1195. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1196. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  1197. data/third_party/abseil-cpp/absl/base/attributes.h +122 -41
  1198. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1199. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1200. data/third_party/abseil-cpp/absl/base/config.h +97 -26
  1201. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +442 -335
  1202. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1203. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1204. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1205. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  1206. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  1207. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1208. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1209. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1210. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1211. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1212. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1213. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1214. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +33 -30
  1215. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1216. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1217. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1218. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1219. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1220. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  1221. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1222. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1223. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +54 -48
  1224. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1225. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1226. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1227. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1228. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  1229. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1230. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1231. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1232. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1233. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1234. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1235. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1236. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  1237. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1238. data/third_party/abseil-cpp/absl/container/inlined_vector.h +38 -39
  1239. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1240. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1241. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1242. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  1243. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1244. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1245. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +274 -0
  1246. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +322 -0
  1247. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1248. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1249. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1250. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1251. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1252. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +61 -0
  1253. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  1254. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1255. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1256. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1949 -0
  1257. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1258. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  1259. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  1260. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1261. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1262. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +80 -0
  1263. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1264. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1268. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +147 -0
  1269. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1270. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1271. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1272. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1273. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1274. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1275. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1276. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1277. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1278. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1279. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1280. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1281. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1282. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1283. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1284. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1285. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1286. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +70 -0
  1287. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1045 -0
  1288. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1289. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1290. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1291. data/third_party/abseil-cpp/absl/meta/type_traits.h +18 -10
  1292. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1293. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1294. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1295. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1296. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1297. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1298. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1299. data/third_party/abseil-cpp/absl/status/status.cc +452 -0
  1300. data/third_party/abseil-cpp/absl/status/status.h +878 -0
  1301. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1302. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1303. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1304. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1305. data/third_party/abseil-cpp/absl/strings/charconv.cc +7 -7
  1306. data/third_party/abseil-cpp/absl/strings/cord.cc +1953 -0
  1307. data/third_party/abseil-cpp/absl/strings/cord.h +1394 -0
  1308. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1309. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1310. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1311. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1312. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +8 -8
  1313. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1314. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +543 -0
  1315. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1316. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1317. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1318. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1319. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1320. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +150 -64
  1321. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +16 -2
  1322. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +29 -21
  1323. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1324. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1325. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1326. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1327. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1328. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1329. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +22 -6
  1330. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +27 -11
  1331. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1332. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1333. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1334. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1335. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1336. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1337. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1338. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1339. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1340. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1341. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1342. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1343. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1344. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1345. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1346. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1347. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1348. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1349. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1350. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1351. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1352. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1353. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1354. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1355. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1356. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1357. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1358. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1359. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1360. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1361. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1362. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1363. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1364. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1365. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1366. data/third_party/abseil-cpp/absl/time/clock.cc +585 -0
  1367. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1368. data/third_party/abseil-cpp/absl/time/duration.cc +954 -0
  1369. data/third_party/abseil-cpp/absl/time/format.cc +160 -0
  1370. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1371. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +628 -0
  1372. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +386 -0
  1373. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1029 -0
  1378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +113 -0
  1381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +965 -0
  1383. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +137 -0
  1384. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +315 -0
  1385. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1386. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1387. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1388. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1389. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1390. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  1391. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1392. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1393. data/third_party/abseil-cpp/absl/time/time.cc +500 -0
  1394. data/third_party/abseil-cpp/absl/time/time.h +1585 -0
  1395. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1396. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1397. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1398. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1399. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1400. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1401. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1402. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1403. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1404. data/third_party/boringssl-with-bazel/err_data.c +789 -707
  1405. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +57 -52
  1406. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1407. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1408. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1409. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1410. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1411. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1412. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +29 -27
  1413. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1414. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1415. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1416. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1417. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +5 -5
  1418. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1419. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1420. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1421. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -22
  1422. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1423. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1424. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1425. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1426. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1427. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1428. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +196 -0
  1429. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +35 -86
  1430. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +326 -281
  1431. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1432. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1433. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1434. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1435. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1436. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  1437. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1438. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1439. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1440. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1441. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1442. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1443. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1444. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1445. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1446. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1447. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1448. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1449. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1450. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1451. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1452. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  1453. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1457. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1458. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1459. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +18 -7
  1460. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1461. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  1462. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  1463. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +19 -27
  1464. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  1465. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +15 -23
  1466. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  1467. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1468. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1469. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1470. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +19 -43
  1471. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1472. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → dsa/internal.h} +16 -11
  1473. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1474. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1475. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1476. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  1477. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +120 -112
  1478. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1479. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1480. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1481. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  1483. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1484. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +6 -2
  1485. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1486. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1487. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  1488. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1489. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +40 -16
  1490. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  1491. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  1492. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +208 -37
  1496. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1497. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1498. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1499. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +149 -211
  1500. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +11 -0
  1501. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +24 -0
  1502. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1503. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +305 -117
  1504. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +22 -29
  1505. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  1506. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  1507. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -165
  1508. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  1509. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  1510. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  1511. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  1512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  1515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  1516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  1517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  1519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  1520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +117 -91
  1521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +62 -5
  1535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +150 -56
  1536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +49 -129
  1537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  1538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +5 -0
  1539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +116 -66
  1540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +135 -63
  1541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +231 -11
  1543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +86 -113
  1546. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +618 -0
  1547. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1548. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1549. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1550. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1551. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1552. data/third_party/boringssl-with-bazel/src/crypto/mem.c +75 -25
  1553. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1554. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  1555. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1556. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1557. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1558. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1559. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1560. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1561. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  1562. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1563. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1564. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +131 -53
  1565. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1566. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1567. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1568. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
  1569. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -6
  1570. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1572. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +20 -0
  1574. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1575. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1576. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1577. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -28
  1578. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  1579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +318 -0
  1580. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1399 -0
  1581. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +858 -0
  1582. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +11 -1
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +345 -13
  1589. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1591. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +13 -8
  1592. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1593. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -180
  1594. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1595. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1596. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1597. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1598. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +29 -23
  1599. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1600. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +2 -1
  1601. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1602. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +83 -12
  1603. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1604. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1605. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +29 -26
  1606. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +87 -113
  1607. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1608. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +99 -25
  1609. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +15 -15
  1610. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1611. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1612. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -26
  1613. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1614. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +52 -28
  1615. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1616. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +49 -59
  1617. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1618. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1619. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1620. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1621. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1622. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +75 -15
  1623. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1624. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +28 -0
  1626. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  1627. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +6 -4
  1628. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  1629. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  1630. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  1631. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1632. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +42 -32
  1633. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1634. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -28
  1635. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -12
  1636. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1637. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1638. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1639. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1640. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1641. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +27 -36
  1642. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1643. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1644. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +15 -14
  1645. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +128 -42
  1646. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1647. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1648. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1649. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1650. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1651. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1035 -625
  1652. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -176
  1653. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +71 -14
  1654. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +7 -1
  1655. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1656. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1657. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1658. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1659. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +29 -6
  1660. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1661. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1662. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +32 -7
  1663. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1664. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +82 -20
  1665. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +20 -2
  1666. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  1667. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1668. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +39 -0
  1669. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +5 -2
  1670. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +110 -51
  1671. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1672. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1673. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1674. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1675. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1676. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1677. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  1678. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1679. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1680. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +194 -146
  1681. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +33 -8
  1682. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1683. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +8 -19
  1684. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +135 -63
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +697 -194
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +54 -38
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +310 -0
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2071 -826
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -678
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +639 -450
  1693. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1694. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -22
  1695. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  1696. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1697. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  1698. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1699. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +1083 -634
  1700. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +478 -78
  1701. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +122 -56
  1702. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +340 -236
  1703. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +199 -40
  1704. data/third_party/boringssl-with-bazel/src/ssl/internal.h +607 -209
  1705. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +17 -11
  1706. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -4
  1707. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +35 -40
  1708. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +77 -8
  1709. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +11 -12
  1710. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +10 -11
  1711. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1712. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +169 -111
  1713. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +15 -2
  1714. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +179 -111
  1715. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +9 -0
  1716. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1717. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +12 -8
  1718. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1719. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +53 -30
  1720. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +81 -37
  1721. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +411 -235
  1722. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +183 -166
  1723. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +434 -151
  1724. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +65 -25
  1725. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1726. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  1727. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  1728. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  1729. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  1730. data/third_party/re2/re2/bitmap256.h +117 -0
  1731. data/third_party/re2/re2/bitstate.cc +385 -0
  1732. data/third_party/re2/re2/compile.cc +1261 -0
  1733. data/third_party/re2/re2/dfa.cc +2118 -0
  1734. data/third_party/re2/re2/filtered_re2.cc +137 -0
  1735. data/third_party/re2/re2/filtered_re2.h +114 -0
  1736. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1737. data/third_party/re2/re2/nfa.cc +713 -0
  1738. data/third_party/re2/re2/onepass.cc +623 -0
  1739. data/third_party/re2/re2/parse.cc +2483 -0
  1740. data/third_party/re2/re2/perl_groups.cc +119 -0
  1741. data/third_party/re2/re2/pod_array.h +55 -0
  1742. data/third_party/re2/re2/prefilter.cc +711 -0
  1743. data/third_party/re2/re2/prefilter.h +108 -0
  1744. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1745. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1746. data/third_party/re2/re2/prog.cc +1166 -0
  1747. data/third_party/re2/re2/prog.h +455 -0
  1748. data/third_party/re2/re2/re2.cc +1331 -0
  1749. data/third_party/re2/re2/re2.h +1017 -0
  1750. data/third_party/re2/re2/regexp.cc +987 -0
  1751. data/third_party/re2/re2/regexp.h +665 -0
  1752. data/third_party/re2/re2/set.cc +176 -0
  1753. data/third_party/re2/re2/set.h +85 -0
  1754. data/third_party/re2/re2/simplify.cc +665 -0
  1755. data/third_party/re2/re2/sparse_array.h +392 -0
  1756. data/third_party/re2/re2/sparse_set.h +264 -0
  1757. data/third_party/re2/re2/stringpiece.cc +65 -0
  1758. data/third_party/re2/re2/stringpiece.h +210 -0
  1759. data/third_party/re2/re2/tostring.cc +351 -0
  1760. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1761. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1762. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1763. data/third_party/re2/re2/unicode_groups.h +67 -0
  1764. data/third_party/re2/re2/walker-inl.h +246 -0
  1765. data/third_party/re2/util/benchmark.h +156 -0
  1766. data/third_party/re2/util/flags.h +26 -0
  1767. data/third_party/re2/util/logging.h +109 -0
  1768. data/third_party/re2/util/malloc_counter.h +19 -0
  1769. data/third_party/re2/util/mix.h +41 -0
  1770. data/third_party/re2/util/mutex.h +148 -0
  1771. data/third_party/re2/util/pcre.cc +1025 -0
  1772. data/third_party/re2/util/pcre.h +681 -0
  1773. data/third_party/re2/util/rune.cc +260 -0
  1774. data/third_party/re2/util/strutil.cc +149 -0
  1775. data/third_party/re2/util/strutil.h +21 -0
  1776. data/third_party/re2/util/test.h +50 -0
  1777. data/third_party/re2/util/utf.h +44 -0
  1778. data/third_party/re2/util/util.h +42 -0
  1779. data/third_party/upb/upb/decode.c +668 -506
  1780. data/third_party/upb/upb/decode.h +50 -3
  1781. data/third_party/upb/upb/decode_fast.c +1053 -0
  1782. data/third_party/upb/upb/decode_fast.h +153 -0
  1783. data/third_party/upb/upb/decode_internal.h +193 -0
  1784. data/third_party/upb/upb/def.c +2168 -0
  1785. data/third_party/upb/upb/def.h +337 -0
  1786. data/third_party/upb/upb/def.hpp +468 -0
  1787. data/third_party/upb/upb/encode.c +346 -213
  1788. data/third_party/upb/upb/encode.h +56 -4
  1789. data/third_party/upb/upb/msg.c +356 -70
  1790. data/third_party/upb/upb/msg.h +84 -45
  1791. data/third_party/upb/upb/msg_internal.h +687 -0
  1792. data/third_party/upb/upb/port_def.inc +187 -84
  1793. data/third_party/upb/upb/port_undef.inc +47 -7
  1794. data/third_party/upb/upb/reflection.c +400 -0
  1795. data/third_party/upb/upb/reflection.h +196 -0
  1796. data/third_party/upb/upb/reflection.hpp +37 -0
  1797. data/third_party/upb/upb/table.c +265 -336
  1798. data/third_party/upb/upb/{table.int.h → table_internal.h} +73 -229
  1799. data/third_party/upb/upb/text_encode.c +449 -0
  1800. data/third_party/upb/upb/text_encode.h +64 -0
  1801. data/third_party/upb/upb/upb.c +189 -135
  1802. data/third_party/upb/upb/upb.h +153 -150
  1803. data/third_party/upb/upb/upb.hpp +112 -0
  1804. data/third_party/upb/upb/upb_internal.h +58 -0
  1805. data/third_party/xxhash/xxhash.h +5325 -0
  1806. metadata +810 -204
  1807. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  1808. data/src/core/ext/filters/client_channel/parse_address.cc +0 -237
  1809. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1810. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1811. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -181
  1812. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -65
  1813. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1814. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -359
  1815. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -122
  1816. data/src/core/ext/filters/client_channel/service_config.cc +0 -261
  1817. data/src/core/ext/filters/client_channel/service_config.h +0 -193
  1818. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1779
  1819. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1820. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -347
  1821. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -87
  1822. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1823. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -104
  1824. data/src/core/ext/filters/client_channel/xds/xds_client.cc +0 -2174
  1825. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -274
  1826. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +0 -116
  1827. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  1828. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1829. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1830. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1831. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1832. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -246
  1833. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1834. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1835. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1836. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -246
  1837. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -905
  1838. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +0 -27
  1839. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1840. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -73
  1841. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1842. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -34
  1843. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1844. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -54
  1845. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1846. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -390
  1847. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1411
  1848. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -111
  1849. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1850. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -292
  1851. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -847
  1852. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -95
  1853. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1854. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -196
  1855. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1856. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -168
  1857. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -658
  1858. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -35
  1859. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1860. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -132
  1861. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -436
  1862. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -128
  1863. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1864. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +0 -30
  1865. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1866. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -17
  1867. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1868. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -88
  1869. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -258
  1870. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -111
  1871. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1872. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -91
  1873. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1874. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +0 -30
  1875. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1876. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -17
  1877. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1878. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -144
  1879. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1880. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -42
  1881. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1882. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -104
  1883. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -383
  1884. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +0 -29
  1885. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1886. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -17
  1887. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1888. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -793
  1889. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2936
  1890. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -62
  1891. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1892. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -58
  1893. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1894. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1895. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -227
  1896. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1897. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -296
  1898. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1072
  1899. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -32
  1900. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1901. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +0 -23
  1902. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1903. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -52
  1904. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -130
  1905. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -47
  1906. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -108
  1907. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -52
  1908. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1909. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -87
  1910. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1911. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -38
  1912. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1913. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -49
  1914. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1915. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +0 -28
  1916. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -88
  1918. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1919. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1920. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1921. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -144
  1922. data/src/core/lib/gpr/arena.h +0 -47
  1923. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1924. data/src/core/lib/gpr/tls_msvc.h +0 -52
  1925. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1926. data/src/core/lib/gprpp/atomic.h +0 -104
  1927. data/src/core/lib/gprpp/map.h +0 -59
  1928. data/src/core/lib/gprpp/string_view.h +0 -60
  1929. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1930. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1931. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1932. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  1933. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1934. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  1935. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  1936. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  1937. data/src/core/lib/iomgr/tcp_uv.cc +0 -418
  1938. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  1939. data/src/core/lib/iomgr/udp_server.cc +0 -752
  1940. data/src/core/lib/iomgr/udp_server.h +0 -101
  1941. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1942. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1943. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1944. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1945. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  1946. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1947. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  1948. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  1949. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1950. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1951. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1952. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  1953. data/third_party/upb/upb/generated_util.h +0 -105
  1954. data/third_party/upb/upb/port.c +0 -26
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2016 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2016 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  /// Implementation of the gRPC LB policy.
20
18
  ///
@@ -51,19 +49,21 @@
51
49
  /// \see https://github.com/grpc/grpc/blob/master/doc/load-balancing.md for the
52
50
  /// high level design and details.
53
51
 
54
- // With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
55
- // using that endpoint. Because of various transitive includes in uv.h,
56
- // including windows.h on Windows, uv.h must be included before other system
57
- // headers. Therefore, sockaddr.h must always be included first.
58
52
  #include <grpc/support/port_platform.h>
59
53
 
60
- #include "src/core/lib/iomgr/sockaddr.h"
61
- #include "src/core/lib/iomgr/socket_utils.h"
54
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
62
55
 
63
56
  #include <inttypes.h>
64
57
  #include <limits.h>
65
58
  #include <string.h>
66
59
 
60
+ #include "absl/container/inlined_vector.h"
61
+ #include "absl/strings/str_cat.h"
62
+ #include "absl/strings/str_format.h"
63
+ #include "absl/strings/str_join.h"
64
+ #include "absl/strings/strip.h"
65
+ #include "upb/upb.hpp"
66
+
67
67
  #include <grpc/byte_buffer_reader.h>
68
68
  #include <grpc/grpc.h>
69
69
  #include <grpc/support/alloc.h>
@@ -73,33 +73,33 @@
73
73
  #include "src/core/ext/filters/client_channel/client_channel.h"
74
74
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
75
75
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
76
- #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
76
+ #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
77
77
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
78
78
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
79
79
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
80
80
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
81
81
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
82
- #include "src/core/ext/filters/client_channel/parse_address.h"
83
82
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
84
83
  #include "src/core/ext/filters/client_channel/server_address.h"
84
+ #include "src/core/lib/address_utils/parse_address.h"
85
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
85
86
  #include "src/core/lib/backoff/backoff.h"
86
87
  #include "src/core/lib/channel/channel_args.h"
87
88
  #include "src/core/lib/channel/channel_stack.h"
89
+ #include "src/core/lib/channel/channel_stack_builder.h"
90
+ #include "src/core/lib/config/core_configuration.h"
88
91
  #include "src/core/lib/gpr/string.h"
89
92
  #include "src/core/lib/gprpp/manual_constructor.h"
90
93
  #include "src/core/lib/gprpp/memory.h"
91
94
  #include "src/core/lib/gprpp/orphanable.h"
92
95
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
93
- #include "src/core/lib/iomgr/combiner.h"
94
96
  #include "src/core/lib/iomgr/sockaddr.h"
95
- #include "src/core/lib/iomgr/sockaddr_utils.h"
97
+ #include "src/core/lib/iomgr/socket_utils.h"
96
98
  #include "src/core/lib/iomgr/timer.h"
97
- #include "src/core/lib/slice/slice_hash_table.h"
98
99
  #include "src/core/lib/slice/slice_internal.h"
99
100
  #include "src/core/lib/slice/slice_string_helpers.h"
100
101
  #include "src/core/lib/surface/call.h"
101
102
  #include "src/core/lib/surface/channel.h"
102
- #include "src/core/lib/surface/channel_init.h"
103
103
  #include "src/core/lib/transport/static_metadata.h"
104
104
 
105
105
  #define GRPC_GRPCLB_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -107,9 +107,7 @@
107
107
  #define GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS 120
108
108
  #define GRPC_GRPCLB_RECONNECT_JITTER 0.2
109
109
  #define GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS 10000
110
-
111
- #define GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN "grpc.grpclb_address_lb_token"
112
- #define GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS "grpc.grpclb_address_client_stats"
110
+ #define GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS 10000
113
111
 
114
112
  namespace grpc_core {
115
113
 
@@ -118,22 +116,29 @@ TraceFlag grpc_lb_glb_trace(false, "glb");
118
116
  const char kGrpcLbClientStatsMetadataKey[] = "grpclb_client_stats";
119
117
  const char kGrpcLbLbTokenMetadataKey[] = "lb-token";
120
118
 
119
+ const char kGrpcLbAddressAttributeKey[] = "grpclb";
120
+
121
121
  namespace {
122
122
 
123
123
  constexpr char kGrpclb[] = "grpclb";
124
124
 
125
125
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
126
126
  public:
127
- explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
128
- : child_policy_(std::move(child_policy)) {}
127
+ GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
128
+ std::string service_name)
129
+ : child_policy_(std::move(child_policy)),
130
+ service_name_(std::move(service_name)) {}
129
131
  const char* name() const override { return kGrpclb; }
130
132
 
131
133
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
132
134
  return child_policy_;
133
135
  }
134
136
 
137
+ const std::string& service_name() const { return service_name_; }
138
+
135
139
  private:
136
140
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
141
+ std::string service_name_;
137
142
  };
138
143
 
139
144
  class GrpcLb : public LoadBalancingPolicy {
@@ -151,7 +156,7 @@ class GrpcLb : public LoadBalancingPolicy {
151
156
  public:
152
157
  explicit BalancerCallState(
153
158
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy);
154
- ~BalancerCallState();
159
+ ~BalancerCallState() override;
155
160
 
156
161
  // It's the caller's responsibility to ensure that Orphan() is called from
157
162
  // inside the combiner.
@@ -172,17 +177,17 @@ class GrpcLb : public LoadBalancingPolicy {
172
177
  void ScheduleNextClientLoadReportLocked();
173
178
  void SendClientLoadReportLocked();
174
179
 
175
- static void MaybeSendClientLoadReport(void* arg, grpc_error* error);
176
- static void ClientLoadReportDone(void* arg, grpc_error* error);
177
- static void OnInitialRequestSent(void* arg, grpc_error* error);
178
- static void OnBalancerMessageReceived(void* arg, grpc_error* error);
179
- static void OnBalancerStatusReceived(void* arg, grpc_error* error);
180
+ static void MaybeSendClientLoadReport(void* arg, grpc_error_handle error);
181
+ static void ClientLoadReportDone(void* arg, grpc_error_handle error);
182
+ static void OnInitialRequestSent(void* arg, grpc_error_handle error);
183
+ static void OnBalancerMessageReceived(void* arg, grpc_error_handle error);
184
+ static void OnBalancerStatusReceived(void* arg, grpc_error_handle error);
180
185
 
181
- static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
182
- static void ClientLoadReportDoneLocked(void* arg, grpc_error* error);
183
- static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
184
- static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
185
- static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
186
+ void MaybeSendClientLoadReportLocked(grpc_error_handle error);
187
+ void ClientLoadReportDoneLocked(grpc_error_handle error);
188
+ void OnInitialRequestSentLocked();
189
+ void OnBalancerMessageReceivedLocked();
190
+ void OnBalancerStatusReceivedLocked(grpc_error_handle error);
186
191
 
187
192
  // The owning LB policy.
188
193
  RefCountedPtr<LoadBalancingPolicy> grpclb_policy_;
@@ -222,6 +227,67 @@ class GrpcLb : public LoadBalancingPolicy {
222
227
  grpc_closure client_load_report_closure_;
223
228
  };
224
229
 
230
+ class SubchannelWrapper : public DelegatingSubchannel {
231
+ public:
232
+ SubchannelWrapper(RefCountedPtr<SubchannelInterface> subchannel,
233
+ RefCountedPtr<GrpcLb> lb_policy, std::string lb_token,
234
+ RefCountedPtr<GrpcLbClientStats> client_stats)
235
+ : DelegatingSubchannel(std::move(subchannel)),
236
+ lb_policy_(std::move(lb_policy)),
237
+ lb_token_(std::move(lb_token)),
238
+ client_stats_(std::move(client_stats)) {}
239
+
240
+ ~SubchannelWrapper() override {
241
+ if (!lb_policy_->shutting_down_) {
242
+ lb_policy_->CacheDeletedSubchannelLocked(wrapped_subchannel());
243
+ }
244
+ }
245
+
246
+ const std::string& lb_token() const { return lb_token_; }
247
+ GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
248
+
249
+ private:
250
+ RefCountedPtr<GrpcLb> lb_policy_;
251
+ std::string lb_token_;
252
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
253
+ };
254
+
255
+ class TokenAndClientStatsAttribute
256
+ : public ServerAddress::AttributeInterface {
257
+ public:
258
+ TokenAndClientStatsAttribute(std::string lb_token,
259
+ RefCountedPtr<GrpcLbClientStats> client_stats)
260
+ : lb_token_(std::move(lb_token)),
261
+ client_stats_(std::move(client_stats)) {}
262
+
263
+ std::unique_ptr<AttributeInterface> Copy() const override {
264
+ return absl::make_unique<TokenAndClientStatsAttribute>(lb_token_,
265
+ client_stats_);
266
+ }
267
+
268
+ int Cmp(const AttributeInterface* other_base) const override {
269
+ const TokenAndClientStatsAttribute* other =
270
+ static_cast<const TokenAndClientStatsAttribute*>(other_base);
271
+ int r = lb_token_.compare(other->lb_token_);
272
+ if (r != 0) return r;
273
+ return QsortCompare(client_stats_.get(), other->client_stats_.get());
274
+ }
275
+
276
+ std::string ToString() const override {
277
+ return absl::StrFormat("lb_token=\"%s\" client_stats=%p", lb_token_,
278
+ client_stats_.get());
279
+ }
280
+
281
+ const std::string& lb_token() const { return lb_token_; }
282
+ RefCountedPtr<GrpcLbClientStats> client_stats() const {
283
+ return client_stats_;
284
+ }
285
+
286
+ private:
287
+ std::string lb_token_;
288
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
289
+ };
290
+
225
291
  class Serverlist : public RefCounted<Serverlist> {
226
292
  public:
227
293
  // Takes ownership of serverlist.
@@ -233,7 +299,7 @@ class GrpcLb : public LoadBalancingPolicy {
233
299
  const std::vector<GrpcLbServer>& serverlist() const { return serverlist_; }
234
300
 
235
301
  // Returns a text representation suitable for logging.
236
- grpc_core::UniquePtr<char> AsText() const;
302
+ std::string AsText() const;
237
303
 
238
304
  // Extracts all non-drop entries into a ServerAddressList.
239
305
  ServerAddressList GetServerAddressList(
@@ -247,37 +313,32 @@ class GrpcLb : public LoadBalancingPolicy {
247
313
  // should not be dropped.
248
314
  //
249
315
  // Note: This is called from the picker, so it will be invoked in
250
- // the channel's data plane combiner, NOT the control plane
251
- // combiner. It should not be accessed by any other part of the LB
316
+ // the channel's data plane mutex, NOT the control plane
317
+ // work_serializer. It should not be accessed by any other part of the LB
252
318
  // policy.
253
319
  const char* ShouldDrop();
254
320
 
255
321
  private:
256
322
  std::vector<GrpcLbServer> serverlist_;
257
323
 
258
- // Guarded by the channel's data plane combiner, NOT the control
259
- // plane combiner. It should not be accessed by anything but the
324
+ // Guarded by the channel's data plane mutex, NOT the control
325
+ // plane work_serializer. It should not be accessed by anything but the
260
326
  // picker via the ShouldDrop() method.
261
327
  size_t drop_index_ = 0;
262
328
  };
263
329
 
264
330
  class Picker : public SubchannelPicker {
265
331
  public:
266
- Picker(GrpcLb* parent, RefCountedPtr<Serverlist> serverlist,
332
+ Picker(RefCountedPtr<Serverlist> serverlist,
267
333
  std::unique_ptr<SubchannelPicker> child_picker,
268
334
  RefCountedPtr<GrpcLbClientStats> client_stats)
269
- : parent_(parent),
270
- serverlist_(std::move(serverlist)),
335
+ : serverlist_(std::move(serverlist)),
271
336
  child_picker_(std::move(child_picker)),
272
337
  client_stats_(std::move(client_stats)) {}
273
338
 
274
339
  PickResult Pick(PickArgs args) override;
275
340
 
276
341
  private:
277
- // Storing the address for logging, but not holding a ref.
278
- // DO NOT DEFERENCE!
279
- GrpcLb* parent_;
280
-
281
342
  // Serverlist to be used for determining drops.
282
343
  RefCountedPtr<Serverlist> serverlist_;
283
344
 
@@ -291,39 +352,72 @@ class GrpcLb : public LoadBalancingPolicy {
291
352
  : parent_(std::move(parent)) {}
292
353
 
293
354
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
294
- const grpc_channel_args& args) override;
295
- void UpdateState(grpc_connectivity_state state,
355
+ ServerAddress address, const grpc_channel_args& args) override;
356
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
296
357
  std::unique_ptr<SubchannelPicker> picker) override;
297
358
  void RequestReresolution() override;
298
- void AddTraceEvent(TraceSeverity severity, StringView message) override;
359
+ absl::string_view GetAuthority() override;
360
+ void AddTraceEvent(TraceSeverity severity,
361
+ absl::string_view message) override;
299
362
 
300
363
  private:
301
364
  RefCountedPtr<GrpcLb> parent_;
302
365
  };
303
366
 
304
- ~GrpcLb();
367
+ class StateWatcher : public AsyncConnectivityStateWatcherInterface {
368
+ public:
369
+ explicit StateWatcher(RefCountedPtr<GrpcLb> parent)
370
+ : AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
371
+ parent_(std::move(parent)) {}
372
+
373
+ ~StateWatcher() override { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
374
+
375
+ private:
376
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
377
+ const absl::Status& status) override {
378
+ if (parent_->fallback_at_startup_checks_pending_ &&
379
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
380
+ // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
381
+ // fallback mode immediately.
382
+ gpr_log(GPR_INFO,
383
+ "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
384
+ "entering fallback mode",
385
+ parent_.get(), status.ToString().c_str());
386
+ parent_->fallback_at_startup_checks_pending_ = false;
387
+ grpc_timer_cancel(&parent_->lb_fallback_timer_);
388
+ parent_->fallback_mode_ = true;
389
+ parent_->CreateOrUpdateChildPolicyLocked();
390
+ // Cancel the watch, since we don't care about the channel state once we
391
+ // go into fallback mode.
392
+ parent_->CancelBalancerChannelConnectivityWatchLocked();
393
+ }
394
+ }
395
+
396
+ RefCountedPtr<GrpcLb> parent_;
397
+ };
398
+
399
+ ~GrpcLb() override;
305
400
 
306
401
  void ShutdownLocked() override;
307
402
 
308
403
  // Helper functions used in UpdateLocked().
309
404
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
310
405
  const grpc_channel_args& args);
311
- static void OnBalancerChannelConnectivityChanged(void* arg,
312
- grpc_error* error);
313
- static void OnBalancerChannelConnectivityChangedLocked(void* arg,
314
- grpc_error* error);
406
+ static ServerAddressList AddNullLbTokenToAddresses(
407
+ const ServerAddressList& addresses);
408
+
315
409
  void CancelBalancerChannelConnectivityWatchLocked();
316
410
 
317
411
  // Methods for dealing with fallback state.
318
412
  void MaybeEnterFallbackModeAfterStartup();
319
- static void OnFallbackTimer(void* arg, grpc_error* error);
320
- static void OnFallbackTimerLocked(void* arg, grpc_error* error);
413
+ static void OnFallbackTimer(void* arg, grpc_error_handle error);
414
+ void OnFallbackTimerLocked(grpc_error_handle error);
321
415
 
322
416
  // Methods for dealing with the balancer call.
323
417
  void StartBalancerCallLocked();
324
418
  void StartBalancerCallRetryTimerLocked();
325
- static void OnBalancerCallRetryTimer(void* arg, grpc_error* error);
326
- static void OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error);
419
+ static void OnBalancerCallRetryTimer(void* arg, grpc_error_handle error);
420
+ void OnBalancerCallRetryTimerLocked(grpc_error_handle error);
327
421
 
328
422
  // Methods for dealing with the child policy.
329
423
  grpc_channel_args* CreateChildPolicyArgsLocked(
@@ -332,8 +426,17 @@ class GrpcLb : public LoadBalancingPolicy {
332
426
  const grpc_channel_args* args);
333
427
  void CreateOrUpdateChildPolicyLocked();
334
428
 
429
+ // Subchannel caching.
430
+ void CacheDeletedSubchannelLocked(
431
+ RefCountedPtr<SubchannelInterface> subchannel);
432
+ void StartSubchannelCacheTimerLocked();
433
+ static void OnSubchannelCacheTimer(void* arg, grpc_error_handle error);
434
+ void OnSubchannelCacheTimerLocked(grpc_error_handle error);
435
+
335
436
  // Who the client is trying to communicate with.
336
- const char* server_name_ = nullptr;
437
+ std::string server_name_;
438
+ // Configurations for the policy.
439
+ RefCountedPtr<GrpcLbConfig> config_;
337
440
 
338
441
  // Current channel args from the resolver.
339
442
  grpc_channel_args* args_ = nullptr;
@@ -343,8 +446,11 @@ class GrpcLb : public LoadBalancingPolicy {
343
446
 
344
447
  // The channel for communicating with the LB server.
345
448
  grpc_channel* lb_channel_ = nullptr;
449
+ StateWatcher* watcher_ = nullptr;
346
450
  // Response generator to inject address updates into lb_channel_.
347
451
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
452
+ // Parent channelz node.
453
+ RefCountedPtr<channelz::ChannelNode> parent_channelz_node_;
348
454
 
349
455
  // The data associated with the current LB call. It holds a ref to this LB
350
456
  // policy. It's initialized every time we query for backends. It's reset to
@@ -353,7 +459,7 @@ class GrpcLb : public LoadBalancingPolicy {
353
459
  // contains a non-NULL lb_call_.
354
460
  OrphanablePtr<BalancerCallState> lb_calld_;
355
461
  // Timeout in milliseconds for the LB call. 0 means no deadline.
356
- int lb_call_timeout_ms_ = 0;
462
+ const int lb_call_timeout_ms_ = 0;
357
463
  // Balancer call retry state.
358
464
  BackOff lb_call_backoff_;
359
465
  bool retry_timer_callback_pending_ = false;
@@ -371,19 +477,24 @@ class GrpcLb : public LoadBalancingPolicy {
371
477
  // State for fallback-at-startup checks.
372
478
  // Timeout after startup after which we will go into fallback mode if
373
479
  // we have not received a serverlist from the balancer.
374
- int fallback_at_startup_timeout_ = 0;
480
+ const int fallback_at_startup_timeout_ = 0;
375
481
  bool fallback_at_startup_checks_pending_ = false;
376
482
  grpc_timer lb_fallback_timer_;
377
483
  grpc_closure lb_on_fallback_;
378
- grpc_connectivity_state lb_channel_connectivity_ = GRPC_CHANNEL_IDLE;
379
- grpc_closure lb_channel_on_connectivity_changed_;
380
484
 
381
485
  // The child policy to use for the backends.
382
486
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
383
- // The child policy config.
384
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
385
487
  // Child policy in state READY.
386
488
  bool child_policy_ready_ = false;
489
+
490
+ // Deleted subchannel caching.
491
+ const grpc_millis subchannel_cache_interval_ms_;
492
+ std::map<grpc_millis /*deletion time*/,
493
+ std::vector<RefCountedPtr<SubchannelInterface>>>
494
+ cached_subchannels_;
495
+ grpc_timer subchannel_cache_timer_;
496
+ grpc_closure on_subchannel_cache_timer_;
497
+ bool subchannel_cache_timer_pending_ = false;
387
498
  };
388
499
 
389
500
  //
@@ -397,7 +508,7 @@ bool GrpcLb::Serverlist::operator==(const Serverlist& other) const {
397
508
  void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
398
509
  memset(addr, 0, sizeof(*addr));
399
510
  if (server.drop) return;
400
- const uint16_t netorder_port = grpc_htons((uint16_t)server.port);
511
+ const uint16_t netorder_port = grpc_htons(static_cast<uint16_t>(server.port));
401
512
  /* the addresses are given in binary format (a in(6)_addr struct) in
402
513
  * server->ip_address.bytes. */
403
514
  if (server.ip_size == 4) {
@@ -408,91 +519,49 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
408
519
  addr4->sin_port = netorder_port;
409
520
  } else if (server.ip_size == 16) {
410
521
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
411
- grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
522
+ grpc_sockaddr_in6* addr6 =
523
+ reinterpret_cast<grpc_sockaddr_in6*>(&addr->addr);
412
524
  addr6->sin6_family = GRPC_AF_INET6;
413
525
  memcpy(&addr6->sin6_addr, server.ip_addr, server.ip_size);
414
526
  addr6->sin6_port = netorder_port;
415
527
  }
416
528
  }
417
529
 
418
- grpc_core::UniquePtr<char> GrpcLb::Serverlist::AsText() const {
419
- gpr_strvec entries;
420
- gpr_strvec_init(&entries);
530
+ std::string GrpcLb::Serverlist::AsText() const {
531
+ std::vector<std::string> entries;
421
532
  for (size_t i = 0; i < serverlist_.size(); ++i) {
422
533
  const GrpcLbServer& server = serverlist_[i];
423
- char* ipport;
534
+ std::string ipport;
424
535
  if (server.drop) {
425
- ipport = gpr_strdup("(drop)");
536
+ ipport = "(drop)";
426
537
  } else {
427
538
  grpc_resolved_address addr;
428
539
  ParseServer(server, &addr);
429
- grpc_sockaddr_to_string(&ipport, &addr, false);
540
+ ipport = grpc_sockaddr_to_string(&addr, false);
430
541
  }
431
- char* entry;
432
- gpr_asprintf(&entry, " %" PRIuPTR ": %s token=%s\n", i, ipport,
433
- server.load_balance_token);
434
- gpr_free(ipport);
435
- gpr_strvec_add(&entries, entry);
542
+ entries.push_back(absl::StrFormat(" %" PRIuPTR ": %s token=%s\n", i,
543
+ ipport, server.load_balance_token));
436
544
  }
437
- grpc_core::UniquePtr<char> result(gpr_strvec_flatten(&entries, nullptr));
438
- gpr_strvec_destroy(&entries);
439
- return result;
440
- }
441
-
442
- // vtables for channel args for LB token and client stats.
443
- void* lb_token_copy(void* token) {
444
- return gpr_strdup(static_cast<char*>(token));
445
- }
446
- void lb_token_destroy(void* token) { gpr_free(token); }
447
- void* client_stats_copy(void* p) {
448
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
449
- client_stats->Ref().release();
450
- return p;
451
- }
452
- void client_stats_destroy(void* p) {
453
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
454
- client_stats->Unref();
455
- }
456
- int equal_cmp(void* /*p1*/, void* /*p2*/) {
457
- // Always indicate a match, since we don't want this channel arg to
458
- // affect the subchannel's key in the index.
459
- // TODO(roth): Is this right? This does prevent us from needlessly
460
- // recreating the subchannel whenever the LB token or client stats
461
- // changes (i.e., when the balancer call is terminated and reestablished).
462
- // However, it means that we don't actually recreate the subchannel,
463
- // which means that we won't ever switch over to using the new LB
464
- // token or client stats. A better approach might be to find somewhere
465
- // other than the subchannel args to store the LB token and client
466
- // stats. They could be stored in a map and then looked up for each
467
- // call. Or we could do something more complicated whereby
468
- // we create our own subchannel wrapper to store them, although that would
469
- // involve a lot of refcounting overhead.
470
- // Given that we're trying to move from grpclb to xds at this point,
471
- // and that no one has actually reported any problems with this, we
472
- // probably won't bother fixing this at this point.
473
- return 0;
545
+ return absl::StrJoin(entries, "");
474
546
  }
475
- const grpc_arg_pointer_vtable lb_token_arg_vtable = {
476
- lb_token_copy, lb_token_destroy, equal_cmp};
477
- const grpc_arg_pointer_vtable client_stats_arg_vtable = {
478
- client_stats_copy, client_stats_destroy, equal_cmp};
479
547
 
480
548
  bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
481
549
  if (server.drop) return false;
482
550
  if (GPR_UNLIKELY(server.port >> 16 != 0)) {
483
551
  if (log) {
484
552
  gpr_log(GPR_ERROR,
485
- "Invalid port '%d' at index %lu of serverlist. Ignoring.",
486
- server.port, (unsigned long)idx);
553
+ "Invalid port '%d' at index %" PRIuPTR
554
+ " of serverlist. Ignoring.",
555
+ server.port, idx);
487
556
  }
488
557
  return false;
489
558
  }
490
559
  if (GPR_UNLIKELY(server.ip_size != 4 && server.ip_size != 16)) {
491
560
  if (log) {
492
561
  gpr_log(GPR_ERROR,
493
- "Expected IP to be 4 or 16 bytes, got %d at index %lu of "
494
- "serverlist. Ignoring",
495
- server.ip_size, (unsigned long)idx);
562
+ "Expected IP to be 4 or 16 bytes, got %d at index %" PRIuPTR
563
+ " of serverlist. Ignoring",
564
+ server.ip_size, idx);
496
565
  }
497
566
  return false;
498
567
  }
@@ -502,6 +571,8 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
502
571
  // Returns addresses extracted from the serverlist.
503
572
  ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
504
573
  GrpcLbClientStats* client_stats) const {
574
+ RefCountedPtr<GrpcLbClientStats> stats;
575
+ if (client_stats != nullptr) stats = client_stats->Ref();
505
576
  ServerAddressList addresses;
506
577
  for (size_t i = 0; i < serverlist_.size(); ++i) {
507
578
  const GrpcLbServer& server = serverlist_[i];
@@ -510,36 +581,23 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
510
581
  grpc_resolved_address addr;
511
582
  ParseServer(server, &addr);
512
583
  // LB token processing.
513
- char lb_token[GPR_ARRAY_SIZE(server.load_balance_token) + 1];
514
- if (server.load_balance_token[0] != 0) {
515
- const size_t lb_token_max_length =
516
- GPR_ARRAY_SIZE(server.load_balance_token);
517
- const size_t lb_token_length =
518
- strnlen(server.load_balance_token, lb_token_max_length);
519
- memcpy(lb_token, server.load_balance_token, lb_token_length);
520
- lb_token[lb_token_length] = '\0';
521
- } else {
522
- char* uri = grpc_sockaddr_to_uri(&addr);
584
+ const size_t lb_token_length = strnlen(
585
+ server.load_balance_token, GPR_ARRAY_SIZE(server.load_balance_token));
586
+ std::string lb_token(server.load_balance_token, lb_token_length);
587
+ if (lb_token.empty()) {
523
588
  gpr_log(GPR_INFO,
524
589
  "Missing LB token for backend address '%s'. The empty token will "
525
590
  "be used instead",
526
- uri);
527
- gpr_free(uri);
528
- lb_token[0] = '\0';
591
+ grpc_sockaddr_to_uri(&addr).c_str());
529
592
  }
593
+ // Attach attribute to address containing LB token and stats object.
594
+ std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
595
+ attributes;
596
+ attributes[kGrpcLbAddressAttributeKey] =
597
+ absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
598
+ stats);
530
599
  // Add address.
531
- InlinedVector<grpc_arg, 2> args_to_add;
532
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
533
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
534
- &lb_token_arg_vtable));
535
- if (client_stats != nullptr) {
536
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
537
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS), client_stats,
538
- &client_stats_arg_vtable));
539
- }
540
- grpc_channel_args* args = grpc_channel_args_copy_and_add(
541
- nullptr, args_to_add.data(), args_to_add.size());
542
- addresses.emplace_back(addr, args);
600
+ addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
543
601
  }
544
602
  return addresses;
545
603
  }
@@ -564,9 +622,9 @@ const char* GrpcLb::Serverlist::ShouldDrop() {
564
622
  //
565
623
 
566
624
  GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
567
- PickResult result;
568
625
  // Check if we should drop the call.
569
- const char* drop_token = serverlist_->ShouldDrop();
626
+ const char* drop_token =
627
+ serverlist_ == nullptr ? nullptr : serverlist_->ShouldDrop();
570
628
  if (drop_token != nullptr) {
571
629
  // Update client load reporting stats to indicate the number of
572
630
  // dropped calls. Note that we have to do this here instead of in
@@ -576,43 +634,42 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
576
634
  if (client_stats_ != nullptr) {
577
635
  client_stats_->AddCallDropped(drop_token);
578
636
  }
579
- result.type = PickResult::PICK_COMPLETE;
580
- return result;
637
+ return PickResult::Drop(
638
+ absl::UnavailableError("drop directed by grpclb balancer"));
581
639
  }
582
640
  // Forward pick to child policy.
583
- result = child_picker_->Pick(args);
641
+ PickResult result = child_picker_->Pick(args);
584
642
  // If pick succeeded, add LB token to initial metadata.
585
- if (result.type == PickResult::PICK_COMPLETE &&
586
- result.subchannel != nullptr) {
643
+ auto* complete_pick = absl::get_if<PickResult::Complete>(&result.result);
644
+ if (complete_pick != nullptr) {
645
+ const SubchannelWrapper* subchannel_wrapper =
646
+ static_cast<SubchannelWrapper*>(complete_pick->subchannel.get());
587
647
  // Encode client stats object into metadata for use by
588
648
  // client_load_reporting filter.
589
- const grpc_arg* arg =
590
- grpc_channel_args_find(result.subchannel->channel_args(),
591
- GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS);
592
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
593
- arg->value.pointer.p != nullptr) {
594
- GrpcLbClientStats* client_stats =
595
- static_cast<GrpcLbClientStats*>(arg->value.pointer.p);
649
+ GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
650
+ if (client_stats != nullptr) {
596
651
  client_stats->Ref().release(); // Ref passed via metadata.
597
652
  // The metadata value is a hack: we pretend the pointer points to
598
653
  // a string and rely on the client_load_reporting filter to know
599
654
  // how to interpret it.
600
655
  args.initial_metadata->Add(
601
656
  kGrpcLbClientStatsMetadataKey,
602
- StringView(reinterpret_cast<const char*>(client_stats), 0));
657
+ absl::string_view(reinterpret_cast<const char*>(client_stats), 0));
603
658
  // Update calls-started.
604
659
  client_stats->AddCallStarted();
605
660
  }
606
661
  // Encode the LB token in metadata.
607
- arg = grpc_channel_args_find(result.subchannel->channel_args(),
608
- GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN);
609
- if (arg == nullptr) {
610
- gpr_log(GPR_ERROR, "[grpclb %p picker %p] No LB token for subchannel %p",
611
- parent_, this, result.subchannel.get());
612
- abort();
662
+ // Create a new copy on the call arena, since the subchannel list
663
+ // may get refreshed between when we return this pick and when the
664
+ // initial metadata goes out on the wire.
665
+ if (!subchannel_wrapper->lb_token().empty()) {
666
+ char* lb_token = static_cast<char*>(
667
+ args.call_state->Alloc(subchannel_wrapper->lb_token().size() + 1));
668
+ strcpy(lb_token, subchannel_wrapper->lb_token().c_str());
669
+ args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey, lb_token);
613
670
  }
614
- args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey,
615
- static_cast<char*>(arg->value.pointer.p));
671
+ // Unwrap subchannel to pass up to the channel.
672
+ complete_pick->subchannel = subchannel_wrapper->wrapped_subchannel();
616
673
  }
617
674
  return result;
618
675
  }
@@ -622,62 +679,65 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
622
679
  //
623
680
 
624
681
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
625
- const grpc_channel_args& args) {
682
+ ServerAddress address, const grpc_channel_args& args) {
626
683
  if (parent_->shutting_down_) return nullptr;
627
- return parent_->channel_control_helper()->CreateSubchannel(args);
684
+ const TokenAndClientStatsAttribute* attribute =
685
+ static_cast<const TokenAndClientStatsAttribute*>(
686
+ address.GetAttribute(kGrpcLbAddressAttributeKey));
687
+ if (attribute == nullptr) {
688
+ gpr_log(GPR_ERROR,
689
+ "[grpclb %p] no TokenAndClientStatsAttribute for address %p",
690
+ parent_.get(), address.ToString().c_str());
691
+ abort();
692
+ }
693
+ std::string lb_token = attribute->lb_token();
694
+ RefCountedPtr<GrpcLbClientStats> client_stats = attribute->client_stats();
695
+ return MakeRefCounted<SubchannelWrapper>(
696
+ parent_->channel_control_helper()->CreateSubchannel(std::move(address),
697
+ args),
698
+ parent_->Ref(DEBUG_LOCATION, "SubchannelWrapper"), std::move(lb_token),
699
+ std::move(client_stats));
628
700
  }
629
701
 
630
702
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
703
+ const absl::Status& status,
631
704
  std::unique_ptr<SubchannelPicker> picker) {
632
705
  if (parent_->shutting_down_) return;
633
706
  // Record whether child policy reports READY.
634
707
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
635
708
  // Enter fallback mode if needed.
636
709
  parent_->MaybeEnterFallbackModeAfterStartup();
637
- // There are three cases to consider here:
638
- // 1. We're in fallback mode. In this case, we're always going to use
639
- // the child policy's result, so we pass its picker through as-is.
640
- // 2. The serverlist contains only drop entries. In this case, we
641
- // want to use our own picker so that we can return the drops.
642
- // 3. Not in fallback mode and serverlist is not all drops (i.e., it
643
- // may be empty or contain at least one backend address). There are
644
- // two sub-cases:
645
- // a. The child policy is reporting state READY. In this case, we wrap
646
- // the child's picker in our own, so that we can handle drops and LB
647
- // token metadata for each pick.
648
- // b. The child policy is reporting a state other than READY. In this
649
- // case, we don't want to use our own picker, because we don't want
650
- // to process drops for picks that yield a QUEUE result; this would
651
- // result in dropping too many calls, since we will see the
652
- // queued picks multiple times, and we'd consider each one a
653
- // separate call for the drop calculation.
654
- //
655
- // Cases 1 and 3b: return picker from the child policy as-is.
656
- if (parent_->serverlist_ == nullptr ||
657
- (!parent_->serverlist_->ContainsAllDropEntries() &&
658
- state != GRPC_CHANNEL_READY)) {
659
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
660
- gpr_log(GPR_INFO,
661
- "[grpclb %p helper %p] state=%s passing child picker %p as-is",
662
- parent_.get(), this, ConnectivityStateName(state), picker.get());
663
- }
664
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
665
- return;
666
- }
667
- // Cases 2 and 3a: wrap picker from the child in our own picker.
668
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
669
- gpr_log(GPR_INFO, "[grpclb %p helper %p] state=%s wrapping child picker %p",
670
- parent_.get(), this, ConnectivityStateName(state), picker.get());
710
+ // We pass the serverlist to the picker so that it can handle drops.
711
+ // However, we don't want to handle drops in the case where the child
712
+ // policy is reporting a state other than READY (unless we are
713
+ // dropping *all* calls), because we don't want to process drops for picks
714
+ // that yield a QUEUE result; this would result in dropping too many calls,
715
+ // since we will see the queued picks multiple times, and we'd consider each
716
+ // one a separate call for the drop calculation. So in this case, we pass
717
+ // a null serverlist to the picker, which tells it not to do drops.
718
+ RefCountedPtr<Serverlist> serverlist;
719
+ if (state == GRPC_CHANNEL_READY ||
720
+ (parent_->serverlist_ != nullptr &&
721
+ parent_->serverlist_->ContainsAllDropEntries())) {
722
+ serverlist = parent_->serverlist_;
671
723
  }
672
724
  RefCountedPtr<GrpcLbClientStats> client_stats;
673
725
  if (parent_->lb_calld_ != nullptr &&
674
726
  parent_->lb_calld_->client_stats() != nullptr) {
675
727
  client_stats = parent_->lb_calld_->client_stats()->Ref();
676
728
  }
729
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
730
+ gpr_log(GPR_INFO,
731
+ "[grpclb %p helper %p] state=%s (%s) wrapping child "
732
+ "picker %p (serverlist=%p, client_stats=%p)",
733
+ parent_.get(), this, ConnectivityStateName(state),
734
+ status.ToString().c_str(), picker.get(), serverlist.get(),
735
+ client_stats.get());
736
+ }
677
737
  parent_->channel_control_helper()->UpdateState(
678
- state,
679
- absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
680
- std::move(picker), std::move(client_stats)));
738
+ state, status,
739
+ absl::make_unique<Picker>(std::move(serverlist), std::move(picker),
740
+ std::move(client_stats)));
681
741
  }
682
742
 
683
743
  void GrpcLb::Helper::RequestReresolution() {
@@ -692,7 +752,12 @@ void GrpcLb::Helper::RequestReresolution() {
692
752
  }
693
753
  }
694
754
 
695
- void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
755
+ absl::string_view GrpcLb::Helper::GetAuthority() {
756
+ return parent_->channel_control_helper()->GetAuthority();
757
+ }
758
+
759
+ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
760
+ absl::string_view message) {
696
761
  if (parent_->shutting_down_) return;
697
762
  parent_->channel_control_helper()->AddTraceEvent(severity, message);
698
763
  }
@@ -703,15 +768,25 @@ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity, StringView message) {
703
768
 
704
769
  GrpcLb::BalancerCallState::BalancerCallState(
705
770
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy)
706
- : InternallyRefCounted<BalancerCallState>(&grpc_lb_glb_trace),
771
+ : InternallyRefCounted<BalancerCallState>(
772
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace) ? "BalancerCallState"
773
+ : nullptr),
707
774
  grpclb_policy_(std::move(parent_grpclb_policy)) {
708
775
  GPR_ASSERT(grpclb_policy_ != nullptr);
709
776
  GPR_ASSERT(!grpclb_policy()->shutting_down_);
710
777
  // Init the LB call. Note that the LB call will progress every time there's
711
778
  // activity in grpclb_policy_->interested_parties(), which is comprised of
712
779
  // the polling entities from client_channel.
713
- GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
714
- GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
780
+ GPR_ASSERT(!grpclb_policy()->server_name_.empty());
781
+ // Closure Initialization
782
+ GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
783
+ grpc_schedule_on_exec_ctx);
784
+ GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
785
+ OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
786
+ GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
787
+ this, grpc_schedule_on_exec_ctx);
788
+ GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
789
+ this, grpc_schedule_on_exec_ctx);
715
790
  const grpc_millis deadline =
716
791
  grpclb_policy()->lb_call_timeout_ms_ == 0
717
792
  ? GRPC_MILLIS_INF_FUTURE
@@ -723,8 +798,11 @@ GrpcLb::BalancerCallState::BalancerCallState(
723
798
  nullptr, deadline, nullptr);
724
799
  // Init the LB call request payload.
725
800
  upb::Arena arena;
726
- grpc_slice request_payload_slice =
727
- GrpcLbRequestCreate(grpclb_policy()->server_name_, arena.ptr());
801
+ grpc_slice request_payload_slice = GrpcLbRequestCreate(
802
+ grpclb_policy()->config_->service_name().empty()
803
+ ? grpclb_policy()->server_name_.c_str()
804
+ : grpclb_policy()->config_->service_name().c_str(),
805
+ arena.ptr());
728
806
  send_message_payload_ =
729
807
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
730
808
  grpc_slice_unref_internal(request_payload_slice);
@@ -749,7 +827,7 @@ void GrpcLb::BalancerCallState::Orphan() {
749
827
  // lb_on_balancer_status_received_ will complete the cancellation and clean
750
828
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
751
829
  // call, then the following cancellation will be a no-op.
752
- grpc_call_cancel(lb_call_, nullptr);
830
+ grpc_call_cancel_internal(lb_call_);
753
831
  if (client_load_report_timer_callback_pending_) {
754
832
  grpc_timer_cancel(&client_load_report_timer_);
755
833
  }
@@ -788,10 +866,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
788
866
  // with the callback.
789
867
  auto self = Ref(DEBUG_LOCATION, "on_initial_request_sent");
790
868
  self.release();
791
- GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
792
- grpc_schedule_on_exec_ctx);
793
- call_error = grpc_call_start_batch_and_execute(
794
- lb_call_, ops, (size_t)(op - ops), &lb_on_initial_request_sent_);
869
+ call_error = grpc_call_start_batch_and_execute(lb_call_, ops,
870
+ static_cast<size_t>(op - ops),
871
+ &lb_on_initial_request_sent_);
795
872
  GPR_ASSERT(GRPC_CALL_OK == call_error);
796
873
  // Op: recv initial metadata.
797
874
  op = ops;
@@ -812,10 +889,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
812
889
  // with the callback.
813
890
  self = Ref(DEBUG_LOCATION, "on_message_received");
814
891
  self.release();
815
- GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
816
- OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
817
892
  call_error = grpc_call_start_batch_and_execute(
818
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_message_received_);
893
+ lb_call_, ops, static_cast<size_t>(op - ops),
894
+ &lb_on_balancer_message_received_);
819
895
  GPR_ASSERT(GRPC_CALL_OK == call_error);
820
896
  // Op: recv server status.
821
897
  op = ops;
@@ -830,14 +906,17 @@ void GrpcLb::BalancerCallState::StartQuery() {
830
906
  // This callback signals the end of the LB call, so it relies on the initial
831
907
  // ref instead of a new ref. When it's invoked, it's the initial ref that is
832
908
  // unreffed.
833
- GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
834
- this, grpc_schedule_on_exec_ctx);
835
909
  call_error = grpc_call_start_batch_and_execute(
836
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_status_received_);
910
+ lb_call_, ops, static_cast<size_t>(op - ops),
911
+ &lb_on_balancer_status_received_);
837
912
  GPR_ASSERT(GRPC_CALL_OK == call_error);
838
913
  }
839
914
 
840
915
  void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
916
+ // InvalidateNow to avoid getting stuck re-initializing this timer
917
+ // in a loop while draining the currently-held WorkSerializer.
918
+ // Also see https://github.com/grpc/grpc/issues/26079.
919
+ ExecCtx::Get()->InvalidateNow();
841
920
  const grpc_millis next_client_load_report_time =
842
921
  ExecCtx::Get()->Now() + client_stats_report_interval_;
843
922
  GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
@@ -847,31 +926,30 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
847
926
  client_load_report_timer_callback_pending_ = true;
848
927
  }
849
928
 
850
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(void* arg,
851
- grpc_error* error) {
929
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(
930
+ void* arg, grpc_error_handle error) {
852
931
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
853
- lb_calld->grpclb_policy()->combiner()->Run(
854
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
855
- MaybeSendClientLoadReportLocked, lb_calld, nullptr),
856
- GRPC_ERROR_REF(error));
932
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
933
+ lb_calld->grpclb_policy()->work_serializer()->Run(
934
+ [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
935
+ DEBUG_LOCATION);
857
936
  }
858
937
 
859
938
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
860
- void* arg, grpc_error* error) {
861
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
862
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
863
- lb_calld->client_load_report_timer_callback_pending_ = false;
864
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
865
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
939
+ grpc_error_handle error) {
940
+ client_load_report_timer_callback_pending_ = false;
941
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
942
+ Unref(DEBUG_LOCATION, "client_load_report");
943
+ GRPC_ERROR_UNREF(error);
866
944
  return;
867
945
  }
868
946
  // If we've already sent the initial request, then we can go ahead and send
869
947
  // the load report. Otherwise, we need to wait until the initial request has
870
948
  // been sent to send this (see OnInitialRequestSentLocked()).
871
- if (lb_calld->send_message_payload_ == nullptr) {
872
- lb_calld->SendClientLoadReportLocked();
949
+ if (send_message_payload_ == nullptr) {
950
+ SendClientLoadReportLocked();
873
951
  } else {
874
- lb_calld->client_load_report_is_due_ = true;
952
+ client_load_report_is_due_ = true;
875
953
  }
876
954
  }
877
955
 
@@ -892,7 +970,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
892
970
  if (num_calls_started == 0 && num_calls_finished == 0 &&
893
971
  num_calls_finished_with_client_failed_to_send == 0 &&
894
972
  num_calls_finished_known_received == 0 &&
895
- (drop_token_counts == nullptr || drop_token_counts->size() == 0)) {
973
+ (drop_token_counts == nullptr || drop_token_counts->empty())) {
896
974
  if (last_client_load_report_counters_were_zero_) {
897
975
  ScheduleNextClientLoadReportLocked();
898
976
  return;
@@ -928,142 +1006,128 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
928
1006
  }
929
1007
 
930
1008
  void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
931
- grpc_error* error) {
1009
+ grpc_error_handle error) {
932
1010
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
933
- lb_calld->grpclb_policy()->combiner()->Run(
934
- GRPC_CLOSURE_INIT(&lb_calld->client_load_report_closure_,
935
- ClientLoadReportDoneLocked, lb_calld, nullptr),
936
- GRPC_ERROR_REF(error));
1011
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
1012
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1013
+ [lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
1014
+ DEBUG_LOCATION);
937
1015
  }
938
1016
 
939
- void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(void* arg,
940
- grpc_error* error) {
941
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
942
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
943
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
944
- lb_calld->send_message_payload_ = nullptr;
945
- if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
946
- lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
1017
+ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(
1018
+ grpc_error_handle error) {
1019
+ grpc_byte_buffer_destroy(send_message_payload_);
1020
+ send_message_payload_ = nullptr;
1021
+ if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
1022
+ Unref(DEBUG_LOCATION, "client_load_report");
1023
+ GRPC_ERROR_UNREF(error);
947
1024
  return;
948
1025
  }
949
- lb_calld->ScheduleNextClientLoadReportLocked();
1026
+ ScheduleNextClientLoadReportLocked();
950
1027
  }
951
1028
 
952
- void GrpcLb::BalancerCallState::OnInitialRequestSent(void* arg,
953
- grpc_error* error) {
1029
+ void GrpcLb::BalancerCallState::OnInitialRequestSent(
1030
+ void* arg, grpc_error_handle /*error*/) {
954
1031
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
955
- lb_calld->grpclb_policy()->combiner()->Run(
956
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_initial_request_sent_,
957
- OnInitialRequestSentLocked, lb_calld, nullptr),
958
- GRPC_ERROR_REF(error));
1032
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1033
+ [lb_calld]() { lb_calld->OnInitialRequestSentLocked(); }, DEBUG_LOCATION);
959
1034
  }
960
1035
 
961
- void GrpcLb::BalancerCallState::OnInitialRequestSentLocked(
962
- void* arg, grpc_error* /*error*/) {
963
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
964
- grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
965
- lb_calld->send_message_payload_ = nullptr;
1036
+ void GrpcLb::BalancerCallState::OnInitialRequestSentLocked() {
1037
+ grpc_byte_buffer_destroy(send_message_payload_);
1038
+ send_message_payload_ = nullptr;
966
1039
  // If we attempted to send a client load report before the initial request was
967
1040
  // sent (and this lb_calld is still in use), send the load report now.
968
- if (lb_calld->client_load_report_is_due_ &&
969
- lb_calld == lb_calld->grpclb_policy()->lb_calld_.get()) {
970
- lb_calld->SendClientLoadReportLocked();
971
- lb_calld->client_load_report_is_due_ = false;
1041
+ if (client_load_report_is_due_ && this == grpclb_policy()->lb_calld_.get()) {
1042
+ SendClientLoadReportLocked();
1043
+ client_load_report_is_due_ = false;
972
1044
  }
973
- lb_calld->Unref(DEBUG_LOCATION, "on_initial_request_sent");
1045
+ Unref(DEBUG_LOCATION, "on_initial_request_sent");
974
1046
  }
975
1047
 
976
- void GrpcLb::BalancerCallState::OnBalancerMessageReceived(void* arg,
977
- grpc_error* error) {
1048
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
1049
+ void* arg, grpc_error_handle /*error*/) {
978
1050
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
979
- lb_calld->grpclb_policy()->combiner()->Run(
980
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
981
- OnBalancerMessageReceivedLocked, lb_calld, nullptr),
982
- GRPC_ERROR_REF(error));
1051
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1052
+ [lb_calld]() { lb_calld->OnBalancerMessageReceivedLocked(); },
1053
+ DEBUG_LOCATION);
983
1054
  }
984
1055
 
985
- void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
986
- void* arg, grpc_error* /*error*/) {
987
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
988
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1056
+ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
989
1057
  // Null payload means the LB call was cancelled.
990
- if (lb_calld != grpclb_policy->lb_calld_.get() ||
991
- lb_calld->recv_message_payload_ == nullptr) {
992
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received");
1058
+ if (this != grpclb_policy()->lb_calld_.get() ||
1059
+ recv_message_payload_ == nullptr) {
1060
+ Unref(DEBUG_LOCATION, "on_message_received");
993
1061
  return;
994
1062
  }
995
1063
  grpc_byte_buffer_reader bbr;
996
- grpc_byte_buffer_reader_init(&bbr, lb_calld->recv_message_payload_);
1064
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
997
1065
  grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
998
1066
  grpc_byte_buffer_reader_destroy(&bbr);
999
- grpc_byte_buffer_destroy(lb_calld->recv_message_payload_);
1000
- lb_calld->recv_message_payload_ = nullptr;
1067
+ grpc_byte_buffer_destroy(recv_message_payload_);
1068
+ recv_message_payload_ = nullptr;
1001
1069
  GrpcLbResponse response;
1002
1070
  upb::Arena arena;
1003
1071
  if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
1004
- (response.type == response.INITIAL && lb_calld->seen_initial_response_)) {
1072
+ (response.type == response.INITIAL && seen_initial_response_)) {
1005
1073
  char* response_slice_str =
1006
1074
  grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
1007
1075
  gpr_log(GPR_ERROR,
1008
1076
  "[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
1009
1077
  "Ignoring.",
1010
- grpclb_policy, lb_calld, response_slice_str);
1078
+ grpclb_policy(), this, response_slice_str);
1011
1079
  gpr_free(response_slice_str);
1012
1080
  } else {
1013
1081
  switch (response.type) {
1014
1082
  case response.INITIAL: {
1015
1083
  if (response.client_stats_report_interval != 0) {
1016
- lb_calld->client_stats_report_interval_ =
1017
- GPR_MAX(GPR_MS_PER_SEC, response.client_stats_report_interval);
1084
+ client_stats_report_interval_ = std::max(
1085
+ int64_t(GPR_MS_PER_SEC), response.client_stats_report_interval);
1018
1086
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1019
1087
  gpr_log(GPR_INFO,
1020
1088
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1021
1089
  "message; client load reporting interval = %" PRId64
1022
1090
  " milliseconds",
1023
- grpclb_policy, lb_calld,
1024
- lb_calld->client_stats_report_interval_);
1091
+ grpclb_policy(), this, client_stats_report_interval_);
1025
1092
  }
1026
1093
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1027
1094
  gpr_log(GPR_INFO,
1028
1095
  "[grpclb %p] lb_calld=%p: Received initial LB response "
1029
1096
  "message; client load reporting NOT enabled",
1030
- grpclb_policy, lb_calld);
1097
+ grpclb_policy(), this);
1031
1098
  }
1032
- lb_calld->seen_initial_response_ = true;
1099
+ seen_initial_response_ = true;
1033
1100
  break;
1034
1101
  }
1035
1102
  case response.SERVERLIST: {
1036
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1103
+ GPR_ASSERT(lb_call_ != nullptr);
1037
1104
  auto serverlist_wrapper =
1038
1105
  MakeRefCounted<Serverlist>(std::move(response.serverlist));
1039
1106
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1040
- grpc_core::UniquePtr<char> serverlist_text =
1041
- serverlist_wrapper->AsText();
1042
1107
  gpr_log(GPR_INFO,
1043
1108
  "[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
1044
1109
  " servers received:\n%s",
1045
- grpclb_policy, lb_calld,
1110
+ grpclb_policy(), this,
1046
1111
  serverlist_wrapper->serverlist().size(),
1047
- serverlist_text.get());
1112
+ serverlist_wrapper->AsText().c_str());
1048
1113
  }
1049
- lb_calld->seen_serverlist_ = true;
1114
+ seen_serverlist_ = true;
1050
1115
  // Start sending client load report only after we start using the
1051
1116
  // serverlist returned from the current LB call.
1052
- if (lb_calld->client_stats_report_interval_ > 0 &&
1053
- lb_calld->client_stats_ == nullptr) {
1054
- lb_calld->client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1117
+ if (client_stats_report_interval_ > 0 && client_stats_ == nullptr) {
1118
+ client_stats_ = MakeRefCounted<GrpcLbClientStats>();
1055
1119
  // Ref held by callback.
1056
- lb_calld->Ref(DEBUG_LOCATION, "client_load_report").release();
1057
- lb_calld->ScheduleNextClientLoadReportLocked();
1120
+ Ref(DEBUG_LOCATION, "client_load_report").release();
1121
+ ScheduleNextClientLoadReportLocked();
1058
1122
  }
1059
1123
  // Check if the serverlist differs from the previous one.
1060
- if (grpclb_policy->serverlist_ != nullptr &&
1061
- *grpclb_policy->serverlist_ == *serverlist_wrapper) {
1124
+ if (grpclb_policy()->serverlist_ != nullptr &&
1125
+ *grpclb_policy()->serverlist_ == *serverlist_wrapper) {
1062
1126
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1063
1127
  gpr_log(GPR_INFO,
1064
1128
  "[grpclb %p] lb_calld=%p: Incoming server list identical "
1065
1129
  "to current, ignoring.",
1066
- grpclb_policy, lb_calld);
1130
+ grpclb_policy(), this);
1067
1131
  }
1068
1132
  } else { // New serverlist.
1069
1133
  // Dispose of the fallback.
@@ -1085,167 +1149,145 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
1085
1149
  // the grpclb implementation at this point, since we're deprecating
1086
1150
  // it in favor of the xds policy. We will implement this the
1087
1151
  // right way in the xds policy instead.
1088
- if (grpclb_policy->fallback_mode_) {
1152
+ if (grpclb_policy()->fallback_mode_) {
1089
1153
  gpr_log(GPR_INFO,
1090
1154
  "[grpclb %p] Received response from balancer; exiting "
1091
1155
  "fallback mode",
1092
- grpclb_policy);
1093
- grpclb_policy->fallback_mode_ = false;
1156
+ grpclb_policy());
1157
+ grpclb_policy()->fallback_mode_ = false;
1094
1158
  }
1095
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1096
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1097
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1098
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1159
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1160
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1161
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1162
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1099
1163
  }
1100
1164
  // Update the serverlist in the GrpcLb instance. This serverlist
1101
1165
  // instance will be destroyed either upon the next update or when the
1102
1166
  // GrpcLb instance is destroyed.
1103
- grpclb_policy->serverlist_ = std::move(serverlist_wrapper);
1104
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1167
+ grpclb_policy()->serverlist_ = std::move(serverlist_wrapper);
1168
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1105
1169
  }
1106
1170
  break;
1107
1171
  }
1108
1172
  case response.FALLBACK: {
1109
- if (!grpclb_policy->fallback_mode_) {
1173
+ if (!grpclb_policy()->fallback_mode_) {
1110
1174
  gpr_log(GPR_INFO,
1111
1175
  "[grpclb %p] Entering fallback mode as requested by balancer",
1112
- grpclb_policy);
1113
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1114
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1115
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1116
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1176
+ grpclb_policy());
1177
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1178
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1179
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1180
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1117
1181
  }
1118
- grpclb_policy->fallback_mode_ = true;
1119
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1182
+ grpclb_policy()->fallback_mode_ = true;
1183
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1120
1184
  // Reset serverlist, so that if the balancer exits fallback
1121
1185
  // mode by sending the same serverlist we were previously
1122
1186
  // using, we don't incorrectly ignore it as a duplicate.
1123
- grpclb_policy->serverlist_.reset();
1187
+ grpclb_policy()->serverlist_.reset();
1124
1188
  }
1125
1189
  break;
1126
1190
  }
1127
1191
  }
1128
1192
  }
1129
1193
  grpc_slice_unref_internal(response_slice);
1130
- if (!grpclb_policy->shutting_down_) {
1194
+ if (!grpclb_policy()->shutting_down_) {
1131
1195
  // Keep listening for serverlist updates.
1132
1196
  grpc_op op;
1133
1197
  memset(&op, 0, sizeof(op));
1134
1198
  op.op = GRPC_OP_RECV_MESSAGE;
1135
- op.data.recv_message.recv_message = &lb_calld->recv_message_payload_;
1199
+ op.data.recv_message.recv_message = &recv_message_payload_;
1136
1200
  op.flags = 0;
1137
1201
  op.reserved = nullptr;
1138
1202
  // Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
1139
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
1140
- GrpcLb::BalancerCallState::OnBalancerMessageReceived,
1141
- lb_calld, grpc_schedule_on_exec_ctx);
1142
1203
  const grpc_call_error call_error = grpc_call_start_batch_and_execute(
1143
- lb_calld->lb_call_, &op, 1,
1144
- &lb_calld->lb_on_balancer_message_received_);
1204
+ lb_call_, &op, 1, &lb_on_balancer_message_received_);
1145
1205
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1146
1206
  } else {
1147
- lb_calld->Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1207
+ Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1148
1208
  }
1149
1209
  }
1150
1210
 
1151
- void GrpcLb::BalancerCallState::OnBalancerStatusReceived(void* arg,
1152
- grpc_error* error) {
1211
+ void GrpcLb::BalancerCallState::OnBalancerStatusReceived(
1212
+ void* arg, grpc_error_handle error) {
1153
1213
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1154
- lb_calld->grpclb_policy()->combiner()->Run(
1155
- GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_status_received_,
1156
- OnBalancerStatusReceivedLocked, lb_calld, nullptr),
1157
- GRPC_ERROR_REF(error));
1214
+ (void)GRPC_ERROR_REF(error); // owned by lambda
1215
+ lb_calld->grpclb_policy()->work_serializer()->Run(
1216
+ [lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
1217
+ DEBUG_LOCATION);
1158
1218
  }
1159
1219
 
1160
1220
  void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1161
- void* arg, grpc_error* error) {
1162
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1163
- GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
1164
- GPR_ASSERT(lb_calld->lb_call_ != nullptr);
1221
+ grpc_error_handle error) {
1222
+ GPR_ASSERT(lb_call_ != nullptr);
1165
1223
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1166
- char* status_details =
1167
- grpc_slice_to_c_string(lb_calld->lb_call_status_details_);
1224
+ char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
1168
1225
  gpr_log(GPR_INFO,
1169
1226
  "[grpclb %p] lb_calld=%p: Status from LB server received. "
1170
1227
  "Status = %d, details = '%s', (lb_call: %p), error '%s'",
1171
- grpclb_policy, lb_calld, lb_calld->lb_call_status_, status_details,
1172
- lb_calld->lb_call_, grpc_error_string(error));
1228
+ grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
1229
+ grpc_error_std_string(error).c_str());
1173
1230
  gpr_free(status_details);
1174
1231
  }
1232
+ GRPC_ERROR_UNREF(error);
1175
1233
  // If this lb_calld is still in use, this call ended because of a failure so
1176
1234
  // we want to retry connecting. Otherwise, we have deliberately ended this
1177
1235
  // call and no further action is required.
1178
- if (lb_calld == grpclb_policy->lb_calld_.get()) {
1236
+ if (this == grpclb_policy()->lb_calld_.get()) {
1179
1237
  // If the fallback-at-startup checks are pending, go into fallback mode
1180
1238
  // immediately. This short-circuits the timeout for the fallback-at-startup
1181
1239
  // case.
1182
- if (grpclb_policy->fallback_at_startup_checks_pending_) {
1183
- GPR_ASSERT(!lb_calld->seen_serverlist_);
1240
+ if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1241
+ GPR_ASSERT(!seen_serverlist_);
1184
1242
  gpr_log(GPR_INFO,
1185
1243
  "[grpclb %p] Balancer call finished without receiving "
1186
1244
  "serverlist; entering fallback mode",
1187
- grpclb_policy);
1188
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1189
- grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
1190
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1191
- grpclb_policy->fallback_mode_ = true;
1192
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1245
+ grpclb_policy());
1246
+ grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1247
+ grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1248
+ grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1249
+ grpclb_policy()->fallback_mode_ = true;
1250
+ grpclb_policy()->CreateOrUpdateChildPolicyLocked();
1193
1251
  } else {
1194
1252
  // This handles the fallback-after-startup case.
1195
- grpclb_policy->MaybeEnterFallbackModeAfterStartup();
1253
+ grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
1196
1254
  }
1197
- grpclb_policy->lb_calld_.reset();
1198
- GPR_ASSERT(!grpclb_policy->shutting_down_);
1199
- grpclb_policy->channel_control_helper()->RequestReresolution();
1200
- if (lb_calld->seen_initial_response_) {
1255
+ grpclb_policy()->lb_calld_.reset();
1256
+ GPR_ASSERT(!grpclb_policy()->shutting_down_);
1257
+ grpclb_policy()->channel_control_helper()->RequestReresolution();
1258
+ if (seen_initial_response_) {
1201
1259
  // If we lose connection to the LB server, reset the backoff and restart
1202
1260
  // the LB call immediately.
1203
- grpclb_policy->lb_call_backoff_.Reset();
1204
- grpclb_policy->StartBalancerCallLocked();
1261
+ grpclb_policy()->lb_call_backoff_.Reset();
1262
+ grpclb_policy()->StartBalancerCallLocked();
1205
1263
  } else {
1206
1264
  // If this LB call fails establishing any connection to the LB server,
1207
1265
  // retry later.
1208
- grpclb_policy->StartBalancerCallRetryTimerLocked();
1266
+ grpclb_policy()->StartBalancerCallRetryTimerLocked();
1209
1267
  }
1210
1268
  }
1211
- lb_calld->Unref(DEBUG_LOCATION, "lb_call_ended");
1269
+ Unref(DEBUG_LOCATION, "lb_call_ended");
1212
1270
  }
1213
1271
 
1214
1272
  //
1215
1273
  // helper code for creating balancer channel
1216
1274
  //
1217
1275
 
1218
- ServerAddressList ExtractBalancerAddresses(const ServerAddressList& addresses) {
1219
- ServerAddressList balancer_addresses;
1220
- for (size_t i = 0; i < addresses.size(); ++i) {
1221
- if (addresses[i].IsBalancer()) {
1222
- // Strip out the is_balancer channel arg, since we don't want to
1223
- // recursively use the grpclb policy in the channel used to talk to
1224
- // the balancers. Note that we do NOT strip out the balancer_name
1225
- // channel arg, since we need that to set the authority correctly
1226
- // to talk to the balancers.
1227
- static const char* args_to_remove[] = {
1228
- GRPC_ARG_ADDRESS_IS_BALANCER,
1229
- };
1230
- balancer_addresses.emplace_back(
1231
- addresses[i].address(),
1232
- grpc_channel_args_copy_and_remove(addresses[i].args(), args_to_remove,
1233
- GPR_ARRAY_SIZE(args_to_remove)));
1234
- }
1235
- }
1236
- return balancer_addresses;
1276
+ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1277
+ const ServerAddressList* addresses =
1278
+ FindGrpclbBalancerAddressesInChannelArgs(args);
1279
+ if (addresses != nullptr) return *addresses;
1280
+ return ServerAddressList();
1237
1281
  }
1238
1282
 
1239
1283
  /* Returns the channel args for the LB channel, used to create a bidirectional
1240
1284
  * stream for the reception of load balancing updates.
1241
1285
  *
1242
1286
  * Inputs:
1243
- * - \a addresses: corresponding to the balancers.
1244
1287
  * - \a response_generator: in order to propagate updates from the resolver
1245
1288
  * above the grpclb policy.
1246
1289
  * - \a args: other args inherited from the grpclb policy. */
1247
1290
  grpc_channel_args* BuildBalancerChannelArgs(
1248
- const ServerAddressList& addresses,
1249
1291
  FakeResolverResponseGenerator* response_generator,
1250
1292
  const grpc_channel_args* args) {
1251
1293
  // Channel args to remove.
@@ -1277,40 +1319,45 @@ grpc_channel_args* BuildBalancerChannelArgs(
1277
1319
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1278
1320
  };
1279
1321
  // Channel args to add.
1280
- InlinedVector<grpc_arg, 3> args_to_add;
1281
- // The fake resolver response generator, which we use to inject
1282
- // address updates into the LB channel.
1283
- args_to_add.emplace_back(
1322
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
1323
+ // The fake resolver response generator, which we use to inject
1324
+ // address updates into the LB channel.
1284
1325
  grpc_core::FakeResolverResponseGenerator::MakeChannelArg(
1285
- response_generator));
1286
- // A channel arg indicating the target is a grpclb load balancer.
1287
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1288
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1));
1289
- // The parent channel's channelz uuid.
1290
- channelz::ChannelNode* channelz_node = nullptr;
1291
- const grpc_arg* arg =
1292
- grpc_channel_args_find(args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1293
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
1294
- arg->value.pointer.p != nullptr) {
1295
- channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
1296
- args_to_add.emplace_back(
1297
- channelz::MakeParentUuidArg(channelz_node->uuid()));
1298
- }
1326
+ response_generator),
1327
+ // A channel arg indicating the target is a grpclb load balancer.
1328
+ grpc_channel_arg_integer_create(
1329
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1330
+ // Tells channelz that this is an internal channel.
1331
+ grpc_channel_arg_integer_create(
1332
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1333
+ };
1299
1334
  // Construct channel args.
1300
1335
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1301
1336
  args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
1302
1337
  args_to_add.size());
1303
1338
  // Make any necessary modifications for security.
1304
- return ModifyGrpclbBalancerChannelArgs(addresses, new_args);
1339
+ return ModifyGrpclbBalancerChannelArgs(new_args);
1305
1340
  }
1306
1341
 
1307
1342
  //
1308
1343
  // ctor and dtor
1309
1344
  //
1310
1345
 
1346
+ std::string GetServerNameFromChannelArgs(const grpc_channel_args* args) {
1347
+ const char* server_uri =
1348
+ grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
1349
+ GPR_ASSERT(server_uri != nullptr);
1350
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1351
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1352
+ return std::string(absl::StripPrefix(uri->path(), "/"));
1353
+ }
1354
+
1311
1355
  GrpcLb::GrpcLb(Args args)
1312
1356
  : LoadBalancingPolicy(std::move(args)),
1357
+ server_name_(GetServerNameFromChannelArgs(args.args)),
1313
1358
  response_generator_(MakeRefCounted<FakeResolverResponseGenerator>()),
1359
+ lb_call_timeout_ms_(grpc_channel_args_find_integer(
1360
+ args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS, {0, 0, INT_MAX})),
1314
1361
  lb_call_backoff_(
1315
1362
  BackOff::Options()
1316
1363
  .set_initial_backoff(GRPC_GRPCLB_INITIAL_CONNECT_BACKOFF_SECONDS *
@@ -1318,41 +1365,42 @@ GrpcLb::GrpcLb(Args args)
1318
1365
  .set_multiplier(GRPC_GRPCLB_RECONNECT_BACKOFF_MULTIPLIER)
1319
1366
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1320
1367
  .set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
1321
- 1000)) {
1322
- // Record server name.
1323
- const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
1324
- const char* server_uri = grpc_channel_arg_get_string(arg);
1325
- GPR_ASSERT(server_uri != nullptr);
1326
- grpc_uri* uri = grpc_uri_parse(server_uri, true);
1327
- GPR_ASSERT(uri->path[0] != '\0');
1328
- server_name_ = gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path);
1368
+ 1000)),
1369
+ fallback_at_startup_timeout_(grpc_channel_args_find_integer(
1370
+ args.args, GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS,
1371
+ {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX})),
1372
+ subchannel_cache_interval_ms_(grpc_channel_args_find_integer(
1373
+ args.args, GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS,
1374
+ {GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS, 0, INT_MAX})) {
1329
1375
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1330
1376
  gpr_log(GPR_INFO,
1331
1377
  "[grpclb %p] Will use '%s' as the server name for LB request.",
1332
- this, server_name_);
1378
+ this, server_name_.c_str());
1333
1379
  }
1334
- grpc_uri_destroy(uri);
1335
- // Record LB call timeout.
1336
- arg = grpc_channel_args_find(args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS);
1337
- lb_call_timeout_ms_ = grpc_channel_arg_get_integer(arg, {0, 0, INT_MAX});
1338
- // Record fallback-at-startup timeout.
1339
- arg = grpc_channel_args_find(args.args, GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS);
1340
- fallback_at_startup_timeout_ = grpc_channel_arg_get_integer(
1341
- arg, {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX});
1380
+ // Closure Initialization
1381
+ GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1382
+ grpc_schedule_on_exec_ctx);
1383
+ GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1384
+ grpc_schedule_on_exec_ctx);
1385
+ GRPC_CLOSURE_INIT(&on_subchannel_cache_timer_, &OnSubchannelCacheTimer, this,
1386
+ nullptr);
1342
1387
  }
1343
1388
 
1344
- GrpcLb::~GrpcLb() {
1345
- gpr_free((void*)server_name_);
1346
- grpc_channel_args_destroy(args_);
1347
- }
1389
+ GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
1348
1390
 
1349
1391
  void GrpcLb::ShutdownLocked() {
1350
1392
  shutting_down_ = true;
1351
1393
  lb_calld_.reset();
1394
+ if (subchannel_cache_timer_pending_) {
1395
+ subchannel_cache_timer_pending_ = false;
1396
+ grpc_timer_cancel(&subchannel_cache_timer_);
1397
+ }
1398
+ cached_subchannels_.clear();
1352
1399
  if (retry_timer_callback_pending_) {
1353
1400
  grpc_timer_cancel(&lb_call_retry_timer_);
1354
1401
  }
1355
1402
  if (fallback_at_startup_checks_pending_) {
1403
+ fallback_at_startup_checks_pending_ = false;
1356
1404
  grpc_timer_cancel(&lb_fallback_timer_);
1357
1405
  CancelBalancerChannelConnectivityWatchLocked();
1358
1406
  }
@@ -1366,6 +1414,12 @@ void GrpcLb::ShutdownLocked() {
1366
1414
  // OnBalancerChannelConnectivityChangedLocked(), and we need to be
1367
1415
  // alive when that callback is invoked.
1368
1416
  if (lb_channel_ != nullptr) {
1417
+ if (parent_channelz_node_ != nullptr) {
1418
+ channelz::ChannelNode* child_channelz_node =
1419
+ grpc_channel_get_channelz_node(lb_channel_);
1420
+ GPR_ASSERT(child_channelz_node != nullptr);
1421
+ parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1422
+ }
1369
1423
  grpc_channel_destroy(lb_channel_);
1370
1424
  lb_channel_ = nullptr;
1371
1425
  }
@@ -1386,12 +1440,8 @@ void GrpcLb::ResetBackoffLocked() {
1386
1440
 
1387
1441
  void GrpcLb::UpdateLocked(UpdateArgs args) {
1388
1442
  const bool is_initial_update = lb_channel_ == nullptr;
1389
- auto* grpclb_config = static_cast<const GrpcLbConfig*>(args.config.get());
1390
- if (grpclb_config != nullptr) {
1391
- child_policy_config_ = grpclb_config->child_policy();
1392
- } else {
1393
- child_policy_config_ = nullptr;
1394
- }
1443
+ config_ = args.config;
1444
+ GPR_ASSERT(config_ != nullptr);
1395
1445
  ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
1396
1446
  // Update the existing child policy.
1397
1447
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
@@ -1402,25 +1452,17 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1402
1452
  // Start timer.
1403
1453
  grpc_millis deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
1404
1454
  Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
1405
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1406
- grpc_schedule_on_exec_ctx);
1407
1455
  grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
1408
1456
  // Start watching the channel's connectivity state. If the channel
1409
1457
  // goes into state TRANSIENT_FAILURE before the timer fires, we go into
1410
1458
  // fallback mode even if the fallback timeout has not elapsed.
1411
- grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
1412
- grpc_channel_get_channel_stack(lb_channel_));
1413
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1459
+ ClientChannel* client_channel = ClientChannel::GetFromChannel(lb_channel_);
1460
+ GPR_ASSERT(client_channel != nullptr);
1414
1461
  // Ref held by callback.
1415
- Ref(DEBUG_LOCATION, "watch_lb_channel_connectivity").release();
1416
- GRPC_CLOSURE_INIT(&lb_channel_on_connectivity_changed_,
1417
- &GrpcLb::OnBalancerChannelConnectivityChanged, this,
1418
- grpc_schedule_on_exec_ctx);
1419
- grpc_client_channel_watch_connectivity_state(
1420
- client_channel_elem,
1421
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1422
- &lb_channel_connectivity_, &lb_channel_on_connectivity_changed_,
1423
- nullptr);
1462
+ watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1463
+ client_channel->AddConnectivityWatcher(
1464
+ GRPC_CHANNEL_IDLE,
1465
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
1424
1466
  // Start balancer call.
1425
1467
  StartBalancerCallLocked();
1426
1468
  }
@@ -1430,46 +1472,49 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1430
1472
  // helpers for UpdateLocked()
1431
1473
  //
1432
1474
 
1433
- // Returns the backend addresses extracted from the given addresses.
1434
- ServerAddressList ExtractBackendAddresses(const ServerAddressList& addresses) {
1435
- static const char* lb_token = "";
1436
- grpc_arg arg = grpc_channel_arg_pointer_create(
1437
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
1438
- const_cast<char*>(lb_token), &lb_token_arg_vtable);
1439
- ServerAddressList backend_addresses;
1440
- for (size_t i = 0; i < addresses.size(); ++i) {
1441
- if (!addresses[i].IsBalancer()) {
1442
- backend_addresses.emplace_back(
1443
- addresses[i].address(),
1444
- grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1445
- }
1475
+ ServerAddressList GrpcLb::AddNullLbTokenToAddresses(
1476
+ const ServerAddressList& addresses) {
1477
+ ServerAddressList addresses_out;
1478
+ for (const ServerAddress& address : addresses) {
1479
+ addresses_out.emplace_back(address.WithAttribute(
1480
+ kGrpcLbAddressAttributeKey,
1481
+ absl::make_unique<TokenAndClientStatsAttribute>("", nullptr)));
1446
1482
  }
1447
- return backend_addresses;
1483
+ return addresses_out;
1448
1484
  }
1449
1485
 
1450
1486
  void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1451
1487
  const ServerAddressList& addresses, const grpc_channel_args& args) {
1452
1488
  // Update fallback address list.
1453
- fallback_backend_addresses_ = ExtractBackendAddresses(addresses);
1489
+ fallback_backend_addresses_ = AddNullLbTokenToAddresses(addresses);
1454
1490
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1455
1491
  // since we use this to trigger the client_load_reporting filter.
1456
1492
  static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
1457
1493
  grpc_arg new_arg = grpc_channel_arg_string_create(
1458
- (char*)GRPC_ARG_LB_POLICY_NAME, (char*)"grpclb");
1494
+ const_cast<char*>(GRPC_ARG_LB_POLICY_NAME), const_cast<char*>("grpclb"));
1459
1495
  grpc_channel_args_destroy(args_);
1460
1496
  args_ = grpc_channel_args_copy_and_add_and_remove(
1461
1497
  &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1462
1498
  // Construct args for balancer channel.
1463
- ServerAddressList balancer_addresses = ExtractBalancerAddresses(addresses);
1464
- grpc_channel_args* lb_channel_args = BuildBalancerChannelArgs(
1465
- balancer_addresses, response_generator_.get(), &args);
1499
+ ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1500
+ grpc_channel_args* lb_channel_args =
1501
+ BuildBalancerChannelArgs(response_generator_.get(), &args);
1466
1502
  // Create balancer channel if needed.
1467
1503
  if (lb_channel_ == nullptr) {
1468
- char* uri_str;
1469
- gpr_asprintf(&uri_str, "fake:///%s", server_name_);
1470
- lb_channel_ = CreateGrpclbBalancerChannel(uri_str, *lb_channel_args);
1504
+ std::string uri_str = absl::StrCat("fake:///", server_name_);
1505
+ lb_channel_ =
1506
+ CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1471
1507
  GPR_ASSERT(lb_channel_ != nullptr);
1472
- gpr_free(uri_str);
1508
+ // Set up channelz linkage.
1509
+ channelz::ChannelNode* child_channelz_node =
1510
+ grpc_channel_get_channelz_node(lb_channel_);
1511
+ channelz::ChannelNode* parent_channelz_node =
1512
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
1513
+ &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1514
+ if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1515
+ parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1516
+ parent_channelz_node_ = parent_channelz_node->Ref();
1517
+ }
1473
1518
  }
1474
1519
  // Propagate updates to the LB channel (pick_first) through the fake
1475
1520
  // resolver.
@@ -1479,60 +1524,10 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1479
1524
  response_generator_->SetResponse(std::move(result));
1480
1525
  }
1481
1526
 
1482
- void GrpcLb::OnBalancerChannelConnectivityChanged(void* arg,
1483
- grpc_error* error) {
1484
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1485
- self->combiner()->Run(
1486
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1487
- &GrpcLb::OnBalancerChannelConnectivityChangedLocked,
1488
- self, nullptr),
1489
- GRPC_ERROR_REF(error));
1490
- }
1491
-
1492
- void GrpcLb::OnBalancerChannelConnectivityChangedLocked(void* arg,
1493
- grpc_error* /*error*/) {
1494
- GrpcLb* self = static_cast<GrpcLb*>(arg);
1495
- if (!self->shutting_down_ && self->fallback_at_startup_checks_pending_) {
1496
- if (self->lb_channel_connectivity_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1497
- // Not in TRANSIENT_FAILURE. Renew connectivity watch.
1498
- grpc_channel_element* client_channel_elem =
1499
- grpc_channel_stack_last_element(
1500
- grpc_channel_get_channel_stack(self->lb_channel_));
1501
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1502
- GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
1503
- &GrpcLb::OnBalancerChannelConnectivityChanged, self,
1504
- grpc_schedule_on_exec_ctx);
1505
- grpc_client_channel_watch_connectivity_state(
1506
- client_channel_elem,
1507
- grpc_polling_entity_create_from_pollset_set(
1508
- self->interested_parties()),
1509
- &self->lb_channel_connectivity_,
1510
- &self->lb_channel_on_connectivity_changed_, nullptr);
1511
- return; // Early out so we don't drop the ref below.
1512
- }
1513
- // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
1514
- // fallback mode immediately.
1515
- gpr_log(GPR_INFO,
1516
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
1517
- "entering fallback mode",
1518
- self);
1519
- self->fallback_at_startup_checks_pending_ = false;
1520
- grpc_timer_cancel(&self->lb_fallback_timer_);
1521
- self->fallback_mode_ = true;
1522
- self->CreateOrUpdateChildPolicyLocked();
1523
- }
1524
- // Done watching connectivity state, so drop ref.
1525
- self->Unref(DEBUG_LOCATION, "watch_lb_channel_connectivity");
1526
- }
1527
-
1528
1527
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
1529
- grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
1530
- grpc_channel_get_channel_stack(lb_channel_));
1531
- GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
1532
- grpc_client_channel_watch_connectivity_state(
1533
- client_channel_elem,
1534
- grpc_polling_entity_create_from_pollset_set(interested_parties()),
1535
- nullptr, &lb_channel_on_connectivity_changed_, nullptr);
1528
+ ClientChannel* client_channel = ClientChannel::GetFromChannel(lb_channel_);
1529
+ GPR_ASSERT(client_channel != nullptr);
1530
+ client_channel->RemoveConnectivityWatcher(watcher_);
1536
1531
  }
1537
1532
 
1538
1533
  //
@@ -1571,33 +1566,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1571
1566
  // with the callback.
1572
1567
  auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1573
1568
  self.release();
1574
- GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1575
- grpc_schedule_on_exec_ctx);
1576
1569
  retry_timer_callback_pending_ = true;
1577
1570
  grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
1578
1571
  }
1579
1572
 
1580
- void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error* error) {
1573
+ void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
1581
1574
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1582
- grpclb_policy->combiner()->Run(
1583
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_call_retry_,
1584
- &GrpcLb::OnBalancerCallRetryTimerLocked, grpclb_policy,
1585
- nullptr),
1586
- GRPC_ERROR_REF(error));
1575
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
1576
+ grpclb_policy->work_serializer()->Run(
1577
+ [grpclb_policy, error]() {
1578
+ grpclb_policy->OnBalancerCallRetryTimerLocked(error);
1579
+ },
1580
+ DEBUG_LOCATION);
1587
1581
  }
1588
1582
 
1589
- void GrpcLb::OnBalancerCallRetryTimerLocked(void* arg, grpc_error* error) {
1590
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1591
- grpclb_policy->retry_timer_callback_pending_ = false;
1592
- if (!grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE &&
1593
- grpclb_policy->lb_calld_ == nullptr) {
1583
+ void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error_handle error) {
1584
+ retry_timer_callback_pending_ = false;
1585
+ if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1594
1586
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1595
- gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server",
1596
- grpclb_policy);
1587
+ gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1597
1588
  }
1598
- grpclb_policy->StartBalancerCallLocked();
1589
+ StartBalancerCallLocked();
1599
1590
  }
1600
- grpclb_policy->Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1591
+ Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1592
+ GRPC_ERROR_UNREF(error);
1601
1593
  }
1602
1594
 
1603
1595
  //
@@ -1622,30 +1614,30 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
1622
1614
  }
1623
1615
  }
1624
1616
 
1625
- void GrpcLb::OnFallbackTimer(void* arg, grpc_error* error) {
1617
+ void GrpcLb::OnFallbackTimer(void* arg, grpc_error_handle error) {
1626
1618
  GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1627
- grpclb_policy->combiner()->Run(
1628
- GRPC_CLOSURE_INIT(&grpclb_policy->lb_on_fallback_,
1629
- &GrpcLb::OnFallbackTimerLocked, grpclb_policy, nullptr),
1630
- GRPC_ERROR_REF(error));
1619
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
1620
+ grpclb_policy->work_serializer()->Run(
1621
+ [grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
1622
+ DEBUG_LOCATION);
1631
1623
  }
1632
1624
 
1633
- void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1634
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1625
+ void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
1635
1626
  // If we receive a serverlist after the timer fires but before this callback
1636
1627
  // actually runs, don't fall back.
1637
- if (grpclb_policy->fallback_at_startup_checks_pending_ &&
1638
- !grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE) {
1628
+ if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1629
+ error == GRPC_ERROR_NONE) {
1639
1630
  gpr_log(GPR_INFO,
1640
1631
  "[grpclb %p] No response from balancer after fallback timeout; "
1641
1632
  "entering fallback mode",
1642
- grpclb_policy);
1643
- grpclb_policy->fallback_at_startup_checks_pending_ = false;
1644
- grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
1645
- grpclb_policy->fallback_mode_ = true;
1646
- grpclb_policy->CreateOrUpdateChildPolicyLocked();
1633
+ this);
1634
+ fallback_at_startup_checks_pending_ = false;
1635
+ CancelBalancerChannelConnectivityWatchLocked();
1636
+ fallback_mode_ = true;
1637
+ CreateOrUpdateChildPolicyLocked();
1647
1638
  }
1648
- grpclb_policy->Unref(DEBUG_LOCATION, "on_fallback_timer");
1639
+ Unref(DEBUG_LOCATION, "on_fallback_timer");
1640
+ GRPC_ERROR_UNREF(error);
1649
1641
  }
1650
1642
 
1651
1643
  //
@@ -1654,7 +1646,7 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
1654
1646
 
1655
1647
  grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1656
1648
  bool is_backend_from_grpclb_load_balancer) {
1657
- InlinedVector<grpc_arg, 2> args_to_add;
1649
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
1658
1650
  args_to_add.emplace_back(grpc_channel_arg_integer_create(
1659
1651
  const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1660
1652
  is_backend_from_grpclb_load_balancer));
@@ -1669,7 +1661,7 @@ grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1669
1661
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1670
1662
  const grpc_channel_args* args) {
1671
1663
  LoadBalancingPolicy::Args lb_policy_args;
1672
- lb_policy_args.combiner = combiner();
1664
+ lb_policy_args.work_serializer = work_serializer();
1673
1665
  lb_policy_args.args = args;
1674
1666
  lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
1675
1667
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
@@ -1707,7 +1699,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1707
1699
  update_args.args =
1708
1700
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1709
1701
  GPR_ASSERT(update_args.args != nullptr);
1710
- update_args.config = child_policy_config_;
1702
+ update_args.config = config_->child_policy();
1711
1703
  // Create child policy if needed.
1712
1704
  if (child_policy_ == nullptr) {
1713
1705
  child_policy_ = CreateChildPolicyLocked(update_args.args);
@@ -1720,6 +1712,57 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1720
1712
  child_policy_->UpdateLocked(std::move(update_args));
1721
1713
  }
1722
1714
 
1715
+ //
1716
+ // subchannel caching
1717
+ //
1718
+
1719
+ void GrpcLb::CacheDeletedSubchannelLocked(
1720
+ RefCountedPtr<SubchannelInterface> subchannel) {
1721
+ grpc_millis deletion_time =
1722
+ ExecCtx::Get()->Now() + subchannel_cache_interval_ms_;
1723
+ cached_subchannels_[deletion_time].push_back(std::move(subchannel));
1724
+ if (!subchannel_cache_timer_pending_) {
1725
+ Ref(DEBUG_LOCATION, "OnSubchannelCacheTimer").release();
1726
+ subchannel_cache_timer_pending_ = true;
1727
+ StartSubchannelCacheTimerLocked();
1728
+ }
1729
+ }
1730
+
1731
+ void GrpcLb::StartSubchannelCacheTimerLocked() {
1732
+ GPR_ASSERT(!cached_subchannels_.empty());
1733
+ grpc_timer_init(&subchannel_cache_timer_, cached_subchannels_.begin()->first,
1734
+ &on_subchannel_cache_timer_);
1735
+ }
1736
+
1737
+ void GrpcLb::OnSubchannelCacheTimer(void* arg, grpc_error_handle error) {
1738
+ auto* self = static_cast<GrpcLb*>(arg);
1739
+ (void)GRPC_ERROR_REF(error);
1740
+ self->work_serializer()->Run(
1741
+ [self, error]() { self->GrpcLb::OnSubchannelCacheTimerLocked(error); },
1742
+ DEBUG_LOCATION);
1743
+ }
1744
+
1745
+ void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
1746
+ if (subchannel_cache_timer_pending_ && error == GRPC_ERROR_NONE) {
1747
+ auto it = cached_subchannels_.begin();
1748
+ if (it != cached_subchannels_.end()) {
1749
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1750
+ gpr_log(GPR_INFO,
1751
+ "[grpclb %p] removing %" PRIuPTR " subchannels from cache",
1752
+ this, it->second.size());
1753
+ }
1754
+ cached_subchannels_.erase(it);
1755
+ }
1756
+ if (!cached_subchannels_.empty()) {
1757
+ StartSubchannelCacheTimerLocked();
1758
+ return;
1759
+ }
1760
+ subchannel_cache_timer_pending_ = false;
1761
+ }
1762
+ Unref(DEBUG_LOCATION, "OnSubchannelCacheTimer");
1763
+ GRPC_ERROR_UNREF(error);
1764
+ }
1765
+
1723
1766
  //
1724
1767
  // factory
1725
1768
  //
@@ -1734,15 +1777,26 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1734
1777
  const char* name() const override { return kGrpclb; }
1735
1778
 
1736
1779
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1737
- const Json& json, grpc_error** error) const override {
1780
+ const Json& json, grpc_error_handle* error) const override {
1738
1781
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1739
1782
  if (json.type() == Json::Type::JSON_NULL) {
1740
- return MakeRefCounted<GrpcLbConfig>(nullptr);
1783
+ return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1741
1784
  }
1742
- std::vector<grpc_error*> error_list;
1785
+ std::vector<grpc_error_handle> error_list;
1743
1786
  Json child_policy_config_json_tmp;
1744
1787
  const Json* child_policy_config_json;
1745
- auto it = json.object_value().find("childPolicy");
1788
+ std::string service_name;
1789
+ auto it = json.object_value().find("serviceName");
1790
+ if (it != json.object_value().end()) {
1791
+ const Json& service_name_json = it->second;
1792
+ if (service_name_json.type() != Json::Type::STRING) {
1793
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1794
+ "field:serviceName error:type should be string"));
1795
+ } else {
1796
+ service_name = service_name_json.string_value();
1797
+ }
1798
+ }
1799
+ it = json.object_value().find("childPolicy");
1746
1800
  if (it == json.object_value().end()) {
1747
1801
  child_policy_config_json_tmp = Json::Array{Json::Object{
1748
1802
  {"round_robin", Json::Object()},
@@ -1751,18 +1805,19 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1751
1805
  } else {
1752
1806
  child_policy_config_json = &it->second;
1753
1807
  }
1754
- grpc_error* parse_error = GRPC_ERROR_NONE;
1808
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
1755
1809
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1756
1810
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1757
1811
  *child_policy_config_json, &parse_error);
1758
1812
  if (parse_error != GRPC_ERROR_NONE) {
1759
- std::vector<grpc_error*> child_errors;
1813
+ std::vector<grpc_error_handle> child_errors;
1760
1814
  child_errors.push_back(parse_error);
1761
1815
  error_list.push_back(
1762
1816
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1763
1817
  }
1764
1818
  if (error_list.empty()) {
1765
- return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config));
1819
+ return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1820
+ std::move(service_name));
1766
1821
  } else {
1767
1822
  *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1768
1823
  return nullptr;
@@ -1778,38 +1833,34 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1778
1833
  // Plugin registration
1779
1834
  //
1780
1835
 
1781
- namespace {
1782
-
1783
- // Only add client_load_reporting filter if the grpclb LB policy is used.
1784
- bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1785
- void* arg) {
1786
- const grpc_channel_args* args =
1787
- grpc_channel_stack_builder_get_channel_arguments(builder);
1788
- const grpc_arg* channel_arg =
1789
- grpc_channel_args_find(args, GRPC_ARG_LB_POLICY_NAME);
1790
- if (channel_arg != nullptr && channel_arg->type == GRPC_ARG_STRING &&
1791
- strcmp(channel_arg->value.string, "grpclb") == 0) {
1792
- // TODO(roth): When we get around to re-attempting
1793
- // https://github.com/grpc/grpc/pull/16214, we should try to keep
1794
- // this filter at the very top of the subchannel stack, since that
1795
- // will minimize the number of metadata elements that the filter
1796
- // needs to iterate through to find the ClientStats object.
1797
- return grpc_channel_stack_builder_prepend_filter(
1798
- builder, (const grpc_channel_filter*)arg, nullptr, nullptr);
1799
- }
1800
- return true;
1801
- }
1802
-
1803
- } // namespace
1804
-
1805
1836
  void grpc_lb_policy_grpclb_init() {
1806
1837
  grpc_core::LoadBalancingPolicyRegistry::Builder::
1807
1838
  RegisterLoadBalancingPolicyFactory(
1808
1839
  absl::make_unique<grpc_core::GrpcLbFactory>());
1809
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
1810
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1811
- maybe_add_client_load_reporting_filter,
1812
- (void*)&grpc_client_load_reporting_filter);
1813
1840
  }
1814
1841
 
1815
1842
  void grpc_lb_policy_grpclb_shutdown() {}
1843
+
1844
+ namespace grpc_core {
1845
+ void RegisterGrpcLbLoadReportingFilter(CoreConfiguration::Builder* builder) {
1846
+ builder->channel_init()->RegisterStage(
1847
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1848
+ [](grpc_channel_stack_builder* builder) {
1849
+ const grpc_channel_args* args =
1850
+ grpc_channel_stack_builder_get_channel_arguments(builder);
1851
+ const grpc_arg* channel_arg =
1852
+ grpc_channel_args_find(args, GRPC_ARG_LB_POLICY_NAME);
1853
+ if (channel_arg != nullptr && channel_arg->type == GRPC_ARG_STRING &&
1854
+ strcmp(channel_arg->value.string, "grpclb") == 0) {
1855
+ // TODO(roth): When we get around to re-attempting
1856
+ // https://github.com/grpc/grpc/pull/16214, we should try to keep
1857
+ // this filter at the very top of the subchannel stack, since that
1858
+ // will minimize the number of metadata elements that the filter
1859
+ // needs to iterate through to find the ClientStats object.
1860
+ return grpc_channel_stack_builder_prepend_filter(
1861
+ builder, &grpc_client_load_reporting_filter, nullptr, nullptr);
1862
+ }
1863
+ return true;
1864
+ });
1865
+ }
1866
+ } // namespace grpc_core