grpc 1.60.2 → 1.61.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
  93. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
  94. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  95. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  96. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  97. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  98. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  99. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  103. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  104. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  105. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  106. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  107. data/src/core/ext/xds/xds_api.cc +31 -18
  108. data/src/core/ext/xds/xds_api.h +2 -2
  109. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  110. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  111. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  112. data/src/core/ext/xds/xds_client.cc +420 -414
  113. data/src/core/ext/xds/xds_client.h +31 -22
  114. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  115. data/src/core/ext/xds/xds_cluster.cc +104 -11
  116. data/src/core/ext/xds/xds_cluster.h +9 -1
  117. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  118. data/src/core/ext/xds/xds_common_types.cc +14 -10
  119. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  120. data/src/core/ext/xds/xds_endpoint.h +5 -1
  121. data/src/core/ext/xds/xds_health_status.cc +12 -2
  122. data/src/core/ext/xds/xds_health_status.h +4 -2
  123. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  124. data/src/core/ext/xds/xds_listener.cc +14 -8
  125. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  126. data/src/core/ext/xds/xds_route_config.cc +34 -22
  127. data/src/core/ext/xds/xds_route_config.h +1 -0
  128. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  129. data/src/core/ext/xds/xds_transport.h +3 -0
  130. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  131. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  132. data/src/core/lib/channel/call_tracer.cc +12 -0
  133. data/src/core/lib/channel/call_tracer.h +17 -3
  134. data/src/core/lib/channel/channel_args.cc +24 -14
  135. data/src/core/lib/channel/channel_args.h +74 -13
  136. data/src/core/lib/channel/channel_stack.cc +27 -0
  137. data/src/core/lib/channel/channel_stack.h +10 -10
  138. data/src/core/lib/channel/connected_channel.cc +64 -18
  139. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  140. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  141. data/src/core/lib/compression/compression_internal.cc +0 -3
  142. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  143. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  144. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  145. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  146. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  147. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  148. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  149. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  150. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  151. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  152. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  153. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  154. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  155. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  156. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  158. data/src/core/lib/experiments/config.cc +13 -0
  159. data/src/core/lib/experiments/config.h +3 -0
  160. data/src/core/lib/experiments/experiments.cc +245 -366
  161. data/src/core/lib/experiments/experiments.h +50 -156
  162. data/src/core/lib/gprpp/debug_location.h +13 -0
  163. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  164. data/src/core/lib/gprpp/orphanable.h +27 -0
  165. data/src/core/lib/gprpp/ref_counted.h +63 -22
  166. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  167. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  168. data/src/core/lib/gprpp/status_helper.cc +1 -2
  169. data/src/core/lib/iomgr/combiner.cc +15 -51
  170. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  173. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  174. data/src/core/lib/promise/activity.cc +17 -2
  175. data/src/core/lib/promise/activity.h +5 -4
  176. data/src/core/lib/promise/all_ok.h +80 -0
  177. data/src/core/lib/promise/detail/join_state.h +2077 -0
  178. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  179. data/src/core/lib/promise/detail/promise_like.h +8 -1
  180. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  181. data/src/core/lib/promise/detail/status.h +42 -5
  182. data/src/core/lib/promise/for_each.h +13 -1
  183. data/src/core/lib/promise/if.h +4 -0
  184. data/src/core/lib/promise/latch.h +6 -3
  185. data/src/core/lib/promise/party.cc +33 -31
  186. data/src/core/lib/promise/party.h +142 -6
  187. data/src/core/lib/promise/poll.h +39 -13
  188. data/src/core/lib/promise/promise.h +4 -0
  189. data/src/core/lib/promise/seq.h +107 -7
  190. data/src/core/lib/promise/status_flag.h +196 -0
  191. data/src/core/lib/promise/try_join.h +132 -0
  192. data/src/core/lib/promise/try_seq.h +132 -10
  193. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  194. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  195. data/src/core/lib/resource_quota/arena.h +2 -2
  196. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  197. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  198. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  199. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  203. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  207. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  210. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  211. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  212. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  213. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  215. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  216. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  217. data/src/core/lib/security/transport/auth_filters.h +71 -4
  218. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  219. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  220. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  221. data/src/core/lib/slice/slice_buffer.h +3 -0
  222. data/src/core/lib/surface/builtins.cc +1 -1
  223. data/src/core/lib/surface/call.cc +683 -196
  224. data/src/core/lib/surface/call.h +26 -13
  225. data/src/core/lib/surface/call_trace.cc +42 -1
  226. data/src/core/lib/surface/channel.cc +0 -1
  227. data/src/core/lib/surface/channel.h +0 -6
  228. data/src/core/lib/surface/channel_init.h +26 -0
  229. data/src/core/lib/surface/init.cc +14 -8
  230. data/src/core/lib/surface/server.cc +256 -237
  231. data/src/core/lib/surface/server.h +26 -54
  232. data/src/core/lib/surface/version.cc +2 -2
  233. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  234. data/src/core/lib/transport/call_final_info.cc +38 -0
  235. data/src/core/lib/transport/call_final_info.h +54 -0
  236. data/src/core/lib/transport/connectivity_state.cc +3 -2
  237. data/src/core/lib/transport/connectivity_state.h +4 -0
  238. data/src/core/lib/transport/metadata_batch.h +4 -4
  239. data/src/core/lib/transport/transport.cc +70 -19
  240. data/src/core/lib/transport/transport.h +395 -25
  241. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  242. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  243. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  244. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  245. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  246. data/src/core/tsi/ssl_transport_security.cc +65 -43
  247. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  248. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  249. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  250. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  251. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  252. data/src/ruby/lib/grpc/version.rb +1 -1
  253. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  254. data/third_party/zlib/adler32.c +5 -27
  255. data/third_party/zlib/compress.c +5 -16
  256. data/third_party/zlib/crc32.c +86 -162
  257. data/third_party/zlib/deflate.c +233 -336
  258. data/third_party/zlib/deflate.h +8 -8
  259. data/third_party/zlib/gzguts.h +11 -12
  260. data/third_party/zlib/infback.c +7 -23
  261. data/third_party/zlib/inffast.c +1 -4
  262. data/third_party/zlib/inffast.h +1 -1
  263. data/third_party/zlib/inflate.c +30 -99
  264. data/third_party/zlib/inftrees.c +6 -11
  265. data/third_party/zlib/inftrees.h +3 -3
  266. data/third_party/zlib/trees.c +224 -302
  267. data/third_party/zlib/uncompr.c +4 -12
  268. data/third_party/zlib/zconf.h +6 -2
  269. data/third_party/zlib/zlib.h +191 -188
  270. data/third_party/zlib/zutil.c +16 -44
  271. data/third_party/zlib/zutil.h +10 -10
  272. metadata +35 -13
  273. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  274. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  275. data/src/core/lib/transport/pid_controller.cc +0 -51
  276. data/src/core/lib/transport/pid_controller.h +0 -116
  277. data/third_party/upb/upb/collections/array.h +0 -17
  278. data/third_party/upb/upb/collections/map.h +0 -17
  279. data/third_party/upb/upb/upb.hpp +0 -18
