grpc 1.32.0 → 1.33.0.pre1

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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +175 -376
  3. data/include/grpc/grpc.h +0 -5
  4. data/include/grpc/grpc_security.h +16 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +0 -5
  6. data/src/core/ext/filters/client_channel/client_channel.cc +204 -170
  7. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  8. data/src/core/ext/filters/client_channel/config_selector.h +34 -5
  9. data/src/core/ext/filters/client_channel/lb_policy.h +1 -1
  10. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  11. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  12. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +3 -2
  13. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +106 -106
  14. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
  15. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +3 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +3 -3
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +198 -126
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +439 -249
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
  23. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +553 -358
  26. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  27. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
  28. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -2
  29. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +44 -43
  30. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
  31. data/src/core/ext/filters/client_channel/server_address.cc +80 -0
  32. data/src/core/ext/filters/client_channel/server_address.h +25 -36
  33. data/src/core/ext/filters/client_channel/service_config.cc +16 -13
  34. data/src/core/ext/filters/client_channel/service_config.h +7 -4
  35. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  36. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  37. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  38. data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
  39. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  40. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  41. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +17 -10
  42. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -2
  43. data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
  44. data/src/core/ext/transport/chttp2/transport/internal.h +5 -0
  45. data/src/core/ext/transport/chttp2/transport/parsing.cc +16 -2
  46. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +29 -9
  47. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +66 -0
  48. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +123 -45
  49. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +310 -53
  50. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +17 -5
  51. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +45 -0
  52. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +1 -0
  53. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +16 -9
  54. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +38 -15
  55. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  56. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  57. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +54 -8
  58. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +123 -5
  59. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +40 -16
  60. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +114 -5
  61. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  62. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  63. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +36 -16
  64. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +86 -20
  65. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -6
  66. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +54 -5
  67. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +10 -6
  68. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +28 -11
  69. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +184 -57
  70. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +504 -69
  71. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +6 -5
  72. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +11 -7
  73. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +78 -26
  74. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +236 -25
  75. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +8 -9
  76. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +19 -33
  77. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -3
  78. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +16 -0
  79. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +65 -23
  80. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +229 -47
  81. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +20 -10
  82. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +67 -4
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +3 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +6 -0
  85. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  86. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  87. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  88. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  89. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  90. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  91. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  92. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  93. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  94. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  95. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  96. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  97. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  98. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  99. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  100. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  101. data/src/core/ext/xds/certificate_provider_factory.h +59 -0
  102. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  103. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  104. data/src/core/ext/xds/certificate_provider_store.h +50 -0
  105. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
  106. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
  107. data/src/core/ext/xds/xds_api.cc +301 -93
  108. data/src/core/ext/xds/xds_api.h +129 -92
  109. data/src/core/ext/xds/xds_channel_args.h +6 -3
  110. data/src/core/ext/xds/xds_client.cc +498 -410
  111. data/src/core/ext/xds/xds_client.h +105 -51
  112. data/src/core/ext/xds/xds_client_stats.cc +18 -12
  113. data/src/core/ext/xds/xds_client_stats.h +33 -5
  114. data/src/core/lib/channel/channel_args.h +0 -1
  115. data/src/core/lib/channel/channelz.cc +10 -45
  116. data/src/core/lib/channel/channelz.h +11 -19
  117. data/src/core/lib/channel/channelz_registry.cc +12 -11
  118. data/src/core/lib/channel/channelz_registry.h +3 -0
  119. data/src/core/lib/gpr/time_precise.cc +2 -0
  120. data/src/core/lib/gpr/time_precise.h +6 -2
  121. data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
  122. data/src/core/lib/gprpp/ref_counted.h +51 -22
  123. data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
  124. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -5
  125. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  126. data/src/core/lib/json/json_util.cc +58 -0
  127. data/src/core/lib/json/json_util.h +37 -0
  128. data/src/core/lib/security/certificate_provider.h +60 -0
  129. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
  130. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
  131. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  132. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  133. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +6 -10
  134. data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
  135. data/src/core/lib/surface/channel.cc +9 -31
  136. data/src/core/lib/surface/channel.h +6 -1
  137. data/src/core/lib/surface/init.cc +26 -9
  138. data/src/core/lib/surface/version.cc +2 -2
  139. data/src/core/lib/transport/bdp_estimator.h +2 -1
  140. data/src/core/lib/transport/connectivity_state.h +2 -2
  141. data/src/core/lib/transport/metadata.cc +11 -1
  142. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  143. data/src/core/tsi/ssl_transport_security.cc +2 -2
  144. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  145. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -3
  146. data/src/ruby/lib/grpc/version.rb +1 -1
  147. data/third_party/boringssl-with-bazel/err_data.c +465 -463
  148. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  149. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  150. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  151. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  152. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  153. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  156. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
  158. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +98 -11
  159. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +51 -6
  160. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
  161. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
  162. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
  163. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  164. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
  165. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  166. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  167. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  168. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  169. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  170. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  171. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  172. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  173. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  174. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  175. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  176. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  177. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  178. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  179. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  180. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  181. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  182. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  183. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  184. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  185. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  186. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  187. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  188. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  189. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  190. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  191. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  192. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  193. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  194. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +9 -2
  195. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
  196. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +188 -78
  197. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
  198. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  199. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  200. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  201. data/third_party/boringssl-with-bazel/src/ssl/internal.h +9 -9
  202. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  203. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  204. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
  205. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +2 -2
  206. metadata +72 -42
  207. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
  208. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
  209. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  210. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
  211. data/src/core/ext/xds/xds_channel.h +0 -46
  212. data/src/core/ext/xds/xds_channel_secure.cc +0 -103
  213. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  214. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -0,0 +1,45 @@