@@ -43,16 +43,15 @@ class RootCertificatesWatcher
43
43
  // presently, the watcher is immediately deleted when
44
44
  // CancelTlsCertificatesWatch() is called, but that can potentially change in
45
45
  // the future.
46
- RootCertificatesWatcher(
47
- RefCountedPtr<grpc_tls_certificate_distributor> parent,
48
- std::string cert_name)
49
- : parent_(std::move(parent)), cert_name_(std::move(cert_name)) {}
46
+ explicit RootCertificatesWatcher(
47
+ RefCountedPtr<grpc_tls_certificate_distributor> parent)
48
+ : parent_(std::move(parent)) {}
50
49
 
51
50
  void OnCertificatesChanged(absl::optional<absl::string_view> root_certs,
52
51
  absl::optional<PemKeyCertPairList>
53
52
  /* key_cert_pairs */) override {
54
53
  if (root_certs.has_value()) {
55
- parent_->SetKeyMaterials(cert_name_, std::string(root_certs.value()),
54
+ parent_->SetKeyMaterials("", std::string(root_certs.value()),
56
55
  absl::nullopt);
57
56
  }
58
57
  }
@@ -60,14 +59,13 @@ class RootCertificatesWatcher
60
59
  void OnError(grpc_error_handle root_cert_error,
61
60
  grpc_error_handle /*identity_cert_error*/) override {
62
61
  if (!root_cert_error.ok()) {
63
- parent_->SetErrorForCert(cert_name_, root_cert_error /* pass the ref */,
62
+ parent_->SetErrorForCert("", root_cert_error /* pass the ref */,
64
63
  absl::nullopt);
65
64
  }
66
65
  }
67
66
 
68
67
  private:
69
68
  RefCountedPtr<grpc_tls_certificate_distributor> parent_;
70
- std::string cert_name_;
71
69
  };
72
70
 
73
71
  class IdentityCertificatesWatcher
@@ -78,339 +76,142 @@ class IdentityCertificatesWatcher
78
76
  // presently, the watcher is immediately deleted when
79
77
  // CancelTlsCertificatesWatch() is called, but that can potentially change in
80
78
  // the future.
81
- IdentityCertificatesWatcher(
82
- RefCountedPtr<grpc_tls_certificate_distributor> parent,
83
- std::string cert_name)
84
- : parent_(std::move(parent)), cert_name_(std::move(cert_name)) {}
79
+ explicit IdentityCertificatesWatcher(
80
+ RefCountedPtr<grpc_tls_certificate_distributor> parent)
81
+ : parent_(std::move(parent)) {}
85
82
 
86
83
  void OnCertificatesChanged(
87
84
  absl::optional<absl::string_view> /* root_certs */,
88
85
  absl::optional<PemKeyCertPairList> key_cert_pairs) override {
89
86
  if (key_cert_pairs.has_value()) {
90
- parent_->SetKeyMaterials(cert_name_, absl::nullopt, key_cert_pairs);
87
+ parent_->SetKeyMaterials("", absl::nullopt, key_cert_pairs);
91
88
  }
92
89
  }
93
90
 
94
91
  void OnError(grpc_error_handle /*root_cert_error*/,
95
92
  grpc_error_handle identity_cert_error) override {
96
93
  if (!identity_cert_error.ok()) {
97
- parent_->SetErrorForCert(cert_name_, absl::nullopt,
94
+ parent_->SetErrorForCert("", absl::nullopt,
98
95
  identity_cert_error /* pass the ref */);
99
96
  }
100
97
  }
101
98
 
102
99
  private:
103
100
  RefCountedPtr<grpc_tls_certificate_distributor> parent_;
104
- std::string cert_name_;
105
101
  };
106
102
 
107
103
  } // namespace