1
+ //
2
+ //
3
+ // Copyright 2020 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
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/security/credentials/xds/xds_credentials.h"
22
+
23
+ namespace grpc_core {
24
+
25
+ constexpr const char XdsCredentials::kCredentialsTypeXds[];
26
+
27
+ grpc_core::RefCountedPtr<grpc_channel_security_connector>
28
+ XdsCredentials::create_security_connector(
29
+ grpc_core::RefCountedPtr<grpc_call_credentials> call_creds,
30
+ const char* target_name, const grpc_channel_args* args,
31
+ grpc_channel_args** new_args) {
32
+ /* TODO(yashkt) : To be filled */
33
+ if (fallback_credentials_ != nullptr) {
34
+ return fallback_credentials_->create_security_connector(
35
+ std::move(call_creds), target_name, args, new_args);
36
+ }
37
+ return nullptr;
38
+ }
39
+
40
+ } // namespace grpc_core
41
+
42
+ grpc_channel_credentials* grpc_xds_credentials_create(
43
+ grpc_channel_credentials* fallback_credentials) {
44
+ return new grpc_core::XdsCredentials(fallback_credentials->Ref());
45
+ }
@@ -0,0 +1,51 @@
1
+ //
2
+ //
3
+ // Copyright 2020 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
+ //
18
+
19
+ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_XDS_XDS_CREDENTIALS_H
20
+ #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_XDS_XDS_CREDENTIALS_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <grpc/grpc_security.h>
25
+
26
+ #include "src/core/lib/security/credentials/credentials.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ class XdsCredentials final : public grpc_channel_credentials {
31
+ public:
32
+ static constexpr const char kCredentialsTypeXds[] = "Xds";
33
+
34
+ explicit XdsCredentials(
35
+ grpc_core::RefCountedPtr<grpc_channel_credentials> fallback_credentials)
36
+ : grpc_channel_credentials(kCredentialsTypeXds),
37
+ fallback_credentials_(std::move(fallback_credentials)) {}
38
+
39
+ grpc_core::RefCountedPtr<grpc_channel_security_connector>
40
+ create_security_connector(
41
+ grpc_core::RefCountedPtr<grpc_call_credentials> call_creds,
42
+ const char* target_name, const grpc_channel_args* args,
43
+ grpc_channel_args** new_args) override;
44
+
45
+ private:
46
+ grpc_core::RefCountedPtr<grpc_channel_credentials> fallback_credentials_;
47
+ };
48
+
49
+ } // namespace grpc_core
50
+
51
+ #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_XDS_XDS_CREDENTIALS_H */
@@ -56,11 +56,9 @@ class grpc_fake_channel_security_connector final
56
56
  target_(gpr_strdup(target)),
57
57
  expected_targets_(
58
58
  gpr_strdup(grpc_fake_transport_get_expected_targets(args))),
59
- is_lb_channel_(
60
- grpc_channel_args_find(args, GRPC_ARG_ADDRESS_IS_XDS_SERVER) !=
61
- nullptr ||
62
- grpc_channel_args_find(
63
- args, GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER) != nullptr) {
59
+ is_lb_channel_(grpc_channel_args_find(
60
+ args, GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER) !=
61
+ nullptr) {
64
62
  const grpc_arg* target_name_override_arg =
65
63
  grpc_channel_args_find(args, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
66
64
  if (target_name_override_arg != nullptr) {
@@ -147,9 +145,7 @@ class grpc_fake_channel_security_connector final
147
145
  char* target_name_override() const { return target_name_override_; }
148
146
 
149
147
  private:
150
- bool fake_check_target(const char* target_type, const char* target,
151
- const char* set_str) const {
152
- GPR_ASSERT(target_type != nullptr);
148
+ bool fake_check_target(const char* target, const char* set_str) const {
153
149
  GPR_ASSERT(target != nullptr);
154
150
  char** set = nullptr;
155
151
  size_t set_size = 0;
@@ -185,14 +181,14 @@ class grpc_fake_channel_security_connector final
185
181
  expected_targets_);
186
182
  goto done;
187
183
  }
188
- if (!fake_check_target("LB", target_, lbs_and_backends[1])) {
184
+ if (!fake_check_target(target_, lbs_and_backends[1])) {
189
185
  gpr_log(GPR_ERROR, "LB target '%s' not found in expected set '%s'",
190
186
  target_, lbs_and_backends[1]);
191
187
  goto done;
192
188
  }
193
189
  success = true;
194
190
  } else {
195
- if (!fake_check_target("Backend", target_, lbs_and_backends[0])) {
191
+ if (!fake_check_target(target_, lbs_and_backends[0])) {
196
192
  gpr_log(GPR_ERROR, "Backend target '%s' not found in expected set '%s'",
197
193
  target_, lbs_and_backends[0]);
198
194
  goto done;
@@ -174,6 +174,11 @@ class PemKeyCertPair {
174
174
  return *this;
175
175
  }
176
176
 
177
+ bool operator==(const PemKeyCertPair& other) const {
178
+ return std::strcmp(this->private_key(), other.private_key()) == 0 &&
179
+ std::strcmp(this->cert_chain(), other.cert_chain()) == 0;
180
+ }
181
+
177
182
  char* private_key() const { return private_key_.get(); }
178
183
  char* cert_chain() const { return cert_chain_.get(); }
179
184
 
@@ -183,42 +183,30 @@ void CreateChannelzNode(grpc_channel_stack_builder* builder) {
183
183
  const grpc_channel_args* args =
184
184
  grpc_channel_stack_builder_get_channel_arguments(builder);
185
185
  // Check whether channelz is enabled.
186
- const bool channelz_enabled = grpc_channel_arg_get_bool(
187
- grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ),
188
- GRPC_ENABLE_CHANNELZ_DEFAULT);
186
+ const bool channelz_enabled = grpc_channel_args_find_bool(
187
+ args, GRPC_ARG_ENABLE_CHANNELZ, GRPC_ENABLE_CHANNELZ_DEFAULT);
189
188
  if (!channelz_enabled) return;
190
189
  // Get parameters needed to create the channelz node.
191
- const size_t channel_tracer_max_memory = grpc_channel_arg_get_integer(
192
- grpc_channel_args_find(args,
193
- GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE),
190
+ const size_t channel_tracer_max_memory = grpc_channel_args_find_integer(
191
+ args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
194
192
  {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
195
- const intptr_t channelz_parent_uuid =
196
- grpc_core::channelz::GetParentUuidFromArgs(*args);
193
+ const bool is_internal_channel = grpc_channel_args_find_bool(
194
+ args, GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, false);
197
195
  // Create the channelz node.
198
196
  const char* target = grpc_channel_stack_builder_get_target(builder);
199
197
  grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node =
200
198
  grpc_core::MakeRefCounted<grpc_core::channelz::ChannelNode>(
201
199
  target != nullptr ? target : "", channel_tracer_max_memory,
202
- channelz_parent_uuid);
200
+ is_internal_channel);
203
201
  channelz_node->AddTraceEvent(
204
202
  grpc_core::channelz::ChannelTrace::Severity::Info,
205
203
  grpc_slice_from_static_string("Channel created"));
206
- // Update parent channel node, if any.
207
- if (channelz_parent_uuid > 0) {
208
- grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node =
209
- grpc_core::channelz::ChannelzRegistry::Get(channelz_parent_uuid);
210
- if (parent_node != nullptr) {
211
- grpc_core::channelz::ChannelNode* parent =
212
- static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get());
213
- parent->AddChildChannel(channelz_node->uuid());
214
- }
215
- }
216
204
  // Add channelz node to channel args.
217
- // We remove the arg for the parent uuid, since we no longer need it.
205
+ // We remove the is_internal_channel arg, since we no longer need it.
218
206
  grpc_arg new_arg = grpc_channel_arg_pointer_create(
219
207
  const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_NODE), channelz_node.get(),
220
208
  &channelz_node_arg_vtable);
221
- const char* args_to_remove[] = {GRPC_ARG_CHANNELZ_PARENT_UUID};
209
+ const char* args_to_remove[] = {GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL};
222
210
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
223
211
  args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
224
212
  grpc_channel_stack_builder_set_channel_arguments(builder, new_args);
@@ -506,16 +494,6 @@ grpc_call* grpc_channel_create_registered_call(
506
494
  static void destroy_channel(void* arg, grpc_error* /*error*/) {
507
495
  grpc_channel* channel = static_cast<grpc_channel*>(arg);
508
496
  if (channel->channelz_node != nullptr) {
509
- if (channel->channelz_node->parent_uuid() > 0) {
510
- grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node =
511
- grpc_core::channelz::ChannelzRegistry::Get(
512
- channel->channelz_node->parent_uuid());
513
- if (parent_node != nullptr) {
514
- grpc_core::channelz::ChannelNode* parent =
515
- static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get());
516
- parent->RemoveChildChannel(channel->channelz_node->uuid());
517
- }
518
- }
519
497
  channel->channelz_node->AddTraceEvent(
520
498
  grpc_core::channelz::ChannelTrace::Severity::Info,
521
499
  grpc_slice_from_static_string("Channel destroyed"));
@@ -161,8 +161,13 @@ inline void grpc_channel_internal_unref(grpc_channel* channel) {
161
161
  grpc_channel_internal_unref(channel)
162
162
  #endif
163
163
 
164
- /** Return the channel's compression options. */
164
+ // Return the channel's compression options.
165
165
  grpc_compression_options grpc_channel_compression_options(
166
166
  const grpc_channel* channel);
167
167
 
168
+ // Ping the channels peer (load balanced channels will select one sub-channel to
169
+ // ping); if the channel is not connected, posts a failed.
170
+ void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
171
+ void* tag, void* reserved);
172
+
168
173
  #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_H */
@@ -18,6 +18,8 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "src/core/lib/surface/init.h"
22
+
21
23
  #include <limits.h>
22
24
  #include <memory.h>
23
25
 
@@ -26,6 +28,7 @@
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/log.h>
28
30
  #include <grpc/support/time.h>
31
+
29
32
  #include "src/core/lib/channel/channel_stack.h"
30
33
  #include "src/core/lib/channel/channelz_registry.h"
31
34
  #include "src/core/lib/channel/connected_channel.h"
@@ -37,6 +40,7 @@
37
40
  #include "src/core/lib/http/parser.h"
38
41
  #include "src/core/lib/iomgr/call_combiner.h"
39
42
  #include "src/core/lib/iomgr/combiner.h"
43
+ #include "src/core/lib/iomgr/exec_ctx.h"
40
44
  #include "src/core/lib/iomgr/executor.h"
41
45
  #include "src/core/lib/iomgr/iomgr.h"
42
46
  #include "src/core/lib/iomgr/resource_quota.h"
@@ -47,7 +51,6 @@
47
51
  #include "src/core/lib/surface/call.h"
48
52
  #include "src/core/lib/surface/channel_init.h"
49
53
  #include "src/core/lib/surface/completion_queue.h"
50
- #include "src/core/lib/surface/init.h"
51
54
  #include "src/core/lib/surface/lame_client.h"
52
55
  #include "src/core/lib/surface/server.h"
53
56
  #include "src/core/lib/transport/bdp_estimator.h"
@@ -211,15 +214,29 @@ void grpc_shutdown_internal(void* /*ignored*/) {
211
214
  void grpc_shutdown(void) {
212
215
  GRPC_API_TRACE("grpc_shutdown(void)", 0, ());
213
216
  grpc_core::MutexLock lock(&g_init_mu);
217
+
214
218
  if (--g_initializations == 0) {
215
- g_initializations++;
216
- g_shutting_down = true;
217
- // spawn a detached thread to do the actual clean up in case we are
218
- // currently in an executor thread.
219
- grpc_core::Thread cleanup_thread(
220
- "grpc_shutdown", grpc_shutdown_internal, nullptr, nullptr,
221
- grpc_core::Thread::Options().set_joinable(false).set_tracked(false));
222
- cleanup_thread.Start();
219
+ grpc_core::ApplicationCallbackExecCtx* acec =
220
+ grpc_core::ApplicationCallbackExecCtx::Get();
221
+ if (!grpc_iomgr_is_any_background_poller_thread() &&
222
+ (acec == nullptr ||
223
+ (acec->Flags() & GRPC_APP_CALLBACK_EXEC_CTX_FLAG_IS_INTERNAL_THREAD) ==
224
+ 0)) {
225
+ // just run clean-up when this is called on non-executor thread.
226
+ gpr_log(GPR_DEBUG, "grpc_shutdown starts clean-up now");
227
+ g_shutting_down = true;
228
+ grpc_shutdown_internal_locked();
229
+ } else {
230
+ // spawn a detached thread to do the actual clean up in case we are
231
+ // currently in an executor thread.
232
+ gpr_log(GPR_DEBUG, "grpc_shutdown spawns clean-up thread");
233
+ g_initializations++;
234
+ g_shutting_down = true;
235
+ grpc_core::Thread cleanup_thread(
236
+ "grpc_shutdown", grpc_shutdown_internal, nullptr, nullptr,
237
+ grpc_core::Thread::Options().set_joinable(false).set_tracked(false));
238
+ cleanup_thread.Start();
239
+ }
223
240
  }
224
241
  }
225
242
 
@@ -23,6 +23,6 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
- const char* grpc_version_string(void) { return "12.0.0"; }
26
+ const char* grpc_version_string(void) { return "13.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "giggle"; }
28
+ const char* grpc_g_stands_for(void) { return "geeky"; }
@@ -68,13 +68,14 @@ class BdpEstimator {
68
68
  }
69
69
  GPR_ASSERT(ping_state_ == PingState::SCHEDULED);
70
70
  ping_state_ = PingState::STARTED;
71
- accumulator_ = 0;
72
71
  ping_start_time_ = gpr_now(GPR_CLOCK_MONOTONIC);
73
72
  }
74
73
 
75
74
  // Completes a previously started ping, returns when to schedule the next one
76
75
  grpc_millis CompletePing();
77
76
 
77
+ int64_t accumulator() { return accumulator_; }
78
+
78
79
  private:
79
80
  enum class PingState { UNSCHEDULED, SCHEDULED, STARTED };
80
81
 
@@ -73,8 +73,8 @@ class AsyncConnectivityStateWatcherInterface
73
73
  protected:
74
74
  class Notifier;
75
75
 
76
- // If \a combiner is nullptr, then the notification will be scheduled on the
77
- // ExecCtx.
76
+ // If \a work_serializer is nullptr, then the notification will be scheduled
77
+ // on the ExecCtx.
78
78
  explicit AsyncConnectivityStateWatcherInterface(
79
79
  std::shared_ptr<WorkSerializer> work_serializer = nullptr)
80
80
  : work_serializer_(std::move(work_serializer)) {}
@@ -250,8 +250,18 @@ void grpc_mdctx_global_shutdown() {
250
250
  gpr_mu_destroy(&shard->mu);
251
251
  gc_mdtab(shard);
252
252
  if (shard->count != 0) {
253
- gpr_log(GPR_DEBUG, "WARNING: %" PRIuPTR " metadata elements were leaked",
253
+ gpr_log(GPR_ERROR, "WARNING: %" PRIuPTR " metadata elements were leaked",
254
254
  shard->count);
255
+ for (int i = 0; i < shard->capacity; i++) {
256
+ for (InternedMetadata* md = shard->elems[i].next; md;
257
+ md = md->bucket_next()) {
258
+ char* key_str = grpc_slice_to_c_string(md->key());
259
+ char* value_str = grpc_slice_to_c_string(md->value());
260
+ gpr_log(GPR_ERROR, "mdelem '%s' = '%s'", key_str, value_str);
261
+ gpr_free(key_str);
262
+ gpr_free(value_str);
263
+ }
264
+ }
255
265
  if (grpc_iomgr_abort_on_leaks()) {
256
266
  abort();
257
267
  }
@@ -34,18 +34,10 @@ void grpc_resolver_fake_init(void);
34
34
  void grpc_resolver_fake_shutdown(void);
35
35
  void grpc_lb_policy_grpclb_init(void);
36
36
  void grpc_lb_policy_grpclb_shutdown(void);
37
- void grpc_lb_policy_cds_init(void);
38
- void grpc_lb_policy_cds_shutdown(void);
39
- void grpc_lb_policy_eds_init(void);
40
- void grpc_lb_policy_eds_shutdown(void);
41
- void grpc_lb_policy_lrs_init(void);
42
- void grpc_lb_policy_lrs_shutdown(void);
43
37
  void grpc_lb_policy_priority_init(void);
44
38
  void grpc_lb_policy_priority_shutdown(void);
45
39
  void grpc_lb_policy_weighted_target_init(void);
46
40
  void grpc_lb_policy_weighted_target_shutdown(void);
47
- void grpc_lb_policy_xds_routing_init(void);
48
- void grpc_lb_policy_xds_routing_shutdown(void);
49
41
  void grpc_lb_policy_pick_first_init(void);
50
42
  void grpc_lb_policy_pick_first_shutdown(void);
51
43
  void grpc_lb_policy_round_robin_init(void);
@@ -56,8 +48,6 @@ void grpc_resolver_dns_native_init(void);
56
48
  void grpc_resolver_dns_native_shutdown(void);
57
49
  void grpc_resolver_sockaddr_init(void);
58
50
  void grpc_resolver_sockaddr_shutdown(void);
59
- void grpc_resolver_xds_init(void);
60
- void grpc_resolver_xds_shutdown(void);
61
51
  void grpc_client_idle_filter_init(void);
62
52
  void grpc_client_idle_filter_shutdown(void);
63
53
  void grpc_max_age_filter_init(void);
@@ -71,6 +61,25 @@ void grpc_client_authority_filter_shutdown(void);
71
61
  void grpc_workaround_cronet_compression_filter_init(void);
72
62
  void grpc_workaround_cronet_compression_filter_shutdown(void);
73
63
 
64
+ #ifndef GRPC_NO_XDS
65
+ namespace grpc_core {
66
+ void XdsClientGlobalInit();
67
+ void XdsClientGlobalShutdown();
68
+ } // namespace grpc_core
69
+ void grpc_certificate_provider_registry_init(void);
70
+ void grpc_certificate_provider_registry_shutdown(void);
71
+ void grpc_lb_policy_cds_init(void);
72
+ void grpc_lb_policy_cds_shutdown(void);
73
+ void grpc_lb_policy_eds_init(void);
74
+ void grpc_lb_policy_eds_shutdown(void);
75
+ void grpc_lb_policy_eds_drop_init(void);
76
+ void grpc_lb_policy_eds_drop_shutdown(void);
77
+ void grpc_lb_policy_xds_cluster_manager_init(void);
78
+ void grpc_lb_policy_xds_cluster_manager_shutdown(void);
79
+ void grpc_resolver_xds_init(void);
80
+ void grpc_resolver_xds_shutdown(void);
81
+ #endif
82
+
74
83
  void grpc_register_built_in_plugins(void) {
75
84
  grpc_register_plugin(grpc_http_filters_init,
76
85
  grpc_http_filters_shutdown);
@@ -86,18 +95,10 @@ void grpc_register_built_in_plugins(void) {
86
95
  grpc_resolver_fake_shutdown);
87
96
  grpc_register_plugin(grpc_lb_policy_grpclb_init,
88
97
  grpc_lb_policy_grpclb_shutdown);
89
- grpc_register_plugin(grpc_lb_policy_cds_init,
90
- grpc_lb_policy_cds_shutdown);
91
- grpc_register_plugin(grpc_lb_policy_eds_init,
92
- grpc_lb_policy_eds_shutdown);
93
- grpc_register_plugin(grpc_lb_policy_lrs_init,
94
- grpc_lb_policy_lrs_shutdown);
95
98
  grpc_register_plugin(grpc_lb_policy_priority_init,
96
99
  grpc_lb_policy_priority_shutdown);
97
100
  grpc_register_plugin(grpc_lb_policy_weighted_target_init,
98
101
  grpc_lb_policy_weighted_target_shutdown);
99
- grpc_register_plugin(grpc_lb_policy_xds_routing_init,
100
- grpc_lb_policy_xds_routing_shutdown);
101
102
  grpc_register_plugin(grpc_lb_policy_pick_first_init,
102
103
  grpc_lb_policy_pick_first_shutdown);
103
104
  grpc_register_plugin(grpc_lb_policy_round_robin_init,
@@ -108,8 +109,6 @@ void grpc_register_built_in_plugins(void) {
108
109
  grpc_resolver_dns_native_shutdown);
109
110
  grpc_register_plugin(grpc_resolver_sockaddr_init,
110
111
  grpc_resolver_sockaddr_shutdown);
111
- grpc_register_plugin(grpc_resolver_xds_init,
112
- grpc_resolver_xds_shutdown);
113
112
  grpc_register_plugin(grpc_client_idle_filter_init,
114
113
  grpc_client_idle_filter_shutdown);
115
114
  grpc_register_plugin(grpc_max_age_filter_init,
@@ -122,4 +121,20 @@ void grpc_register_built_in_plugins(void) {
122
121
  grpc_client_authority_filter_shutdown);
123
122
  grpc_register_plugin(grpc_workaround_cronet_compression_filter_init,
124
123
  grpc_workaround_cronet_compression_filter_shutdown);
124
+ #ifndef GRPC_NO_XDS
125
+ grpc_register_plugin(grpc_core::XdsClientGlobalInit,
126
+ grpc_core::XdsClientGlobalShutdown);
127
+ grpc_register_plugin(grpc_certificate_provider_registry_init,
128
+ grpc_certificate_provider_registry_shutdown);
129
+ grpc_register_plugin(grpc_lb_policy_cds_init,
130
+ grpc_lb_policy_cds_shutdown);
131
+ grpc_register_plugin(grpc_lb_policy_eds_init,
132
+ grpc_lb_policy_eds_shutdown);
133
+ grpc_register_plugin(grpc_lb_policy_eds_drop_init,
134
+ grpc_lb_policy_eds_drop_shutdown);
135
+ grpc_register_plugin(grpc_lb_policy_xds_cluster_manager_init,
136
+ grpc_lb_policy_xds_cluster_manager_shutdown);
137
+ grpc_register_plugin(grpc_resolver_xds_init,
138
+ grpc_resolver_xds_shutdown);
139
+ #endif
125
140
  }