108
104
 
109
105
  //
110
- // XdsCertificateProvider::ClusterCertificateState
106
+ // XdsCertificateProvider
111
107
  //
112
108
 
113
- XdsCertificateProvider::ClusterCertificateState::~ClusterCertificateState() {
114
- if (root_cert_watcher_ != nullptr) {
115
- root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
116
- }
117
- if (identity_cert_watcher_ != nullptr) {
118
- identity_cert_distributor_->CancelTlsCertificatesWatch(
119
- identity_cert_watcher_);
120
- }
109
+ XdsCertificateProvider::XdsCertificateProvider(
110
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
111
+ absl::string_view root_cert_name,
112
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
113
+ absl::string_view identity_cert_name,
114
+ std::vector<StringMatcher> san_matchers)
115
+ : distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()),
116
+ root_cert_provider_(std::move(root_cert_provider)),
117
+ root_cert_name_(root_cert_name),
118
+ identity_cert_provider_(std::move(identity_cert_provider)),
119
+ identity_cert_name_(identity_cert_name),
120
+ san_matchers_(std::move(san_matchers)),
121
+ require_client_certificate_(false) {
122
+ distributor_->SetWatchStatusCallback(
123
+ absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
121
124
  }
122
125
 
123
- bool XdsCertificateProvider::ClusterCertificateState::IsSafeToRemove() const {
124
- return !watching_root_certs_ && !watching_identity_certs_ &&
125
- root_cert_distributor_ == nullptr &&
126
- identity_cert_distributor_ == nullptr;
126
+ XdsCertificateProvider::XdsCertificateProvider(
127
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
128
+ absl::string_view root_cert_name,
129
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
130
+ absl::string_view identity_cert_name, bool require_client_certificate)
131
+ : distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()),
132
+ root_cert_provider_(std::move(root_cert_provider)),
133
+ root_cert_name_(root_cert_name),
134
+ identity_cert_provider_(std::move(identity_cert_provider)),
135
+ identity_cert_name_(identity_cert_name),
136
+ require_client_certificate_(require_client_certificate) {
137
+ distributor_->SetWatchStatusCallback(
138
+ absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
127
139
  }
128
140
 
129
- void XdsCertificateProvider::ClusterCertificateState::
130
- UpdateRootCertNameAndDistributor(
131
- const std::string& cert_name, absl::string_view root_cert_name,
132
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor) {
133
- if (root_cert_name_ == root_cert_name &&
134
- root_cert_distributor_ == root_cert_distributor) {
135
- return;
136
- }
137
- root_cert_name_ = std::string(root_cert_name);
138
- if (watching_root_certs_) {
139
- // The root certificates are being watched. Swap out the watcher.
140
- if (root_cert_distributor_ != nullptr) {
141
- root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
142
- }
143
- if (root_cert_distributor != nullptr) {
144
- UpdateRootCertWatcher(cert_name, root_cert_distributor.get());
145
- } else {
146
- root_cert_watcher_ = nullptr;
147
- xds_certificate_provider_->distributor_->SetErrorForCert(
148
- "",
141
+ XdsCertificateProvider::~XdsCertificateProvider() {
142
+ distributor_->SetWatchStatusCallback(nullptr);
143
+ }
144
+
145
+ UniqueTypeName XdsCertificateProvider::type() const {
146
+ static UniqueTypeName::Factory kFactory("Xds");
147
+ return kFactory.Create();
148
+ }
149
+
150
+ void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
151
+ bool root_being_watched,
152
+ bool identity_being_watched) {
153
+ if (!cert_name.empty()) {
154
+ if (root_being_watched) {
155
+ distributor_->SetErrorForCert(
156
+ cert_name,
149
157
  GRPC_ERROR_CREATE(
150
158
  "No certificate provider available for root certificates"),
151
159
  absl::nullopt);
152
160
  }
153
- }
154
- // Swap out the root certificate distributor
155
- root_cert_distributor_ = std::move(root_cert_distributor);
156
- }
157
-
158
- void XdsCertificateProvider::ClusterCertificateState::
159
- UpdateIdentityCertNameAndDistributor(
160
- const std::string& cert_name, absl::string_view identity_cert_name,
161
- RefCountedPtr<grpc_tls_certificate_distributor>
162
- identity_cert_distributor) {
163
- if (identity_cert_name_ == identity_cert_name &&
164
- identity_cert_distributor_ == identity_cert_distributor) {
165
- return;
166
- }
167
- identity_cert_name_ = std::string(identity_cert_name);
168
- if (watching_identity_certs_) {
169
- // The identity certificates are being watched. Swap out the watcher.
170
- if (identity_cert_distributor_ != nullptr) {
171
- identity_cert_distributor_->CancelTlsCertificatesWatch(
172
- identity_cert_watcher_);
173
- }
174
- if (identity_cert_distributor != nullptr) {
175
- UpdateIdentityCertWatcher(cert_name, identity_cert_distributor.get());
176
- } else {
177
- identity_cert_watcher_ = nullptr;
178
- xds_certificate_provider_->distributor_->SetErrorForCert(
179
- "", absl::nullopt,
161
+ if (identity_being_watched) {
162
+ distributor_->SetErrorForCert(
163
+ cert_name, absl::nullopt,
180
164
  GRPC_ERROR_CREATE(
181
165
  "No certificate provider available for identity certificates"));
182
166
  }
167
+ return;
183
168
  }
184
- // Swap out the identity certificate distributor
185
- identity_cert_distributor_ = std::move(identity_cert_distributor);
186
- }
187
-
188
- void XdsCertificateProvider::ClusterCertificateState::UpdateRootCertWatcher(
189
- const std::string& cert_name,
190
- grpc_tls_certificate_distributor* root_cert_distributor) {
191
- auto watcher = std::make_unique<RootCertificatesWatcher>(
192
- xds_certificate_provider_->distributor_, cert_name);
193
- root_cert_watcher_ = watcher.get();
194
- root_cert_distributor->WatchTlsCertificates(std::move(watcher),
195
- root_cert_name_, absl::nullopt);
196
- }
197
-
198
- void XdsCertificateProvider::ClusterCertificateState::UpdateIdentityCertWatcher(
199
- const std::string& cert_name,
200
- grpc_tls_certificate_distributor* identity_cert_distributor) {
201
- auto watcher = std::make_unique<IdentityCertificatesWatcher>(
202
- xds_certificate_provider_->distributor_, cert_name);
203
- identity_cert_watcher_ = watcher.get();
204
- identity_cert_distributor->WatchTlsCertificates(
205
- std::move(watcher), absl::nullopt, identity_cert_name_);
206
- }
207
-
208
- void XdsCertificateProvider::ClusterCertificateState::WatchStatusCallback(
209
- const std::string& cert_name, bool root_being_watched,
210
- bool identity_being_watched) {
211
169
  // We aren't specially handling the case where root_cert_distributor is same
212
170
  // as identity_cert_distributor. Always using two separate watchers
213
171
  // irrespective of the fact results in a straightforward design, and using a
214
172
  // single watcher does not seem to provide any benefit other than cutting down
215
173
  // on the number of callbacks.
216
- if (root_being_watched && !watching_root_certs_) {
217
- // We need to start watching root certs.
218
- watching_root_certs_ = true;
219
- if (root_cert_distributor_ == nullptr) {
220
- xds_certificate_provider_->distributor_->SetErrorForCert(
174
+ if (root_being_watched && root_cert_watcher_ == nullptr) {
175
+ // Start watching root cert.
176
+ if (root_cert_provider_ == nullptr) {
177
+ distributor_->SetErrorForCert(
221
178
  cert_name,
222
179
  GRPC_ERROR_CREATE(
223
180
  "No certificate provider available for root certificates"),
224
181
  absl::nullopt);
225
182
  } else {
226
- UpdateRootCertWatcher(cert_name, root_cert_distributor_.get());
227
- }
228
- } else if (!root_being_watched && watching_root_certs_) {
229
- // We need to cancel root certs watch.
230
- watching_root_certs_ = false;
231
- if (root_cert_distributor_ != nullptr) {
232
- root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
233
- root_cert_watcher_ = nullptr;
183
+ auto watcher = std::make_unique<RootCertificatesWatcher>(distributor_);
184
+ root_cert_watcher_ = watcher.get();
185
+ root_cert_provider_->distributor()->WatchTlsCertificates(
186
+ std::move(watcher), root_cert_name_, absl::nullopt);
234
187
  }
235
- GPR_ASSERT(root_cert_watcher_ == nullptr);
236
- }
237
- if (identity_being_watched && !watching_identity_certs_) {
238
- watching_identity_certs_ = true;
239
- if (identity_cert_distributor_ == nullptr) {
240
- xds_certificate_provider_->distributor_->SetErrorForCert(
188
+ } else if (!root_being_watched && root_cert_watcher_ != nullptr) {
189
+ // Cancel root cert watch.
190
+ GPR_ASSERT(root_cert_provider_ != nullptr);
191
+ root_cert_provider_->distributor()->CancelTlsCertificatesWatch(
192
+ root_cert_watcher_);
193
+ root_cert_watcher_ = nullptr;
194
+ }
195
+ if (identity_being_watched && identity_cert_watcher_ == nullptr) {
196
+ // Start watching identity cert.
197
+ if (identity_cert_provider_ == nullptr) {
198
+ distributor_->SetErrorForCert(
241
199
  cert_name, absl::nullopt,
242
200
  GRPC_ERROR_CREATE(
243
201
  "No certificate provider available for identity certificates"));
244
202
  } else {
245
- UpdateIdentityCertWatcher(cert_name, identity_cert_distributor_.get());
203
+ auto watcher =
204
+ std::make_unique<IdentityCertificatesWatcher>(distributor_);
205
+ identity_cert_watcher_ = watcher.get();
206
+ identity_cert_provider_->distributor()->WatchTlsCertificates(
207
+ std::move(watcher), absl::nullopt, identity_cert_name_);
246
208
  }
247
- } else if (!identity_being_watched && watching_identity_certs_) {
248
- watching_identity_certs_ = false;
249
- if (identity_cert_distributor_ != nullptr) {
250
- identity_cert_distributor_->CancelTlsCertificatesWatch(
251
- identity_cert_watcher_);
252
- identity_cert_watcher_ = nullptr;
253
- }
254
- GPR_ASSERT(identity_cert_watcher_ == nullptr);
255
- }
256
- }
257
-
258
- //
259
- // XdsCertificateProvider
260
- //
261
-
262
- XdsCertificateProvider::XdsCertificateProvider()
263
- : distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()) {
264
- distributor_->SetWatchStatusCallback(
265
- absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
266
- }
267
-
268
- XdsCertificateProvider::~XdsCertificateProvider() {
269
- distributor_->SetWatchStatusCallback(nullptr);
270
- }
271
-
272
- UniqueTypeName XdsCertificateProvider::type() const {
273
- static UniqueTypeName::Factory kFactory("Xds");
274
- return kFactory.Create();
275
- }
276
-
277
- bool XdsCertificateProvider::ProvidesRootCerts(const std::string& cert_name) {
278
- MutexLock lock(&mu_);
279
- auto it = certificate_state_map_.find(cert_name);
280
- if (it == certificate_state_map_.end()) return false;
281
- return it->second->ProvidesRootCerts();
282
- }
283
-
284
- void XdsCertificateProvider::UpdateRootCertNameAndDistributor(
285
- const std::string& cert_name, absl::string_view root_cert_name,
286
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor) {
287
- MutexLock lock(&mu_);
288
- auto it = certificate_state_map_.find(cert_name);
289
- if (it == certificate_state_map_.end()) {
290
- it =
291
- certificate_state_map_
292
- .emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
293
- .first;
294
- }
295
- it->second->UpdateRootCertNameAndDistributor(cert_name, root_cert_name,
296
- root_cert_distributor);
297
- // Delete unused entries.
298
- if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
299
- }
300
-
301
- bool XdsCertificateProvider::ProvidesIdentityCerts(
302
- const std::string& cert_name) {
303
- MutexLock lock(&mu_);
304
- auto it = certificate_state_map_.find(cert_name);
305
- if (it == certificate_state_map_.end()) return false;
306
- return it->second->ProvidesIdentityCerts();
307
- }
308
-
309
- void XdsCertificateProvider::UpdateIdentityCertNameAndDistributor(
310
- const std::string& cert_name, absl::string_view identity_cert_name,
311
- RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor) {
312
- MutexLock lock(&mu_);
313
- auto it = certificate_state_map_.find(cert_name);
314
- if (it == certificate_state_map_.end()) {
315
- it =
316
- certificate_state_map_
317
- .emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
318
- .first;
319
- }
320
- it->second->UpdateIdentityCertNameAndDistributor(
321
- cert_name, identity_cert_name, identity_cert_distributor);
322
- // Delete unused entries.
323
- if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
324
- }
325
-
326
- bool XdsCertificateProvider::GetRequireClientCertificate(
327
- const std::string& cert_name) {
328
- MutexLock lock(&mu_);
329
- auto it = certificate_state_map_.find(cert_name);
330
- if (it == certificate_state_map_.end()) return false;
331
- return it->second->require_client_certificate();
332
- }
333
-
334
- void XdsCertificateProvider::UpdateRequireClientCertificate(
335
- const std::string& cert_name, bool require_client_certificate) {
336
- MutexLock lock(&mu_);
337
- auto it = certificate_state_map_.find(cert_name);
338
- if (it == certificate_state_map_.end()) return;
339
- it->second->set_require_client_certificate(require_client_certificate);
340
- }
341
-
342
- std::vector<StringMatcher> XdsCertificateProvider::GetSanMatchers(
343
- const std::string& cluster) {
344
- MutexLock lock(&san_matchers_mu_);
345
- auto it = san_matcher_map_.find(cluster);
346
- if (it == san_matcher_map_.end()) return {};
347
- return it->second;
348
- }
349
-
350
- void XdsCertificateProvider::UpdateSubjectAlternativeNameMatchers(
351
- const std::string& cluster, std::vector<StringMatcher> matchers) {
352
- MutexLock lock(&san_matchers_mu_);
353
- if (matchers.empty()) {
354
- san_matcher_map_.erase(cluster);
355
- } else {
356
- san_matcher_map_[cluster] = std::move(matchers);
357
- }
358
- }
359
-
360
- void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
361
- bool root_being_watched,
362
- bool identity_being_watched) {
363
- MutexLock lock(&mu_);
364
- auto it = certificate_state_map_.find(cert_name);
365
- if (it == certificate_state_map_.end()) {
366
- it =
367
- certificate_state_map_
368
- .emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
369
- .first;
209
+ } else if (!identity_being_watched && identity_cert_watcher_ != nullptr) {
210
+ GPR_ASSERT(identity_cert_provider_ != nullptr);
211
+ identity_cert_provider_->distributor()->CancelTlsCertificatesWatch(
212
+ identity_cert_watcher_);
213
+ identity_cert_watcher_ = nullptr;
370
214
  }
371
- it->second->WatchStatusCallback(cert_name, root_being_watched,
372
- identity_being_watched);
373
- // Delete unused entries.
374
- if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
375
- }
376
-
377
- namespace {
378
-
379
- void* XdsCertificateProviderArgCopy(void* p) {
380
- XdsCertificateProvider* xds_certificate_provider =
381
- static_cast<XdsCertificateProvider*>(p);
382
- return xds_certificate_provider->Ref().release();
383
- }
384
-
385
- void XdsCertificateProviderArgDestroy(void* p) {
386
- XdsCertificateProvider* xds_certificate_provider =
387
- static_cast<XdsCertificateProvider*>(p);
388
- xds_certificate_provider->Unref();
389
- }
390
-
391
- int XdsCertificateProviderArgCmp(void* p, void* q) {
392
- return QsortCompare(p, q);
393
- }
394
-
395
- const grpc_arg_pointer_vtable kChannelArgVtable = {
396
- XdsCertificateProviderArgCopy, XdsCertificateProviderArgDestroy,
397
- XdsCertificateProviderArgCmp};
398
-
399
- } // namespace
400
-
401
- grpc_arg XdsCertificateProvider::MakeChannelArg() const {
402
- return grpc_channel_arg_pointer_create(
403
- const_cast<char*>(GRPC_ARG_XDS_CERTIFICATE_PROVIDER),
404
- const_cast<XdsCertificateProvider*>(this), &kChannelArgVtable);
405
- }
406
-
407
- RefCountedPtr<XdsCertificateProvider>
408
- XdsCertificateProvider::GetFromChannelArgs(const grpc_channel_args* args) {
409
- XdsCertificateProvider* xds_certificate_provider =
410
- grpc_channel_args_find_pointer<XdsCertificateProvider>(
411
- args, GRPC_ARG_XDS_CERTIFICATE_PROVIDER);
412
- return xds_certificate_provider != nullptr ? xds_certificate_provider->Ref()
413
- : nullptr;
414
215
  }
415
216
 
416
217
  } // namespace grpc_core
@@ -40,24 +40,26 @@
40
40
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
41
41
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
42
42
 
43
- #define GRPC_ARG_XDS_CERTIFICATE_PROVIDER \
44
- "grpc.internal.xds_certificate_provider"
45
-
46
43
  namespace grpc_core {
47
44
 
48
45
  class XdsCertificateProvider : public grpc_tls_certificate_provider {
49
46
  public:
50
- XdsCertificateProvider();
51
- ~XdsCertificateProvider() override;
52
-
53
- static absl::string_view ChannelArgName() {
54
- return GRPC_ARG_XDS_CERTIFICATE_PROVIDER;
55
- }
47
+ // ctor for client side
48
+ XdsCertificateProvider(
49
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
50
+ absl::string_view root_cert_name,
51
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
52
+ absl::string_view identity_cert_name,
53
+ std::vector<StringMatcher> san_matchers);
54
+
55
+ // ctor for server side
56
+ XdsCertificateProvider(
57
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
58
+ absl::string_view root_cert_name,
59
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
60
+ absl::string_view identity_cert_name, bool require_client_certificate);
56
61
 
57
- static int ChannelArgsCompare(const XdsCertificateProvider* a,
58
- const XdsCertificateProvider* b) {
59
- return QsortCompare(a, b);
60
- }
62
+ ~XdsCertificateProvider() override;
61
63
 
62
64
  RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
63
65
  return distributor_;
@@ -65,91 +67,27 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
65
67
 
66
68
  UniqueTypeName type() const override;
67
69
 
68
- bool ProvidesRootCerts(const std::string& cert_name);
69
- void UpdateRootCertNameAndDistributor(
70
- const std::string& cert_name, absl::string_view root_cert_name,
71
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
72
-
73
- bool ProvidesIdentityCerts(const std::string& cert_name);
74
- void UpdateIdentityCertNameAndDistributor(
75
- const std::string& cert_name, absl::string_view identity_cert_name,
76
- RefCountedPtr<grpc_tls_certificate_distributor>
77
- identity_cert_distributor);
78
-
79
- bool GetRequireClientCertificate(const std::string& cert_name);
80
- // Updating \a require_client_certificate for a non-existing \a cert_name has
81
- // no effect.
82
- void UpdateRequireClientCertificate(const std::string& cert_name,
83
- bool require_client_certificate);
84
-
85
- std::vector<StringMatcher> GetSanMatchers(const std::string& cluster);
86
- void UpdateSubjectAlternativeNameMatchers(
87
- const std::string& cluster, std::vector<StringMatcher> matchers);
88
-
89
- grpc_arg MakeChannelArg() const;
70
+ bool ProvidesRootCerts() const { return root_cert_provider_ != nullptr; }
71
+ bool ProvidesIdentityCerts() const {
72
+ return identity_cert_provider_ != nullptr;
73
+ }
74
+ bool require_client_certificate() const {
75
+ return require_client_certificate_;
76
+ }
77
+ const std::vector<StringMatcher>& san_matchers() const {
78
+ return san_matchers_;
79
+ }
90
80
 
91
- static RefCountedPtr<XdsCertificateProvider> GetFromChannelArgs(
92
- const grpc_channel_args* args);
81
+ static absl::string_view ChannelArgName() {
82
+ return "grpc.internal.xds_certificate_provider";
83
+ }
84
+ static int ChannelArgsCompare(const XdsCertificateProvider* a,
85
+ const XdsCertificateProvider* b) {
86
+ if (a == nullptr || b == nullptr) return QsortCompare(a, b);
87
+ return a->Compare(b);
88
+ }
93
89
 
94
90
  private:
95
- class ClusterCertificateState {
96
- public:
97
- explicit ClusterCertificateState(
98
- XdsCertificateProvider* xds_certificate_provider)
99
- : xds_certificate_provider_(xds_certificate_provider) {}
100
-
101
- ~ClusterCertificateState();
102
-
103
- // Returns true if the certs aren't being watched and there are no
104
- // distributors configured.
105
- bool IsSafeToRemove() const;
106
-
107
- bool ProvidesRootCerts() const { return root_cert_distributor_ != nullptr; }
108
- bool ProvidesIdentityCerts() const {
109
- return identity_cert_distributor_ != nullptr;
110
- }
111
-
112
- void UpdateRootCertNameAndDistributor(
113
- const std::string& cert_name, absl::string_view root_cert_name,
114
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
115
- void UpdateIdentityCertNameAndDistributor(
116
- const std::string& cert_name, absl::string_view identity_cert_name,
117
- RefCountedPtr<grpc_tls_certificate_distributor>
118
- identity_cert_distributor);
119
-
120
- void UpdateRootCertWatcher(
121
- const std::string& cert_name,
122
- grpc_tls_certificate_distributor* root_cert_distributor);
123
- void UpdateIdentityCertWatcher(
124
- const std::string& cert_name,
125
- grpc_tls_certificate_distributor* identity_cert_distributor);
126
-
127
- bool require_client_certificate() const {
128
- return require_client_certificate_;
129
- }
130
- void set_require_client_certificate(bool require_client_certificate) {
131
- require_client_certificate_ = require_client_certificate;
132
- }
133
-
134
- void WatchStatusCallback(const std::string& cert_name,
135
- bool root_being_watched,
136
- bool identity_being_watched);
137
-
138
- private:
139
- XdsCertificateProvider* xds_certificate_provider_;
140
- bool watching_root_certs_ = false;
141
- bool watching_identity_certs_ = false;
142
- std::string root_cert_name_;
143
- std::string identity_cert_name_;
144
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
145
- RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
146
- grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
147
- root_cert_watcher_ = nullptr;
148
- grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
149
- identity_cert_watcher_ = nullptr;
150
- bool require_client_certificate_ = false;
151
- };
152
-
153
91
  int CompareImpl(const grpc_tls_certificate_provider* other) const override {
154
92
  // TODO(yashykt): Maybe do something better here.
155
93
  return QsortCompare(static_cast<const grpc_tls_certificate_provider*>(this),
@@ -160,22 +98,17 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
160
98
  bool identity_being_watched);
161
99
 
162
100
  RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
163
-
164
- Mutex mu_;
165
- std::map<std::string /*cert_name*/, std::unique_ptr<ClusterCertificateState>>
166
- certificate_state_map_ ABSL_GUARDED_BY(mu_);
167
-
168
- // Use a separate mutex for san_matchers_ to avoid deadlocks since
169
- // san_matchers_ needs to be accessed when a handshake is being done and we
170
- // run into a possible deadlock scenario if using the same mutex. The mutex
171
- // deadlock cycle is formed as -
172
- // WatchStatusCallback() -> SetKeyMaterials() ->
173
- // TlsChannelSecurityConnector::TlsChannelCertificateWatcher::OnCertificatesChanged()
174
- // -> HandshakeManager::Add() -> SecurityHandshaker::DoHandshake() ->
175
- // subject_alternative_names_matchers()
176
- Mutex san_matchers_mu_;
177
- std::map<std::string /*cluster_name*/, std::vector<StringMatcher>>
178
- san_matcher_map_ ABSL_GUARDED_BY(san_matchers_mu_);
101
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider_;
102
+ std::string root_cert_name_;
103
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider_;
104
+ std::string identity_cert_name_;
105
+ std::vector<StringMatcher> san_matchers_;
106
+ bool require_client_certificate_ = false;
107
+
108
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
109
+ root_cert_watcher_ = nullptr;
110
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
111
+ identity_cert_watcher_ = nullptr;
179
112
  };
180
113
 
181
114
  } // namespace grpc_core